Раздел 2 Реверс-инжиниринг Delphi
В настоящее время компания Borland не предоставляет продуктов для декомпиляции исполняемых файлов (.exe) или «файлов, скомпилированных Delphi» (.dcu) в необработанный программный код (.pas).
Скомпилированный модуль Delphi: DCU ( Скомпилированный модуль Delphi: DCU )
Когда проект Delphi компилируется или запускается, создается файл модуля компиляции (.dcu). По умолчанию скомпилированная версия каждого модуля сохраняется в отдельном двоичном файле. Имя файла такое же, как у файла модуля, а его расширение — .DCU. Например: файл unit1.dcu содержит код и данные, объявленные в файле unit1.pas.
Это означает, что если у вас есть какой-то ресурс, например скомпилированный компонент, все, что вам нужно сделать, — это декомпилировать его и получить исходный код. Неверно, формат файла DCU недокументирован (формат владельца) и может меняться от версии к версии.
После компилятора: обратное проектирование Delphi
Если вы пытаетесь декомпилировать исполняемый файл Delphi, вам следует знать несколько вещей:
Файлы исходных программ Delphi обычно хранятся в двух типах файлов: файлы кода ASCII (.pas, .dPR) и файлы ресурсов (.res, .rc, .dfm, .dcr). Файлы Dfm содержат сведения (свойства) объектов, содержащихся в форме. При создании исполняемого файла Delphi копирует информацию из файла .dfm в готовый файл кода .exe. Файл формы описывает каждый компонент формы, включая все стабильные значения свойств. Всякий раз, когда мы меняем положение формы, заголовок кнопки или назначаем процедуру обработки события компоненту, Delphi записывает эти изменения в файл DFM (а не код процедуры обработки события — он хранится в файле pas/dcu). . Чтобы получить «dfm» из исполняемого файла, нам нужно понять, какой тип ресурсов хранится в исполняемом файле Win32.
Все программы, скомпилированные Delphi, состоят из следующих частей: CODE, DATA, BSS, .idata, tls, .rdata, .rsrc. С точки зрения декомпиляции наиболее важными частями являются: CODE, .rsrc. В статье «Добавление функциональности в программу Delphi» («Добавление функциональности в программу Delphi») (добавление переводчика: по порядку) обсуждаются некоторые интересные вещи о формате исполняемого файла Delphi, информации о классах и ресурсах DFM: Как назначить события к другим обработчикам событий, определенным в той же форме. Как добавить собственный обработчик событий, чтобы добавить в исполняемый файл код для изменения заголовка кнопки.
Среди различных типов ресурсов, хранящихся в файле .exe, RT_RCDATA или определяемые приложением ресурсы (необработанные данные) перед компиляцией содержат информацию, содержащуюся в файле DFM. Чтобы выбрать данные DFM из файла .exe, мы можем вызвать функцию API EnumResourceNames... Дополнительную информацию о выборе данных DFM из файла .exe см. в разделе «Кодирование проводника Delphi DFM» («Написание файла DFM в Delphi»). Детектор Delphi DFM»). (Переводчик добавил: Переводили один за другим)