Как разобрать программу exe на файлы

Привет, хабровчане. В рамках курса «Reverse-Engineering. Basic» Александр Колесников (специалист по комплексной защите объектов информатизации) подготовил авторскую статью.

Также приглашаем всех желающих на открытый вебинар по теме «Эксплуатация уязвимостей в драйвере. Часть 1». Участники вебинара вместе с экспертом разберут уязвимости переполнения в драйверах и особенности разработки эксплойтов в режиме ядра.

Статья расскажет о подходах к анализу запакованных исполняемых файлов с помощью простых средств для обратной разработки. Будут рассмотрены некоторые пакеры, которые применяются для упаковки исполняемых файлов. Все примеры будут проведены в ОС Windows, однако изучаемые подходы можно легко портировать на любую ОС.

Инструментарий и настройка ОС

Для тестов будем использовать виртуальную машину под управлением ОС Windows. Инструментарий будет содержать следующие приложения:

  • отладчик x64dbg;
  • установленный по умолчанию плагин x64dbg Scylla;
  • hiew Demo;

Самый быстрый и простой способ провести распаковку любого исполняемого файла — применить отладчик. Но так как мы будем также рассматривать язык программирования Python, то может понадобится проект:

Реверсинг python программы, почему python не безопасен

  • uncompile6 проект, который позволяет разобрать байткод виртуальной машины Python;
  • pyinstallerExtractor инструмент для распаковки архива pyInstaller.

Общие методы снятия паковки

Разберемся, что же такое паковка. В большинстве случаев исполняемые файлы современных языков программирования имеют довольно большой размер при минимальном наборе функций. Чтобы оптимизировать данную величину, можно применить паковку или сжатие. Наиболее распространенный на сегодняшний день пакер — UPX. Ниже приведен пример того, как пакер проводит сжатие исполняемого файла.

На картинке может показаться, что файл стал по размеру больше, однако это не всегда так. Большинство файлов за счет такой модификации могут уменьшить свой размер до 1.5 раз от исходного объема.

Что же от этого реверс-инженеру? Почему надо знать и уметь определять, что файл упакован? Приведу наглядный пример. Ниже приведен снимок файла, который не запакован:

И файл, который был пропущен через алгоритм UPX:

Изменения коснулись в этом случае двух основных точек исполняемого файла:

  1. Точка входа — в случае с упакованным файлом это начало алгоритма распаковки, настоящий алгоритм программы будет работать только после того, как будет распакован оригинальный файл;
  2. Код оригинального файла: теперь не найти паттернов, которые можно сразу разбирать как команды.

Итак, чтобы снова анализировать оригинальный файл, нужно найти настоящую или оригинальную точку входа. Для этого нужно разбить алгоритм на основные этапы:

КАК ДЕКОМПИЛИРОВАТЬ EXE DLL C# | КАК УЗНАТЬ ИСХОДНЫЙ КОД ПРОГРАММЫ | ДЕКОМПИЛЯЦИЯ | C# ПЛЮШКИ

  1. Этап подготовки исполнения файла — загрузчик ОС настраивает окружение, загружает файл в оперативную память;
  2. Сохранение контекста — упаковщик сохраняет контекст исполнения файла (набор значений регистров общего назначения, которые были установлены загрузчиком ОС);
  3. Распаковка оригинального файла;
  4. Передача управления оригинальному файлу.
Читайте также:
Выкидывает из всех программ

Все описанные выше этапы можно легко отследить в отладчике. Особенно может выделяться процедура сохранения контекста. Для нее в разных архитектурах могут быть использованы команды pushad/popad или множественное использование команды push . Поэтому всегда приложение трассируют до первого изменения регистра ESP/RSP, и ставят «Hardware Breakpoint» на адрес, который был помещен в регистр в первый раз. Второе обращение этому адресу будет в момент восстановления контекста, который заполнил загрузчик ОС. Без него приложение завершится с ошибкой.

Пример UPX

Попробуем с помощью отладчика найти оригинальную точку входа для приложения. Запечатлим оригинальную точку входа до упаковки UPX:

Как та же точка входа выглядит после упаковки:

Запустим отладчик и попробуем найти место сохранения контекста:

Ждем первого использования ESP — в отладчике при этом значение регистра подсветится красным цветом. Затем устанавливаем точку останова на адрес и просто запускаем приложение:

В результате попадаем на оригинальную точку входа:

Вот так просто, теперь используя плагин Scylla Hide можно сохранить результирующий файл на жесткий диск и продолжить его анализ.

Подобный метод можно применять для любого упаковщика, который сохраняет контекст на стек.

Пример PyInstaller

Не всегда подобный подход работает для приложений, которые используют более сложную структуру исполняемого файла. Рассмотрим файл, который был создан с помощью PyInstaller — пакет, который позволяет преобразовать Python скрипт в исполняемый файл. При генерации исполняемого файла создается архив, который содержит виртуальную машину Python и все необходимые библиотеки. Сам исходный код приложения при этом преобразуется в байт код и его нельзя дезассемблировать.

Попробуем все же получить что-то читаемое. Создадим простое приложение на Python и упакуем с помощью PyInstaller. Исходный код приложения:

def main(): print(«Hello World!») if __name__ == ‘__main__’: main()

Установим пакет pyInstaller и создадим exe файл:

pip install pyinstaller pyinstaller -F hello.py #-F создать один файл

Итак, проведем сбор информации о том, что в итоге получилось. У нас есть архив, который должен запустить виртуальную машину, и код, который мы записали в виде скрипта. Попробуем восстановить исходник и просто его прочесть даже без запуска.

После выполнения команд выше, у вас должна создаться директория ./dist/test.exe . Откроем последовательно файл с помощью pyinstallerextractor и uncompile3 :

Наш скрипт находится в директории, которая создается в результате распаковки. Наименование файла должно соответствовать названию exe файла. В нашем случае это test.pyc . Откроем его в hiew :

Декомпиляция стандартными средствами невозможна, так как инструменты просто не умеют работать с байткодом Python. Применим специализированный инструмент — uncompile6 .

Таким образом можно снова получить исходный код.

Источник: habr.com

Как разобрать программу exe на файлы

Возможно такие темы уже и звучали,но после 4 часов поиска что,где и куда,искать тут в поиске уже было лень..
Суть проблемы в следующем,есть экзешник написанный на VB ,в него вшит IP адрес.Нужно декомпилировать его,изменить ай пи,и собрать обратно.Как и чем это делать,понятия не имею Поэтому хотелось бы узнать порядок действий,и соответствующий софт для этого.

Читайте также:
Как заработать бесплатные голоса в ВК без программ быстро

Белик Виталий 🙂
Регистрация: 23.07.2007
Сообщений: 57,792

Как и чем это делать,понятия не имею

Для нчала узнать на чем он написан и чем защищен (программа PEID поможет)
После чего отладчиком вылавливать где этот IP всплывает, дальше зависит от того как он всплывает.

I’m learning to live.
Регистрация: 07.10.2009
Сообщений: 4

Ну насколько я понимаю это Virtual Basic.Пробовал развернуть VB Decompiler’om .Все замечательно открывается. но там нет возможности редактирования.Так же там нашел этот айпишник. но вот как все это отредактировать и сохранить..Кстати в каком расширении должны быть файлы ,что бы их можно было компилировать?
http://s04.radikal.ru/i177/0910/58/bb894fcb73bd.jpg

Заблокирован
Регистрация: 18.11.2007
Сообщений: 254
а ресурсах нету этой строки?
Регистрация: 07.10.2009
Сообщений: 4

Ты имеешь ввиду исправить в ResHack’e? В нем кроме картинки ярлыка и инфы о разработчиках ничего нет. Просто причина всей головоломки в том,что ленивые создатели вшили только 1 IP в прогу,и если нужно его сменить,то при каждом запуске приходится менять его вручную.Нету ни ini файлика,ничего.А каждый раз тыкаться меняя ай пи неохота.

Регистрация: 07.10.2009
Сообщений: 4

Вообщем VB native code,какой софт нужен что бы отредактировать экзешник и вернуть его в рабочий вид?)

P.S. пока что уполз спать)

Регистрация: 09.01.2008
Сообщений: 26,238

Sintez_ice, тот способ, который Вы собираетесь использовать говорит только о том, что Вы просто «не в теме». так не получится. (правда, вроде бы для VB были какие-то декомпиляторы, но не факт, что они дадут вразумительный, компириемый код).
Поэтому, я бы начал с того, чтобы:
1) проверил EXE на предмет упаковщиков (если они есть — снять их)
2) проверил на защиту EXE от модификации (буквально любое изменение в выводимом тексте позволит это определить)
3) поискать в HEX-редакторе (рекомендую HIEW — Ваш IP. если найдёте — то бинго! Вам повезло, меняете его прямо в HEX и дело сделано.
4) если не нашли — тогда берёте отладчик, производите реверс-инженеринг, анализ кода, точки остатова, отладка и т.д. и т.п.
Ваш IP вообще может хранится в реестре или в каком-то файле, причём, не исключено, что в зашифрованном виде!

p.s. в общем случае может ничего и не получится..
Иногда проще заново написать программу, чем разобраться/взломать чужую.

P.P.S.
пока писал (отвлекаясь) пост, тут уже проблему почти решили.

Регистрация: 25.06.2012
Сообщений: 2

09:17
как разобрать exe фаил?

09:20
помогите плиз я не понял ни чего что здесь написано

_________________
Не используйте форум как чат — не пишите несколько коротких сообщений подряд!
Есть что добавить — нажимайте кнопку «Правка/Редактировать» на своём крайнем сообщении
и изменяйте, добавляйте.

Прошу учесть на будущее.

Последний раз редактировалось Serge_Bliznykov; 27.06.2012 в 10:04 .
Регистрация: 09.01.2008
Сообщений: 26,238
как разобрать exe фаил?

во-первых, универсального ответа не существует. Потому как — разобрать — это что?

во-вторых, файлы бывают защищены протекторами, используют различные библиотеки (DLL), runtime’ы (.NET, например) и т.д. и т.п.

Читайте также:
Как вставить программу в эксель

в-третьих, ну, допустим, взяли Вы дизассемблер IDA, распотрошили EXE файл, получили многомегабайтный текст на ассемблере. ну и что Вы дальше с этим будете делать?!

резюмируя. ответ на ваш вопрос — разбирать EXE файл Вам бесполезно и совсем не нужно.

Регистрация: 29.09.2009
Сообщений: 9,742

Просто причина всей головоломки в том,что ленивые создатели вшили только 1 IP в прогу

или TC, где-то кому-то что-то заказал и не заплатил, а теперь взламывает. А что, в теме есть доказательство обратного? Приведите.

Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer https://www.programmersforum.ru/showthread.php?t=65367″ target=»_blank»]www.programmersforum.ru[/mask_link]

Декомпиляция EXE-файлов

Как декомпилировать EXE-файлы

Декомпиляция подразумевает воссоздание исходного кода программы на том языке, на котором она была написана. Иными словами, это процесс обратный процессу компиляции, когда исходный текст преобразуется в машинные инструкции. Декомпиляцию можно провести, используя специализированный софт.

Способы декомпиляции EXE-файлов

Декомпиляция может быть полезной автору ПО, который потерял исходные коды, или просто пользователям, желающим узнать свойства той или иной программы. Для этого существуют специальные программы-декомпиляторы.

Способ 1: VB Decompiler

Первым рассмотрим VB Decompiler, который позволяет декомпилировть программы, написанные на Visual Basic 5.0 и 6.0.

  1. Нажмите «Файл» и выберите пункт «Открыть программу» (Ctrl+O). Стандартное открытие программы в VB Decompiler
  2. Найдите и откройте программу. Открытие EXE в VB Decompiler
  • Декомпиляция должна сразу запуститься. Если этого не произошло, нажмите кнопку «Старт». Запуск декомпиляции в VB Decompiler
  • По завершении внизу окна появится слово «Декомпилировано». В левой части расположено дерево объектов, а в центральной можно просматривать код. Просмотр исходного кода через VB Decompiler
  • При необходимости, сохраните декомпилированные элементы. Для этого нажмите «Файл» и выберите подходящий вариант, например, «Сохранить декомпилированный проект», чтобы извлечь все объекты в папку на диске. Сохранение декомпилированного проекта в VB Decompiler
  • Способ 2: ReFox

    В плане декомпиляции программ, скомпилированных через Visual FoxPro и FoxBASE+, неплохо себя зарекомендовал ReFox.

    1. Через встроенный обозреватель файлов найдите нужный EXE-файл. Если его выделить, то справа будет отображаться краткая информация о нём. Поиск EXE через ReFox
    2. Откройте контекстное меню и выберите пункт «Decompile». Переход к декомпиляции в ReFox
    3. Откроется окно, где нужно указать папку для сохранения декомпилированных файлов. После нажмите «ОК». Запуск декомпиляции в ReFox
    4. По окончании появится такое сообщение: Завершение декомпиляции в ReFox

    Можно просмотреть результат в указанной папке.

    Способ 3: DeDe

    А DeDe будет полезна для декомпиляции программ на Delphi.

    1. Нажмите кнопку «Добавление файла». Добавление файла в DeDe
    2. Найдите файл EXE и откройте его. Добавление EXE в DeDe
    3. Для запуска декомпиляции нажмите кнопку «Процесс». Запуск декомпиляции в DeDe
    4. При успешном завершении процедуры появится такое сообщение: Завершение декомпиляции в DeDe

    В отдельные вкладки будет выведена информация о классах, объектах, формах и процедурах.

    Сохранение декомпилированных объектов в DeDe

  • Для сохранения всех этих данных откройте вкладку «Project», проставьте галочки рядом с типами объектов, которые нужно сохранить, выберите папку и нажмите «Сделать файлы».
  • Способ 4: EMS Source Rescuer

    Декомпилятор EMS Source Rescuer позволяет работать с EXE-файлами, скомпилированными при помощи Delphi и C++ Builder.

    1. В блоке «Executable File» нужно указать нужную программу.
    2. В «Project name» пропишите имя проекта и нажмите «Next». Выбор исходника и имя проекта в EMS Source Rescuer
    3. Выберите необходимые объекты, укажите язык программирования и нажмите «Next». Выбор объектов и языка программирования в EMS Source Rescuer
    4. В следующем окне исходный код доступен в режиме предпросмотра. Осталось выбрать выходную папку и нажать кнопку «Save». Предпросмотр и сохранение проекта в EMS Source Rescuer
    Рейтинг
    ( Пока оценок нет )
    Загрузка ...
    EFT-Soft.ru