Файл DLL (Библиотека DynamicLink) — это файл библиотеки динамической связи, также известный как «разработка приложений», является типом файла программного обеспечения. В Windows многие приложения не являются полным исполняемым исполняемым, которые разделены на некоторые относительно независимые библиотеки динамической связи, а именно DLL-файлы, помещенные в систему. Когда мы выполняем программу, будет вызываться соответствующий файл DLL. Приложение может использовать несколько файлов DLL, файл DLL также может использоваться различными приложениями, такой файл DLL называется общим файлом DLL.
2.dll Модификация файлов
Многие библиотеки упаковки в реальном использовании могут понадобиться масштабировать или изменять (треснуты). Но нет исходного кода, как изменить файл DLL? Эта статья делает простой расчесывание. Netdll файл.
Так называемые рабочие должны иметь проститутку, прежде чем официально начать, мы подготовим следующие публичные инструменты:
1. .NET Refluer Completed в C #, очень полезно, основной пользователь экспортирует проект VS, а затем просмотреть отношения класса Call.
Простейший взлом через NET Reflector. Получение закрытого ключа шифрования
2. ILDasm Перекомпилируйте файл DLL и отбрасывает файл IL
ILMASM — это программа .NET, в которой предоставлена Microsoft, расположенная в «C: ProgramageFiles Microsoft Sdks Windows v7.0a bin ». Мой компьютер находится в этой папке в этой папке, 64-битные системы могут быть под C: Programfilefiles (x86) Microsoft Sdks Windows v7.0a bin.
3. NodePad ++, используемый для просмотра и редактирования файлов IL, которые для регинировщиков ILDasm.
4. ILASM компилирует файл .il .dll file
ILASM находится в соответствующем каталоге .NETFRAMEWORK, например: C: Windows Microsoft.net framework v2.0.50727 Ilasm.exe
5. Программное обеспечение Visual Studio используется для просмотра файлов проекта C #, которые Refreicle.net Refermeration.
1. Сначала найдите файл DLL, который вам необходимо изменить;
2. Используйте iLDasm.exe, чтобы открыть файл DLL и дамп в файл IL. Здесь есть деталь. Вы должны передавать в формат UTF-8. Вы не можете превратить в ACSII, или какой-то запутанный код потеряет некоторую информацию. При преобразовании в файл IL файл .res, который обычно генерирует одно имен одновременно.
3. Откройте файл DLL, используя ReflicTore.net и выберите элемент в браузере левого объекта. Как показано ниже
Затем нажмите «Файл / экспортировать исходный код» . или использовать клавишу ярлыка CTRL + S непосредственно для всплывающего интерфейса Сохранить интерфейс. Выберите путь, который вы хотите сохранить здесь, нажмите «Пуск».
4. Когда мы приедем сюда, мы можем поставить два инструмента ILDasm.exe и Reflector.net. Используйте NodePad ++, чтобы открыть файл IL, просто нажмите, используйте vs, чтобы открыть файл проекта DLL C #, который только что был преобразован. Используйте файл проекта C # для просмотра классов и ссылок, затем подтвердите, что вам нужно изменить. Затем в файл IL сохраните его после завершения модификации. Ссылка http://www.cnblogs.com/zc22/Archive/2010/02/20/1669550.html)
Как ВЗЛОМАТЬ приложение и получить ИСХОДНЫЙ КОД программы? [Reverse engineering, JetBrains dotPeek]
5. Далее, используйте ярлык Win + R, чтобы открыть командную строку, введите CMD Нажмите, чтобы подтвердить.
Используйте команду: cdc: windows microsoft.net frame v2.0.50727 Переключитесь в папку, в которой каталог находится в папке, где находится Ilasm.
Далее: Ilasmc: mbtcp.il c: mbtcp.res /output=c:/mbtcp.dll / dll (исходный файл iLASM.
Я положил файлы .il и .res, которые я сделали в приводе C, я положил сгенерированный каталог файлов в корневом каталоге C-привода, а выполнение следующее.
Когда вы видите подсказку успеха, вы можете найти файл DLL, который вы выполнили в своем каталоге. Что касается того, как взломать шифрование файла DLL, просто измените соответствующую позицию в файле IL.
Источник: russianblogs.com
Неядерный реактор. Взламываем протектор .NET Reactor
Для защиты приложений .NET от отладки и реверса существует множество способов (шифрование, компрессия и другие), а также специальных протекторов, таких как, например, Agile.Net и Enigma. О взломе многих из них мы уже писали. Сегодня я расскажу, как побороть еще один популярный протектор и обфускатор — .NET Reactor.
Итак, представим себе такую гипотетическую задачу: у нас имеется некое приложение с онлайн‑проверкой лицензии при загрузке. Его анализ при помощи DIE детектит наличие платформы .NET. Загрузив программу в отладчик dnSpy, обнаруживаем сразу две вещи: плохую и хорошую. Начну с плохой: приложение жестоко обфусцировано, часть методов переименована в бессмысленный набор символов, а главное, вместо их кода повсюду пустые заглушки.
Для очистки совести пробуем сдампить приложение способами, описанным в моей предыдущей статье, — это частенько помогает восстановить скрытый код методов. Увы, не в нашем случае: сдампленные модули работоспособны, но несильно отличаются от исходных. Обфускация никуда не делась, тела методов все равно пустые.
Возвращаемся в отладчик dnSpy и пробуем потрассировать работающую программу. А вот и хорошая новость: в приложении нет антиотладчика, приложение прекрасно запускается и трассируется, причем при трассировке «пустых» методов во вкладке Call Stack видно, что счетчик команд перемещается по невидимому коду и проваливается в вызовы. Погуляв вслепую по коду, мы обнаруживаем еще одну хорошую новость: не все методы переименованы, некоторые названия вполне осмысленны, и можно даже нащупать процедуру проверки валидности (на скриншоте выше — isValid ). Тело данного метода скрыто, но название и индекс известны, и это уже что‑то.
Попробуем подойти к деобфускации по стандартной схеме: для начала натравливаем на приложение de4dot. К сожалению, в нашем случае этот метод не работает, de4dot ничего не деобфусцирует. Более старые версии сразу валятся с ошибкой:
Detected .NET Reactor 4.8
Необработанное исключение: System.Security.Cryptography.CryptographicException: Недопустимая длина данных для дешифрования.
в System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
в de4dot.code.deobfuscators.DeobUtils.AesDecrypt(Byte[] data, Byte[] key, Byte[] iv) в D:ade4dot-cexde4dot-cexde4dot.codedeobfuscatorsDeobUtils.cs:строка 87
в de4dot.code.deobfuscators.dotNET_Reactor.v4.EncryptedResource.DecrypterV1.Decrypt(EmbeddedResource resource) в D:ade4dot-cexde4dot-cexde4dot.codedeobfuscatorsdotNET_Reactorv4EncryptedResource.cs:строка 225
в de4dot.code.deobfuscators.dotNET_Reactor.v4.EncryptedResource.Decrypt()
.
Версии посвежее формулируют ошибку лаконичнее:
Latest version and source code: http://www.de4dot.com/
21 deobfuscator modules loaded!
Detected .NET Reactor 4.8
ERROR:
ERROR:
ERROR:
ERROR: Hmmmm. something didn’t work. Try the latest version.
Ну теперь мы хотя бы знаем, с чем имеем дело, — это .NET Reactor версии предположительно 4.8. Версия довольно старая, однако с ней не справляется даже специально обученный под .NET Reactor de4dot. Ошибка та же, и нам снова предлагают поискать версию посвежее.
Трудности нас не останавливают: в конце концов, мы уже научились разбирать более крутые обфускаторы типа Agile буквально изнутри на самом низком уровне. Загружаем нашу злополучную программу в отладчик x32dbg и вспоминаем все то, о чем я писал в предыдущей статье. Дабы не тратить время на повторение, опускаю длинное описание теоретической части процесса. Вкратце: загружаем библиотеку cljit.dll, отладочные символы к ней и ставим точку останова на вход JIT-компилятора CILJit:: compileMethod .
Указанный способ работает, то есть при каждом вызове компилятора в поле ILCode структуры CORINFO_METHOD_INFO мы видим расшифрованный IL-код каждого метода. В принципе, можно анализировать код и даже патчить на лету, но это долго и утомительно, вдобавок нас ждет еще одна ложка дегтя. Напомню, что в предыдущей статье я описывал слегка жульнический способ определить индекс компилированной процедуры. Суть его состоит в том, что хендл ftn (первое двойное слово в структуре CORINFO_METHOD_INFO ), если его использовать как указатель, указывает на одинарное слово — индекс метода в .NET метадате EXE-модуля.
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Источник: xakep.ru
Взлом и анализ приложения на C# созданное в Xamarin
Существует большое количество приложений на С# созданы с помощью платформы Xamarin. В этой статье рассмотрим способы анализа и взлома подобных приложений.
Как взломать приложение на C# созданное в Xamarin
Недавно в мои руки попало интересное мобильное приложение на C# созданное в Xamarin, которое к моему сожалению работало не так, как хотелось бы мне. Хороший повод распотрошить приложение, подумал я.
Статья написана в образовательных целях. Мы не призываем к взлому программ, а пытаемся показать и привлечь внимание разработчиков, к тому, насколько уязвимы могут быть приложения.
Для этого дела отлично подойдет последняя версия GDA.
Итак, открываем APK-файл приложения и видим, что выглядит он как‑то очень странно. Все классы activity имеют примерно одинаковый шаблонный код:
Это наводит на мысли, что нам попался какой-то некошерный APK. Возможно — это фреймворк… Попробуем поменять расширение .apk на .zip и тут же в глаза бросается загадочная папка assemblies, которая содержит множество DLL-библиотек. Загадочность заключается в том, что в обычных мобильных приложениях такой папки нет.
Поскольку многие библиотеки в названии имеют слово Xamarin, все становится ясным — основной код приложения написан на С# и находится в библиотеке DLL, а шаблонные части кода написаны на Java, которые предназначенны для связи между средой выполнения Mono и виртуальной машиной среды выполнения Android (ART).
Выбор инструмента
Для работы с .Net на мой взгляд, лучше всего подходят следующие инструменты.
dotPeek от разработчика JetBrains. Утилита может декомпилировать и анализировать файлы .exe и .dll. Утилита имеет самую удобную навигацию по декомпилированному коду, так что, если говорить только об анализе алгоритма, данная тулза самая удобная.
dnSpy — может декомпилировать, редактировать, компилировать и отлаживать сборки .Net. Стоит отметить, что весь функционал, кроме декомпиляции, работает далеко не всегда, все зависит от конкретной ситуации. Лично в моем случае компиляция не хотела работать: dnSpy не смог связать пространства имен Mono и Android.
Simple-assembly-explorer — это довольно древний но от этого не утративший свою актуальности инструмент. Утилита умеет декомпилировать .exe и .dll в код на С# или CIL. Самая важная функция — инструмент может компилировать код на CIL, что дает возможность без труда вносить изменения в анализируемые файлы.
Для распаковки и сборки файла APK я буду использовать архиватор 7z вместо используемого для подобных случаев apktool. Далее я объясню почему.
Распакова APK
В начале я попробовал использовать для распаковки APK популярную софтину apktool, но при сборке появилась загвоздка из‑за того, что apktool «не знает» что такое .dll и не считает его стандартным для файла APK. Стандартными считаются исключительно файлы с именами из следующего массива:
При сборке файла APK все неизвестные файлы сжимаются (тип сжатия DEFLATED), а фреймворк Xamarin желает увидеть свои DLL несжатыми (STORED) и соответственно не может их прочитать.
В начале появилась мысля пофиксить и пересобрать apktool, но позже я решил поступить иначе: распаковывать и собрать файлы простым архиватором, без использования функции сжатия. Ведь декодирование манифеста или получение smali-кода мне в данном конкретном случае не нужно, а зачем тогда искать на попу приключения?
Итак, начинаем распаковку:
17z.exe x program.apk -oprogram_apk
После распаковки, кроме привычных для APK файлов, видим папкуassemblies с файлами dll. Из всех этих файлов нас интересует только одна библиотека, название которой совпадает с названием нашего приложения. Ее‑то мы и будем вскрывать и исследовать.
Патчинг .Net
Анализ DLL и поиск места для внесения правок выходит за рамки сегодняшней статьи, так как мыслям на эту тему будет тесно даже в книге. Остановлюсь лишь на технических моментах. Как я писал выше, dnSpy отказался компилировать исправленную библиотеку, поэтому пришлось прибегнуть к помощи Simple-assembly-explorer (SAE).
Допустим, нам нужно, чтобы данная функция всегда возвращала true:
Поскольку правки можно вносить только в IL-код, в окне SAE переключаемся на вкладку Details, где видим следующую картину:
123456789101112131415161718190 L_0000: ldarg.01 L_0001: ldstr «connectivity»2 L_0006: callvirt Java.Lang.Object Android.Content.Context::GetSystemService(System.String)3 L_000b: castclass Android.Net.ConnectivityManager4 L_0010: stloc.05 L_0011: ldloc.06 L_0012: brtrue.s 9 -> ldloc.07 L_0014: ldc.i4.08 L_0015: ret9 L_0016: ldloc.010 L_0017: callvirt Android.Net.NetworkInfo Android.Net.ConnectivityManager::get_ActiveNetworkInfo()11 L_001c: stloc.112 L_001d: ldloc.113 L_001e: brfalse.s 17 -> ldc.i4.014 L_0020: ldloc.115 L_0021: callvirt System.Boolean Android.Net.NetworkInfo::get_IsConnected()16 L_0026: ret17 L_0027: ldc.i4.018 L_0028: ret
Тут есть два пути.
Я выбрал второй вариант — это намного быстрее. Более того, немножко погуглив, можно обнаружить очень полезный сайт sharplab.io, на котором весьма удобно конвертировать код из C# в CIL.
Итак, вводим в левой вкладке следующее:
и справа среди кучи лишнего получаем:
123456IL_0000: nopIL_0001: ldc.i4.1IL_0002: stloc.0IL_0003: br.s IL_0005IL_0005: ldloc.0IL_0006: ret
Вставляем полученный код в библиотеку с помощью Simple assembly explorer, не забывая при этом сохранить измененную DLL. Если мы ничего не напутали и нигде не ошиблись, то пора собирать новый APK.
Сборка APK обратно
Для сборки, как я уже писал выше, будем использовать 7z в режиме без сжатия. Полученный таким образом APK будет большего размера, чем исходный, ну да размер не главное:
17z.exe a -tzip -mx0 -r0 program_patched_unalign_unsigned.apk .program_apk*.*
- -tzip — формат архива,
- -mx0 — отсутствие сжатия,
- -r0 — рекурсивный обход всех подкаталогов
Да, перед сборкой лучше удалить каталогMETA-INF, содержащий старую подпись. Он не нужен, ведь нам придется подписывать APK самостоятельно. Затем нужно создать сертификат для подписи и поместить его в хранилище.
Если у вас уже есть сертификат, то этот шаг можно пропустить. Создаем сертификат с помощью утилиты keytool из состава JDK:
1″c:AndroidAndroid Studiojrebinkeytool.exe» -genkey -v -keystore keys.keystore -alias key -keyalg RSA -keysize 2048 -validity 10000
Она задаст стандартные вопросы:
123456789101112131415161718192021Enter keystore password:Re-enter new password:What is your first and last name? [Unknown]: xWhat is the name of your organizational unit? [Unknown]: xWhat is the name of your organization? [Unknown]: xWhat is the name of your City or Locality? [Unknown]: xWhat is the name of your State or Province? [Unknown]: xWhat is the two-letter country code for this unit? [Unknown]: xIs CN=x, OU=x, O=x, L=x, ST=x, C=x correct? [no]: yes Generating 2 048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10 000 days for: CN=x, OU=x, O=x, L=x, ST=x, C=x[Storing keys.keystore]
Ну и после этого можно переходить к подписыванию:
1jarsigner.exe -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore keys.keystore -signedjar program_pathed_unalign.apk program_pathed_unalign_unsigned.apk key
В результате будет создан почти готовый к установке файл
«Почти» — потому что перед использованием его следует выровнять программой zipalign из состава build-tools SDK Android. Данная процедура гарантирует, что все несжатые файлы в архиве выровнены относительно начала файла.
Это позволяет получить доступ к файлам напрямую, без необходимости копирования данных в ОЗУ, что уменьшит использование памяти вашим приложением.
1zipalign.exe -v 4 program_pathed_unalign.apk program_pathed.apk
После этого можно смело устанавливать программу на телефон или эмулятор и приступать к ее тестированию.
Заключение
Как видите, приложениея C# в сборке Xamarin ничуть не сложнее для анализа, чем родные приложения ОС Android, надо лишь учесть некоторые тонкости при сборке APK.
Полезные ссылки:
- Фаззинг программ с помощью WinAFL
- Взлом программы macOS с помощью IDA и Hiew
Наши проекты:
Источник: telegra.ph