Декомпиляция Delphi (1/3)

Проще говоря, декомпиляция – это противоположность компиляции: перевод исполняемого файла на язык более высокого уровня.

Предположим, вы потеряете исходный код проекта Delphi, и у вас останется только исполняемый файл: обратное проектирование (декомпиляция) полезно, если исходные источники недоступны.

Хм, “источники недоступен », означает ли это, что мы можем декомпилировать чужие проекты Delphi? Ну и да, и нет …

Возможна ли истинная декомпиляция?

Нет, конечно, нет. Полностью автоматическая декомпиляция невозможна – ни один декомпилятор не может точно воспроизвести исходный исходный код.

Когда проект Delphi компилируется и связывается для создания автономного исполняемого файла, большинство имен, используемых в программе, преобразованы в адреса. Эта потеря имен означает, что декомпилятору придется создавать уникальные имена для всех констант, переменных, функций и процедур. Даже если достигается определенная степень успеха, в сгенерированном «исходном коде» отсутствуют значимые имена переменных и функций.
Очевидно, синтаксис исходного языка больше не существует в исполняемом файле. Декомпилятору было бы очень сложно интерпретировать серию инструкций машинного языка (ASM), которые существуют в исполняемом файле, и решить, что это за исходная исходная инструкция.

Почему и когда использовать декомпиляцию

Обратное проектирование можно использовать по нескольким причинам, некоторые из которых:

  • Восстановление утерянного исходного кода
  • Перенос приложений на новую аппаратную платформу
  • Определение наличия вирусов или вредоносного кода в программе
  • Исправление ошибок, когда владелец приложения недоступен для исправления.
  • Восстановление чужого исходного кода (для определения алгоритма, например ).

Это законно?

Обратный инжиниринг НЕ является взломом, хотя иногда бывает трудно провести тонкую грань между этими двумя. Компьютерные программы защищены законами об авторских правах и товарных знаках. В разных странах есть разные исключения из прав правообладателя. Наиболее распространенные из них заявляют, что декомпилировать можно: в целях интерпретируемости, когда спецификация интерфейса не была предоставлена, в целях исправления ошибок, когда владелец авторских прав не может внести исправление, чтобы определить части программы, не защищенные авторскими правами. Конечно, вы должны быть очень осторожны/обратиться к своему юристу, если вы сомневаетесь, разрешено ли вам дизассемблировать exe-файл какой-либо программы.

Примечание : если вы ищете взломы Delphi, генераторы ключей или просто серийные номера: вы попали не на тот сайт. Помните, что все, что вы здесь найдете, написано/представлено только для ознакомительных/образовательных целей.

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

Delphi Compiled Модуль (DCU)

Когда проект Delphi компилируется или запускается, создается файл скомпилированного модуля (.pas). По умолчанию скомпилированная версия каждого модуля сохраняется в отдельном файле двоичного формата с тем же именем, что и файл модуля, но с расширением .DCU. Например, unit1.dcu содержит код и данные, объявленные в файле unit1.pas.

Это означает, что если у вас есть кто-то, например, скомпилированный исходный код компонента все, что вам нужно сделать, это перевернуть его и получить код. Неправильный. Формат файла DCU недокументирован (проприетарный формат) и может изменяться от версии к версии.

После компилятора: обратное проектирование Delphi

Если вы хотите попробовать декомпилировать исполняемый файл Delphi, вам следует знать следующее:

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

Все программы, скомпилированные Delphi иметь следующие разделы: CODE, DATA, BSS, .idata, tls, .rdata, .rsrc. Наиболее важными с точки зрения декомпиляции являются разделы CODE и .rsrc. В статье «Добавление функциональности в программу Delphi» показаны некоторые интересные факты о формате исполняемых файлов Delphi, информации о классе и ресурсах DFM: как переназначить события для обработки другими обработчиками событий, определенными в той же форме. Более того: как добавить собственный обработчик событий, добавив код в исполняемый файл, который изменит заголовок кнопки.

Среди множества типов ресурсов которые хранятся в exe-файле, RT_RCDATA или ресурс, определенный приложением (необработанные данные), содержат информацию, которая была в файле DFM до компиляции. Чтобы извлечь данные DFM из exe-файла, мы можем вызвать функцию API EnumResourceNames … Подробнее об извлечении DFM из исполняемого файла см. В статье «Кодирование в Delphi DFM explorer».

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

Если вас интересует обратный инжиниринг программ Delphi Предлагаю вам взглянуть на следующие несколько “декомпиляторов”:

IDR (интерактивный реконструктор Delphi)

Декомпилятор исполняемых файлов (EXE) и динамических библиотек (DLL), написанных на Delphi и выполняемых в среде Windows32. Конечной целью проекта является разработка программы, способной восстановить большую часть исходных кодов Delphi из скомпилированного файла, но IDR, как и другие декомпиляторы Delphi, пока не может этого сделать. Тем не менее, статус IDR может значительно облегчить такой процесс. По сравнению с другими хорошо известными декомпиляторами Delphi результат анализа IDR имеет наибольшую полноту и надежность.

Revendepro

Revendepro находит почти все структуры (классы, типы, процедуры и т. д.) в программе, и генерирует представление паскаль, процедуры будут написаны на ассемблере. Из-за некоторых ограничений ассемблера сгенерированный вывод не может быть перекомпилирован. Исходный код этого декомпилятора находится в свободном доступе. К сожалению, это единственный декомпилятор, который мне не удалось использовать – он выдает запрос с исключением при попытке декомпилировать какой-либо исполняемый файл Delphi.

EMS Source Rescuer

EMS Source Rescuer – это простое в использовании приложение-мастер, которое может помочь вам восстановить утерянный исходный код. Если вы потеряете исходники проекта Delphi или C ++ Builder, но у вас есть исполняемый файл, этот инструмент может восстановить часть утерянных источников. Rescuer производит все формы проекта и модули данных со всеми назначенными свойствами и событиями. Созданные процедуры событий не имеют тела (это не декомпилятор), но имеют адрес кода в исполняемом файле. В большинстве случаев Rescuer экономит 50-90% вашего времени на восстановление проекта.

DeDe

DeDe – очень быстрая программа который может анализировать исполняемые файлы, скомпилированные с помощью Delphi. После декомпиляции DeDe выдаст вам следующее:

  • Все файлы dfm целевого объекта. Вы сможете открывать и редактировать их с помощью Delphi.
  • Все опубликованные методы в хорошо прокомментированном коде ASM со ссылками на строки, вызовы импортированных функций, вызовы методов классов, компоненты в модуле, Try-Except и Try-finally блоки. По умолчанию DeDe извлекает только опубликованные источники методов, но вы также можете обработать другую процедуру в исполняемом файле, если знаете смещение RVA с помощью меню Tools | Disassemble Proc.
  • Много дополнительной информации.
  • Вы можете создать папку проекта Delphi со всеми файлами dfm, pas, dpr. Примечание: файлы pas содержат упомянутый выше хорошо прокомментированный код ASM.. Их нельзя перекомпилировать!
Оцените статью
recture.ru
Добавить комментарий