1

Topic: Декомпиляция, распаковка .exe архива в Delphi

Декомпиляция в Delphi

Читая форумы по программированию, иногда натыкаешься на вопрос типа: "У меня есть откомпилированная программа на Delphi. Как мне получить её исходный код?". Обычно такой вопрос возникает, когда программист потерял файлы проекта и у него остался только .exe. Как правило полностью восстановить исходный код на языке высокого уровня невозможно. Значит ли это, что другие тоже не смогут восстановить исходный код Вашей программы ? Хм ... и да и нет ...

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

После компиляции и линковки проекта и получения исполняемого файла все имена, используемые в программе конвертируются в адреса. Потеря имён означет, что декомпилятор создаст уникальное имя для каждой константы, переменной, функции и процедуры. Даже если мы и достигнем какого-то успеха в декомпиляции исполняемого файла, то получим уже другой синтаксис программы. Данная проблема связана с тем, что при компиляции практически идентичные куски кода могут быть скомпилированы в разные последовательности машинных команд (ASM), которые присутствуют в .exe файле.
  Естевственно декомпилятор не обладает такой степенью интеллектуальности, чтобы решить - какова же была последовательность инструкций языка высокого уровня в исходном проекте.

Если вам долго не отвечают, пишите автору темы в личку или на Email.

2

Re: Декомпиляция, распаковка .exe архива в Delphi

Когда же применяется декомпиляция ? Для этого существует довольно много причин. Вот некторые из них:
- Восстановление исходного кода;
- Перенос приложения на другую платформу;
- Определение наличия вирусов в коде программы или вредоносного кода;
- Исправление ошибок в программе, в случае, если создатель приложения не собирается этого делать

Легально ли всё это ? Хотя декомпиляция и не является взломом, но утвердительно ответить на этот вопрос довольно сложно. Обычно программы защищены законом об авторских правах, однако в большинстве стран на декомпиляцию делается исключение. В часности, когда необходимо изменить интерфейс программы для конкретной страны, а сервис приложения не позволяет этого сделать.

На данный момент Borland не предоставляет никаких программных продуктов, способных декомпилировать исполняемые файлы (.exe) либо откомпилированные Delphi-модули (.dcu) в исходный код (.pas).

Если же Вы всё-таки решились попробовать декомпилировать исполняемый файл, то необходимо знать следующие вещи. Исходные коды на Delphi обычно хранятся в файлах двух типов: сам исходник в ASCII кодировке (.pas, .dpr) и файлы ресурсов (.res, .rc, .dfm, .dcr). Dfm файлы хранят в себе свойства объектов, содержащихся в форме. При создании конечного .exe, Delphi копирует в него информацию из .dfm файлов. Каждый раз, когда мы изменяем координаты формы, описания кнопок или связанные с ними события, то Delphi записывает эти изменения в .dfm (за исключением кода процедур. Он сохраняется в файлах pas/dcu ). И наконец, чтобы получить при декомпиляции файл .dfm, нужно знать - какие типы ресурсов хранятся внутри Win32 исполняемого модуля.

Если вам долго не отвечают, пишите автору темы в личку или на Email.

3

Re: Декомпиляция, распаковка .exe архива в Delphi

Все программы, скомпилированные в 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.

Если вам долго не отвечают, пишите автору темы в личку или на Email.

4

Re: Декомпиляция, распаковка .exe архива в 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' ( исходники проекта будут созданы в текущей директории).

Если вам долго не отвечают, пишите автору темы в личку или на Email.

5

Re: Декомпиляция, распаковка .exe архива в Delphi

Нашел уникальное решение проблемы распаковки файлов exe, но платное. Хотя есть тестовый период.

Тюнер ресурсов позволяет просматривать, извлекать, заменять, изменять и удалять внедренные ресурсы исполняемых файлов: иконы, строки, изображения, звуки, диалоги, меню - все, что составляют визуальную часть ваших программ Windows.

Скриншоты редактор ресурсовНа самом деле, это позволяет добавить свой собственный брендинг в приложение, изменить диалоговые сообщения, настраивать панели инструментов действия, и так далее, не имея доступ к актуальной исходного кода. Resource Tuner предлагает захватывающие возможности, даже если вы не программист. Это идеально подходит для переводчиков, твикерами, и всех, кто хочет другой внешний вид для приложения.

Тюнер ресурсов о единственном инструменте вы, вероятно, доверять изменять ресурсы в PE исполняемого файла. Откройте для себя уникальные свойства этого редактора ресурсов , в том числе, как открыть проблемные исполняемые файлы и редактировать скрытые данные, которые другие редакторы просто не может видеть, широкий спектр поддерживаемых типов ресурсов, для распаковки UPX, и многое другое. Вы узнаете, стандартную программу промышленности для перевода и настройки пользовательского интерфейса.

Тюнер ресурсов с огромным количеством функций, которые делают его важным инструментом для тех, кто настройки еще программы. Удачи персонализации любое приложение на свой неповторимый вкус. С помощью мощных Resource Tuner, вам больше не нужно страдать с уродливыми икон и картин по умолчанию. Использование очень просто, просто запустите программу и выберите EXE или DLL файл, чтобы прочитать данные из.

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

Если вам долго не отвечают, пишите автору темы в личку или на Email.