Проще говоря, декомпиляция - это обратное компиляции: перевод исполняемого файла на язык более высокого уровня.
Предположим, вы потеряли исходный код своего проекта Delphi и у вас есть только исполняемый файл: обратный инжиниринг (декомпиляция) полезен, если исходные источники недоступны.
Хм, «источники недоступны», означает ли это, что мы можем декомпилировать проекты Delphi других людей? Ну да и нет ...
Возможна ли истинная декомпиляция?
Нет, конечно нет. Полностью автоматизированная декомпиляция невозможна - никакой декомпилятор не может точно воспроизвести исходный исходный код.
Когда проект Delphi компилируется и связывается для создания автономного исполняемого файла, большинство имен, используемых в программе, преобразуются в адреса. Эта потеря имен означает, что декомпилятору придется создавать уникальные имена для всех констант, переменных, функций и процедур. Даже если достигнут определенный уровень успеха, в сгенерированном «исходном коде» отсутствуют значимые имена переменных и функций.
Очевидно, что синтаксис исходного языка больше не существует в исполняемом файле. Декомпилятору было бы очень трудно интерпретировать последовательность инструкций машинного языка (ASM), которые существуют в исполняемом файле, и решить, какой была исходная инструкция источника.
Почему и когда использовать декомпиляцию
Обратный инжиниринг может быть использован по нескольким причинам, некоторые из которых:
- Восстановление утерянного исходного кода
- Миграция приложений на новую аппаратную платформу
- Определение наличия вирусов или вредоносного кода в программе
- Исправление ошибок, когда владелец приложения недоступен для внесения исправлений.
- Восстановление чужого исходного кода (например, для определения алгоритма).
Это законно?
Обратный инжиниринг - это НЕ трещина, хотя иногда трудно провести тонкую грань между этими двумя. Компьютерные программы защищены законами об авторских правах и товарных знаках. В разных странах существуют разные исключения из прав владельца авторских прав. Наиболее распространенные из них гласят, что декомпиляция вполне допустима: для целей интерпретации, где спецификация интерфейса не была предоставлена, для в целях исправления ошибок, когда владелец авторского права не может внести исправление, чтобы определить части программы, которые не защищены авторское право. Конечно, вы должны быть очень осторожны / связаться с вашим адвокатом, если вы сомневаетесь, разрешено ли вам разбирать исполняемый файл какой-либо программы.
Заметка: если вы ищете кряки Delphi, генераторы ключей или просто серийные номера: вы находитесь не на том сайте. Пожалуйста, имейте в виду, что все, что вы найдете здесь, написано / представлено только для ознакомительных / образовательных целей
На данный момент Borland не предлагает никаких продуктов, способных декомпилировать исполняемый файл (.exe) или «скомпилированный модуль Delphi» (.dcu) обратно в исходный исходный код (.pas).
Delphi Compiled Unit (DCU)
Когда проект Delphi компилируется или запускается, создается файл скомпилированного модуля (.pas). По умолчанию скомпилированная версия каждого модуля хранится в отдельном файле двоичного формата с тем же именем, что и файл модуля, но с расширением .DCU. Например, unit1.dcu содержит код и данные, объявленные в файле unit1.pas.
Это означает, что если у вас есть кто-то, например, скомпилированный исходный код компонента, все, что вам нужно сделать, это обратить его и получить код. Неправильно. Формат файла DCU не документирован (собственный формат) и может изменяться от версии к версии.
После компилятора: обратный инжиниринг Delphi
Если вы хотите попытаться декомпилировать исполняемый файл Delphi, вам следует знать следующее:
Исходные файлы программ Delphi обычно хранятся в двух типах файлов: файлы кода ASCII (.pas, .dpr) и файлы ресурсов (.res, .rc, .dfm, .dcr). Файлы Dfm содержат детали (свойства) объектов, содержащихся в форме. При создании exeDelphi копирует информацию в файлах .dfm в готовый файл кода .exe. Файлы форм описывают каждый компонент в вашей форме, включая значения всех постоянных свойств. Каждый раз, когда мы меняем положение формы, заголовок кнопки или назначаем процедуру события для компонента, Delphi записывает эти изменения в файл DFM (не код процедуры события - это сохраняется в pas / dcu файл). Чтобы получить «dfm» из исполняемого файла, нам нужно понять, какие типы ресурсов хранятся внутри исполняемого файла Win32.
Все программы, скомпилированные Delphi, имеют следующие разделы: CODE, DATA, BSS, .idata, tls, .rdata, .rsrc. Наиболее важными с точки зрения декомпиляции являются разделы CODE и .rsrc. В "Добавление функциональности в программу DelphiВ статье приведены некоторые интересные факты о формате исполняемых файлов Delphi, информации о классе и ресурсах DFM: как переназначить события, которые будут обрабатываться другими обработчиками событий, определенными в той же форме. Еще больше: как добавить свой собственный обработчик событий, добавив код в исполняемый файл, который изменит заголовок кнопки.
Среди многих типов ресурсов, которые хранятся в исполняемом файле, RT_RCDATA или определяемый приложением ресурс (необработанные данные) содержит информацию, которая была в файле DFM до компиляции. Чтобы извлечь данные DFM из exe-файла, мы можем вызвать EnumResourceNames API-функция... Для получения дополнительной информации о извлечении DFM из исполняемого файла перейдите по ссылке: Кодирование проводника Delphi DFM статья.
Искусство реверс-инжиниринга традиционно было страной технических волшебников, знакомых с языком ассемблера и отладчиками. Появилось несколько декомпиляторов Delphi, которые позволяют любому, даже с ограниченными техническими знаниями, перепроектировать большинство исполняемых файлов Delphi.
Если вы заинтересованы в программах обратного инжиниринга Delphi, я предлагаю вам взглянуть на следующие несколько «декомпиляторов»:
Декомпилятор исполняемых файлов (EXE) и динамические библиотеки (DLL), написанный на Delphi и выполненный в среде Windows32. Конечная цель проекта - разработка программы, способной восстановить большую часть исходного Delphi. исходники из скомпилированного файла, но IDR, как и другие декомпиляторы Delphi, пока не могут этого сделать. Тем не менее, IDR находится в состоянии значительно облегчить такой процесс. По сравнению с другими хорошо известными декомпиляторами Delphi результат анализа IDR обладает наибольшей полнотой и надежностью.
Revendepro находит почти все структуры (классы, типы, процедуры и т. Д.) В программе и генерирует представление паскаля, процедуры будут написаны на ассемблере. Из-за некоторых ограничений в ассемблере сгенерированный вывод не может быть перекомпилирован. Исходный код этого декомпилятора находится в свободном доступе. К сожалению, это единственный декомпилятор, который я не смог использовать - он выдает исключение, когда вы пытаетесь декомпилировать исполняемый файл Delphi.
EMS Source Rescuer - это простое в использовании приложение-мастер, которое поможет вам восстановить утерянный исходный код. Если вы потеряете исходные тексты проекта Delphi или C ++ Builder, но у вас есть исполняемый файл, то этот инструмент может спасти часть потерянных источников. Rescuer создает все формы проектов и модули данных со всеми назначенными свойствами и событиями. Произведенные процедуры обработки событий не имеют тела (это не декомпилятор), но имеют адрес кода в исполняемом файле. В большинстве случаев Rescuer экономит 50-90% вашего времени на восстановление проекта.
DeDe - очень быстрая программа, которая может анализировать исполняемые файлы, скомпилированные с Delphi. После декомпиляции DeDe дает вам следующее:
- Все dfm файлы цели. Вы сможете открывать и редактировать их с Delphi.
- Все опубликованные методы в хорошо прокомментированном коде ASM со ссылками на строки, вызовы импортированных функций, вызовы методов классов, компоненты в модуле, блоки Try-Except и Try-finally. По умолчанию DeDe извлекает только опубликованные источники методов, но вы также можете обработать другую процедуру в исполняемом файле, если вы знаете смещение RVA, используя Tools | Разобрать меню Proc.
- Много дополнительной информации.
- Вы можете создать папку проекта Delphi со всеми файлами dfm, pas, dpr. Примечание: файлы pas содержат упомянутый выше хорошо прокомментированный код ASM. Они не могут быть перекомпилированы!