Декомпиляция Delphi (1/3)
Зарко Гайич имеет опыт работы с SQL и практические знания систем баз данных, таких как MS SQL Server, Firebird, Interbase и Oracle. Он также владеет XML, DHTML и JavaScript.
Проще говоря, декомпиляция — это процесс, обратный компиляции: перевод исполняемого файла на язык более высокого уровня.
Предположим, вы потеряли исходный код вашего проекта Delphi и у вас есть только исполняемый файл: обратное проектирование (декомпиляция) полезно, если исходные исходные коды недоступны.
Хм, "исходники недоступны", значит ли это, что мы можем декомпилировать чужие проекты Delphi? Ну да и нет.
Возможна ли настоящая декомпиляция?
Нет, конечно нет. Полностью автоматическая декомпиляция невозможна — ни один декомпилятор не может точно воспроизвести исходный код.
Когда проект Delphi компилируется и компонуется для создания автономного исполняемого файла, большинство имен, используемых в программе, преобразуются в адреса. Эта потеря имен означает, что декомпилятору придется создавать уникальные имена для всех констант, переменных, функций и процедур. Даже если достигается определенная степень успеха, в сгенерированном «исходном коде» отсутствуют осмысленные имена переменных и функций.
Очевидно, что в исполняемом файле больше нет синтаксиса исходного языка. Декомпилятору было бы очень сложно интерпретировать ряд инструкций машинного языка (ASM), которые существуют в исполняемом файле, и решить, какой была исходная исходная инструкция.
Зачем и когда использовать декомпиляцию
Обратный инжиниринг может использоваться по нескольким причинам, некоторые из которых:
- Восстановление утерянного исходного кода
- Миграция приложений на новую аппаратную платформу
- Определение наличия вирусов или вредоносного кода в программе
- Исправление ошибок, когда владелец приложения недоступен для исправления.
- Восстановление чужого исходного кода (для определения алгоритма например).
Это законно?
Обратный инжиниринг НЕ является взломом, хотя иногда трудно провести тонкую грань между этими двумя понятиями. Компьютерные программы защищены законами об авторском праве и товарных знаках. В разных странах действуют разные исключения из прав владельца авторских прав. Наиболее распространенные утверждают, что можно декомпилировать: для целей интерпретации, когда спецификация интерфейса не была доступна, для целей исправления ошибок, когда владелец авторских прав не может внести исправления, для определения частей программы, не защищенные авторским правом. Конечно, вы должны быть очень осторожны / связаться с вашим адвокатом, если вы сомневаетесь, разрешено ли вам дизассемблировать исполняемый файл какой-либо программы.
Примечание: если вы ищете кряки Delphi, генераторы ключей или просто серийные номера: вы ошиблись сайтом.Пожалуйста, имейте в виду, что все, что вы здесь найдете, написано/представлено только в ознакомительных/образовательных целях.
На данный момент Borland не предлагает никакого продукта, способного декомпилировать исполняемый файл (.exe) или «скомпилированный модуль Delphi» (.dcu) обратно в исходный исходный код (.pas).
Компилируемый модуль Delphi (DCU)
Когда проект Delphi компилируется или запускается, создается файл скомпилированного модуля (.pas). По умолчанию скомпилированная версия каждого модуля хранится в отдельном файле двоичного формата с тем же именем, что и у файла модуля, но с расширением .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, информации о классе и ресурсах DFM: как переназначить события для обработки другими обработчиками событий, определенными в той же форме. Более того: как добавить свой собственный обработчик событий, добавив в исполняемый файл код, который изменит заголовок кнопки.
Среди многих типов ресурсов, которые хранятся в exe-файле, RT_RCDATA или ресурс, определяемый приложением (необработанные данные), содержит информацию, которая была в файле DFM до компиляции. Чтобы извлечь данные DFM из исполняемого файла, мы можем вызвать EnumResourceNames Функция API. Дополнительные сведения об извлечении DFM из исполняемого файла см. в статье «Кодирование статьи обозревателя Delphi DFM».
Искусство обратного проектирования традиционно было уделом технических волшебников, знакомых с языком ассемблера и отладчиками. Появилось несколько декомпиляторов Delphi, которые позволяют любому, даже с ограниченными техническими знаниями, реконструировать большинство исполняемых файлов Delphi.
Если вы заинтересованы в обратном проектировании программ Delphi, я предлагаю вам взглянуть на следующие несколько «декомпиляторов»:
IDR (интерактивный реконструктор Delphi)
Декомпилятор исполняемых файлов (EXE) и динамических библиотек (DLL), написанный на Delphi и исполняемый в среде Windows32. Конечной целью проекта является разработка программы, способной восстановить большую часть исходных кодов Delphi из скомпилированного файла, но IDR, как и другие декомпиляторы Delphi, пока не может этого сделать. Тем не менее, IDR в состоянии значительно облегчить такой процесс. По сравнению с другими известными декомпиляторами Delphi результат анализа IDR имеет наибольшую полноту и достоверность.
Revendepro
Revendepro находит почти все структуры (классы, типы, процедуры и т.д.) в программе и генерирует представление на паскале, процедуры будут написаны на ассемблере. Из-за некоторых ограничений в ассемблере сгенерированный вывод не может быть перекомпилирован. Исходный код этого декомпилятора находится в свободном доступе. К сожалению, это единственный декомпилятор, который мне не удалось использовать — он выдает исключение при попытке декомпилировать какой-либо исполняемый файл Delphi.
Источник EMS Спасатель
EMS Source Rescuer — это простое в использовании приложение-мастер, которое может помочь вам восстановить потерянный исходный код. Если вы потеряли исходники проекта Delphi или C++Builder, но сохранили исполняемый файл, то этот инструмент может восстановить часть утерянных исходников. Rescuer создает все формы проекта и модули данных со всеми назначенными свойствами и событиями. Производимые событийные процедуры не имеют тела (это не декомпилятор), но имеют адрес кода в исполняемом файле. В большинстве случаев Rescuer экономит 50-90% вашего времени на восстановление проекта.
DeDe — очень быстрая программа, которая может анализировать исполняемые файлы, скомпилированные в Delphi. После декомпиляции DeDe дает вам следующее: