| 
 Декомпиляция в Delphi(перевод одноимённой статьи с delphi.about.com )
 Читая форумы по программированию, иногда
    натыкаешься на вопрос типа: "У меня есть
    откомпилированная программа на 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
    декомпиляторов: DeDeDeDe довольно шустрая программка, позволяющая
    анализировать экзешники, скомпилированные в Delphi.
    После декомпиляции DeDe даёт Вам следующее:
 - Все dfm файлы. Вы сможете открывать их и
    редактировать в Delphi
 - Все объявленные методы с хорошо
    комментированным кодом на ассемблере с ссылками
    на строки, импортированных функций, методов и
    компонент в юните, блоки Try-Except и Try-Finally.
 - Большое количество дополнительной информации.
 - Вы можете создать папку Delphi проекта со всеми
    файлами dfm, pas, dpr. Не забудьте, что pas файлы
    содержат ассемблерный код.
 RevendeproRevendepro находит почти все структуры (классы, типы,
    процедуры, и т.д.) в программе, и генерирует их
    паскальное представление, процедуры
    естевственно будут представлены на языке
    ассемблера. К сожалению, полученный ассемблерный
    код не может быть заново откомпилирован. Так же
    доступен исходник этого декомпилятора. К
    сожалению, этот декомпилятор не совсем рабочий -
    генерирует ошибку при декомпиляции.
 MRIPПозволяет извлекать из Delphi приложения любые
    ресурсы: курсоры, иконки, dfm файлы, pas файлы и т.д.
    Но главная его особенность - это способность
    извлекать файлы, хранящиеся в других файлах.
    Поддерживается более 100 форматов файлов. MRip
    работает под DOS.
 Exe2DprЭта программа может восстановить частично
    потерянные исходники проекта. Не имеет
    интерфейса и работает с командной строки,
    например: 'exe2dpr [-o] exeFile' ( исходники проекта будут
    созданы в текущей директории).
 
 
 |