Декомпиляция EXE-файлов
Декомпиляция подразумевает воссоздание исходного кода программы на том языке, на котором она была написана. Иными словами, это процесс обратный процессу компиляции, когда исходный текст преобразуется в машинные инструкции. Декомпиляцию можно провести, используя специализированный софт.
Способы декомпиляции EXE-файлов
Декомпиляция может быть полезной автору ПО, который потерял исходные коды, или просто пользователям, желающим узнать свойства той или иной программы. Для этого существуют специальные программы-декомпиляторы.
Способ 1: VB Decompiler
Первым рассмотрим VB Decompiler, который позволяет декомпилировть программы, написанные на Visual Basic 5.0 и 6.0.
- Нажмите «Файл» и выберите пункт «Открыть программу» (Ctrl+O).
- Найдите и откройте программу.
- Декомпиляция должна сразу запуститься. Если этого не произошло, нажмите кнопку «Старт».
- По завершении внизу окна появится слово «Декомпилировано». В левой части расположено дерево объектов, а в центральной можно просматривать код.
- При необходимости, сохраните декомпилированные элементы. Для этого нажмите «Файл» и выберите подходящий вариант, например, «Сохранить декомпилированный проект», чтобы извлечь все объекты в папку на диске.
Способ 2: ReFox
В плане декомпиляции программ, скомпилированных через Visual FoxPro и FoxBASE+, неплохо себя зарекомендовал ReFox.
- Через встроенный обозреватель файлов найдите нужный EXE-файл. Если его выделить, то справа будет отображаться краткая информация о нём.
- Откройте контекстное меню и выберите пункт «Decompile».
- Откроется окно, где нужно указать папку для сохранения декомпилированных файлов. После нажмите «ОК».
- По окончании появится такое сообщение:
Можно просмотреть результат в указанной папке.
Способ 3: DeDe
А DeDe будет полезна для декомпиляции программ на Delphi.
- Нажмите кнопку «Добавление файла».
- Найдите файл EXE и откройте его.
- Для запуска декомпиляции нажмите кнопку «Процесс».
- При успешном завершении процедуры появится такое сообщение:
В отдельные вкладки будет выведена информация о классах, объектах, формах и процедурах.
Способ 4: EMS Source Rescuer
Декомпилятор EMS Source Rescuer позволяет работать с EXE-файлами, скомпилированными при помощи Delphi и C++ Builder.
- В блоке «Executable File» нужно указать нужную программу.
- В «Project name» пропишите имя проекта и нажмите «Next».
- Выберите необходимые объекты, укажите язык программирования и нажмите «Next».
- В следующем окне исходный код доступен в режиме предпросмотра. Осталось выбрать выходную папку и нажать кнопку «Save».
Мы рассмотрели популярные декомпиляторы для файлов EXE, написанных на разных языках программирования. Если Вам известны другие рабочие варианты, напишите об этом в комментариях.
Что значит декомпилировать файл и как декомпилируются файлы exe
Декомпиляция — это процесс восстановления исходного кода программы из машинного кода. Декомпилятор — это программа, которая может совершить процесс декомпиляции. Декомпилятор может быть разным:
- декомпилятор exe;
- декомпилятор с;
- декомпилятор ассемблера;
- и др.
Декомпиляция — это любимый процесс хакеров, хотя в некоторых случаях этот процесс помогает и с хорошими намерениями. Пока звучит как непонятная «каша», но давайте разбираться во всем по порядку.
Компиляция и декомпиляция — это противоположные процессы
Все мы знаем, что программирование может вестись на множестве языков. Всего языков насчитываю т тысячи, наиболее популярных несколько десятков, но их не понимает ни один компьютер. Компьютер понимает только свой собственный машинный язык, который состоит из единиц и нулей. Для того чтобы компьютер понял, что написал программист , необходим а компиляция.
Компиляция — это процесс преобразования программы в двоичный код. Двоичный код — это низкоуровневый машинный код, который понимает «железо». Код , написанный разработчиком , — это код высокого уровня, который понимает разработчик и интерпретаторы с компиляторами. Не будем углубляться глубоко в эту тематику, потому что есть языки компилируемые, есть интерпретируемые, есть «нейтральные», у которых код компилируется не в машинный код, а в собственный байт-код. Сейчас не об этом.
Итак, компиляция — это «перевод» программ, написанных разработчиками , на понятный компьютеру машинный язык. Этот процесс считается необратимым. Поэтому полностью восстановить исходный код программы после ее компиляции не может ни одна программа. Хотя сам такой процесс существует, и называется он декомпиляция.
Декомпиляция — это обратный процесс компиляции, также его называют «обратная разработка» или «реверс-инженерия». Суть ее сводится к простому — восстановить исходный код программы. Причем «хорошего» в этом процессе мало. Очень редко декомпиляцию применяют в добрых целях, например, чтобы восстановить исходники. Декомпи ля ция не восстанавливает исходники, а лишь предоставляет общую и запутанную структуру, в которой бывает очень трудно разобраться. Причем при декомпиляции прослеживается важная зависимость — чем сложнее и больше программа, тем менее точным будет конечный результат. Плю с и ногда разработчики применя ю т метод обфу ск аци и ( запутывания) исходного кода, тогда после декомпиляции такой программы исходный код практически не читаем.
Так для чего тогда нужна декомпиляция? Получить двоичный код программы может любой, а получить ее исходники — это уже проблема. Но бывают случаи, когда без исходников невозможно осуществить какое-либо действие с программой, например:
- полностью скопировать программу или какой-то отдельный ее функционал;
- взломать программ у б ез понимания ее структуры и архитектуры;
- внедрить вирус в программ у б ез понимания того, как построена программа;
- чтобы «обойти» лицензию или вообще отключить проверку лицензии;
- и др.
В основном декомпиляция нужна для «серых» целей, поэтому реверс-инженерия в некоторых странах наказуема законом. А декомпиляция — это важная часть реверс-инженерии, хотя очень часто эти два понятия считают идентичными.
Для того чтобы декомпиляция была более-менее успешной , важно знать , на каком языке написана программа или какой файл нужно декомпилировать ; от этого будет зависеть , какой инструмент нужно применять, например , декомпилятор «ехе» и декомпилятор «С» — это будут две разные программы. Есть , конечно , «общие» декомпиляторы, которые работают сразу со множеством языков, но результаты еще менее точны, чем у специальных декомпиляторов.
Сегодня мы рассмотрим , какой можно использовать декомпилятор, чтобы декомпилировать файл «ехе».
Декомпилятор ехе
Как мы знаем, ехе-файлы применяются в операционной системе Windows. В самой Виндовс по умолчанию не установлен «декомпилятор ехе», поэтому придется использовать программы «со стороны», которые могут помочь в решении этой задачи. Не будем задаваться вопросом, для чего вам это нужно. Нужно — значит , нужно.
Декомпиляторы ехе-файлов:
- VB Decompiler. Это самый популярны й декомпилятор ехе. Он ориентирован на декомпиляцию ехе-файлов, которые были разработаны при помощи языка программирования Visual Basic. Полностью бесплатный декомпилятор ехе.
- EMS Source Rescuer. Это тоже бесплатная программа, но она ориентирована на ехе-файлы, которые были созданы при помощи языков программирования Delphi или С++.
- ReFox. На нем отлично проходит декомпиляция ехе, если декомпилируемый файл был создан при помощи Visual FoxPro или FoxBase. Условно-бесплатная программ а с небольшим бесплатным периодом, далее придется платить.
- DeDe. Отличный декомпилятор ехе, но работает только с языком программирования Delphi.
- DnSpy. Это очень мощный инструмен т д ля «потрошения» программ и файлов exe. Декомпилирует программы на С# и Visual Basic. Помимо декомпилятора , несет в себе еще множество других инструментов: отладчик, НЕХ-редактор, редактор сборки и др.
- IDA Pro. Это профессиональный комплекс инструментов для полноценной реверс-инженерии. Среди прочих инструментов легко найти декомпилятор ехе. Однако у этой программы есть один минус — она очень дорогая с неадекватно завышенными ценами. Поэтому выхода два: на официальном сайте попробовать бесплатную демо-версию и решить свою проблему или тщательно поискать слитую в свободный доступ нужную версию программы — такие тоже имеются. Есть и третий выход — купить лицензию, но тогда будьте готовы заплатить за нее от 900 и до 4000$.
Заключение
Чтобы правильно подобрать декомпилятор для ехе-файлов, нужно знать , на каком языке написан желанный файл. Только в этом случае можно получить более-менее адекватный исходный код программы. Если вы не знаете, на каком языке написан ехе, тогда нужно будет пропустить ваш файл через несколько декомпиляторов , и тогда один из них выдаст вам искомый результат.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Декомпиляция в Delphi
Читая форумы по программированию, иногда натыкаешься на вопрос типа: «У меня есть откомпилированная программа на Delphi. Как мне получить её исходный код?». Обычно такой вопрос возникает, когда программист потерял файлы проекта и у него остался только .exe. Как правило полностью восстановить исходный код на языке высокого уровня невозможно. Значит ли это, что другие тоже не смогут восстановить исходный код Вашей программы ? Хм . и да и нет .
Для начала сразу скажу, что восстановить исходный код в точности каким он был однозначно невозможно, так как не существует в мире такого декомпилятора, который бы смог сотворить такое.
После компиляции и линковки проекта и получения исполняемого файла все имена, используемые в программе конвертируются в адреса. Потеря имён означает, что декомпилятор создаст уникальное имя для каждой константы, переменной, функции и процедуры. Даже если мы и достигнем какого-то успеха в декомпиляции исполняемого файла, то получим уже другой синтаксис программы. Данная проблема связана с тем, что при компиляции практически идентичные куски кода могут быть скомпилированы в разные последовательности машинных команд (ASM), которые присутствуют в .exe файле. Естественно декомпилятор не обладает такой степенью интеллектуальности, чтобы решить — какова же была последовательность инструкций языка высокого уровня в исходном проекте.
Когда же применяется декомпиляция ? Для этого существует довольно много причин. Вот некоторые из них:
- Восстановление исходного кода;
- Перенос приложения на другую платформу;
- Определение наличия вирусов в коде программы или вредоносного кода;
- Исправление ошибок в программе, в случае, если создатель приложения не собирается этого делать 🙂
Легально ли всё это ? Хотя декомпиляция и не является взломом, но утвердительно ответить на этот вопрос довольно сложно. Обычно программы защищены законом об авторских правах, однако в большинстве стран на декомпиляцию делается исключение. В часности, когда необходимо изменить интерфейс программы для конкретной страны, а сервис приложения не позволяет этого сделать.
На данный момент Borland не предоставляет никаких программных продуктов, способных декомпилировать исполняемые файлы (.exe) либо откомпилированные Delphi-модули (.dcu) в исходный код (.pas).
Если же Вы всё-таки решились попробовать декомпилировать исполняемый файл, то необходимо знать следующие вещи. Исходные коды на Delphi обычно хранятся в файлах двух типов: сам исходник в ASCII кодировке (.pas, .dpr) и файлы ресурсов (.res, .rc, .dfm, .dcr). Dfm файлы хранят в себе свойства объектов, содержащихся в форме. При создании конечного .exe, Delphi копирует в него информацию из .dfm файлов. Каждый раз, когда мы изменяем координаты формы, описания кнопок или связанные с ними события, то Delphi записывает эти изменения в .dfm (за исключением кода процедур. Он сохраняется в файлах pas/dcu ). И наконец, чтобы получить при декомпиляции файл .dfm, нужно знать — какие типы ресурсов хранятся внутри Win32 исполняемого модуля.
Все программы, скомпилированные в Delphi имеют следующие секции: CODE, DATA, BSS, .idata, tls, .rdata, .rsrc. Самые важные для декомпиляции секции CODE и .rsrc. В статье «Adding functionality to a Delphi program» приведены некоторые интересные факты о исполняемых форматах Delphi, а так же информация о классах и DFM ресурсах. В этой статье есть один интересный момент под заголовком: «Как добавить свой обработчик события в уже откомпилированный файл, например, чтобы изменять текст на кнопке».
Среди многих типов ресурсов, которые сохранены в .exe файле, интерес представляет RT_RCDATA, который хранит информацию, которая были в DFM файле перед трансляцией. Чтобы извлеч DFM данные из .exe файла, мы можем вызываться API функцией EnumResourceNames.
Искусство декомпилирования традиционно было уделом мастеров, знакомых с ассемблером и отладчиками. Некоторые Delphi декомпиляторы создают впечатление, что любой, даже с ограниченными техническими знаниями, может изменить по своему желанию большинство исполняемых файлов Delphi.
И в заключение, если Вы заинтересовались декомпилованием, то предлагаю Вам несколько Delphi декомпиляторов:
DeDe [ править | править код ]
DeDe довольно шустрая программка, позволяющая анализировать экзешники, скомпилированные в Delphi. После декомпиляции DeDe даёт Вам следующее:
- Все dfm файлы. Вы сможете открывать их и редактировать в Delphi
- Все объявленные методы с хорошо комментированным кодом на ассемблере с ссылками на строки, импортированных функций, методов и компонент в юните, блоки Try-Except и Try-Finally.
- Большое количество дополнительной информации.
- Вы можете создать папку Delphi проекта со всеми файлами dfm, pas, dpr. Не забудьте, что pas файлы содержат ассемблерный код.
Revendepro [ править | править код ]
Revendepro находит почти все структуры (классы, типы, процедуры, и т.д.) в программе, и генерирует их паскальное представление, процедуры естественно будут представлены на языке ассемблера. К сожалению, полученный ассемблерный код не может быть заново откомпилирован. Так же доступен исходник этого декомпилятора. К сожалению, этот декомпилятор не совсем рабочий — генерирует ошибку при декомпиляции.
MRIP [ править | править код ]
Позволяет извлекать из Delphi приложения любые ресурсы: курсоры, иконки, dfm файлы, pas файлы и т.д. Но главная его особенность — это способность извлекать файлы, хранящиеся в других файлах. Поддерживается более 100 форматов файлов. MRip работает под DOS.
Exe2Dpr [ править | править код ]
Эта программа может восстановить частично потерянные исходники проекта. Не имеет интерфейса и работает с командной строки, например: ‘exe2dpr [-o] exeFile’ ( исходники проекта будут созданы в текущей директории).
- Разработка приложений
- Защита и взлом
Декомпиляция EXE-файлов
Процесс декомпиляции отвечает за воссоздание исходного кода программы на языке или языках, на которых та была написана. В случае с большими программами, они имеют несколько файлов, в каждом из которых может использоваться несколько языков программирования. Чтобы они корректно взаимодействовали друг с другом и не вводили пользователя в тупик, их помещают в EXE-файл. Как раз этот процесс и называется компиляцией. Мы же рассмотрим, как разобрать EXE-файл на отдельные составляющие.
Как декомпилировать EXE-файл
К сожалению, Windows не предусматривает в своем инструментарии встроенных инструментов, позволяющих выполнить декомпиляцию, поэтому придется пользоваться только сторонним ПО. Такое ПО может быть полезно как пользователям, которые просто желают получше изучить исходный код той или иной программы, так и разработчикам.
Вариант 1: VB Decompiler
Корректно способен провести декомпиляцию EXE-файлов, написанных и скомпилированных через Visual Basic 5.0 и 6.0. Это самая популярная среда разработки программ для Windows. Сама программа полностью бесплатна и занимает на диске всего несколько мегабайт.
- В верхней части интерфейса кликните по пункту «Файл» и выберите из контекстного меню вариант «Открыть программу». Вместо этого можно воспользоваться сочетанием клавиш Ctrl+O.
- В «Проводнике» отыщите исполняемый файл той программы, декомпиляцию которой вы собираетесь провести. Выделите его и нажмите на кнопку «Открыть», чтобы выполнить загрузку файла в рабочую среду.
- Путь до нужного EXE-файла отобразится в строке «Файл». Нажмите на кнопку «Старт», чтобы запустить процедуру декомпиляции.
- Программа не оповещает о завершении процедуры декомпиляции. О завершении таковой будет свидетельствовать только надпись «Декомпилировано» в нижней левой части окна.
- Для сохранения декомпилированного файла нажмите по кнопке «Файл» в верхнем меню и выберите из выпадающего списка вариант «Сохранить декомпилированный проект». Можете просто воспользоваться сочетанием клавиш Ctrl+S.
Вариант 2: EMS Source Rescuer
Данный декомпилятор корректно работает с файлами, скомпилированными с помощью Delphi и C++ Builder. Работа с другими компиляторами возможна, но официально не поддерживается, поэтому есть риски. Программа распространяется полностью бесплатно.
- Запустите EMS Source Rescuer. Его интерфейс представлен в качестве блоков с шагами. На первом шаге вам требуется указать путь до проекта, который будет декомпилирован. Это можно сделать, нажав на кнопку папки в строке «Executable File».
- Выберите нужный EXE-файл в окошке «Проводника».
- В поле «Project name» пропишите имя декомпилируемого проекта и нажмите «Next».
- На следующем шаге потребуется выбрать язык программирования, используемый в выбранном проекте. Это делается в блоке «Output style». Поставив маркер на нужном месте нажмите «Next».
- Вы перейдете сразу на 3-й шаг. Здесь будет показан исходный код проекта. Ниже выберите папку, в которую будут сохранены исходные файлы, извлеченные из EXE-файла, и нажмите «Save».
Вариант 3: ReFox
ReFox отлично зарекомендовал себя в декомпиляции проектов, созданных через Visual FoxPro и FoxBASE+. Сама программа носит условно-бесплатный характер использования. Есть демонстрационная версия, использование которой бесплатно, но только определенный период времени.
Инструкция по использованию данной программы выглядит так:
- В левую часть интерфейса программы уже встроен обозреватель файлов. Воспользуйтесь им, чтобы найти и открыть нужный EXE-файл. В правой части отображается техническая информация о выбранном элементе.
- Кликните правой кнопкой мыши по выбранному файлу. В контекстном меню выберите пункт «Decompile».
- Появится окошко, в котором будет указана директория декомпилируемого файла. Если там все верно, то нажмите «Ок» для продолжения операции.
- По завершении процесса вы получите соответствующее сообщение. Нажмите там «Ок». Результат можно посмотреть в той папке, которую вы указали во 2 шаге.
Вариант 4: DeDe
Эта программа для декомпиляции не так функциональна и поддерживает только одни язык – Delphi.
- Около самого верхнего поля нажмите на кнопку в виде раскрытой папки. Она отвечает за добавление папки.
- Выберите в «Проводнике» нужный EXE-файл и нажмите «Открыть».
- Чтобы запустить процесс декомпиляции, нажмите на кнопку «Процесс», которая расположена около строки указания проекта.
- При успешном завершении вы получите соответствующее сообщение. Нажмите «Ок» или закройте его.
- Теперь вам осталось сохранить результаты декомпилирования на компьютере. Переключитесь на вкладку «Project».
- Рекомендуется отметить галочками все пункты в блоке «Сохранить Делфи Проект». В строке «Папка проекта» укажите директорию, куда будет выполнено сохранение. Нажмите на кнопку «Сделать файлы», чтобы завершить сохранение.
Представленные декомпиляторы способы выполнить обратное преобразование большинства EXE-файлов, написанных на разных языках программирования. Как видите, в самом процессе, вне зависимости от выбранной программы, нет ничего сложного.