Перейти к содержимому

Как декомпилировать exe файл delphi

  • автор:

Декомпиляция в Delphi

Читая форумы по программированию, иногда натыкаешься на вопрос типа: «У меня есть откомпилированная программа на 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 декомпиляторов:

DeDe [ править | править код ]

DeDe довольно шустрая программка, позволяющая анализировать экзешники, скомпилированные в Delphi. После декомпиляции DeDe даёт Вам следующее:

  • Все dfm файлы. Вы сможете открывать их и редактировать в Delphi
  • Все объявленные методы с хорошо комментированным кодом на ассемблере с ссылками на строки, импортированных функций, методов и компонент в юните, блоки Try-Except и Try-Finally.
  • Большое количество дополнительной информации.
  • Вы можете создать папку Delphi проекта со всеми файлами dfm, pas, dpr. Не забудьте, что pas файлы содержат ассемблерный код.

Revendepro [ править | править код ]

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

MRIP [ править | править код ]

Позволяет извлекать из Delphi приложения любые ресурсы: курсоры, иконки, dfm файлы, pas файлы и т.д. Но главная его особенность — это способность извлекать файлы, хранящиеся в других файлах. Поддерживается более 100 форматов файлов. MRip работает под DOS.

Exe2Dpr [ править | править код ]

Эта программа может восстановить частично потерянные исходники проекта. Не имеет интерфейса и работает с командной строки, например: ‘exe2dpr [-o] exeFile’ ( исходники проекта будут созданы в текущей директории).

  • Разработка приложений
  • Защита и взлом

DELPHI 7 ДЕКОМПИЛЯЦИЯ

Декомпиляция Delphi 7 может быть несколько сложной процедурой, если вы не знаете, как это делать. Однако, есть инструменты, которые могут помочь вам при этом вопросе. Например, IDA (Interactive Disassembler) может использоваться для декомпиляции Delphi 7. Вы также можете попробовать использовать тулзы, такие как DeDe (Delphi Decompiler), Delphi Detours Library или DecSofts Delphi Decompiler.Пример кода на Delphi 7: procedure TForm1.Button1Click(Sender: TObject);
var
I: Integer;
begin
for I := 1 to 10 do
ShowMessage(‘Hello, World!’);
end; Данный код демонстрирует простой цикл for, который вызывает функцию ShowMessage для вывода сообщения «Hello, World!» десять раз.

Взлом трейнера на Delphi (не шутка!)

Как установить программу Delphi на планшет

Знакомство с дизассемблером (ОЧЕНЬ СЛОЖНО)

13. Ломаем exe файл в поисках пароля.

КАК ДЕКОМПИЛИРОВАТЬ EXE DLL C# — КАК УЗНАТЬ ИСХОДНЫЙ КОД ПРОГРАММЫ — ДЕКОМПИЛЯЦИЯ — C# ПЛЮШКИ

урок на Делфи — 39. Открыть чужую программу

Урок 3. Исходный код программы на Delphi 11

Delphi XE7 Извлекаем ресурс и патчим файл

Как декомпилировать exe файл delphi


ilnarab ( 2004-06-02 20:24 ) [0]

Здрасте!
Подскажите пожалуйста: с помощью какой программы мне декапилировать ехе файл в .dpr и т. д.


Fredericco © ( 2004-06-02 20:31 ) [1]

DeDe
Но исходников, которые бы потом компилировались, ты не получишь.


Fredericco © ( 2004-06-02 20:36 ) [2]

Удалено модератором
Примечание: Маклауду прювет 🙂 Федырыч, оффтоп не начинай. 😉


Jeer © ( 2004-06-02 20:38 ) [3]

Удалено модератором
Примечание: Оффтоп.


Fredericco © ( 2004-06-02 20:50 ) [4]

Удалено модератором
Примечание: Оффтоп.


TUser © ( 2004-06-02 20:54 ) [5]

Удалено модератором
Примечание: Оффтоп.


DrPass © ( 2004-06-02 23:02 ) [6]


> Подскажите пожалуйста: с помощью какой программы мне декапилировать
> ехе файл в .dpr и т. д.

Есть универсальная программа, называется Muzzle Decompiler Pro, последняя версия со 100% успехом восстанавливает исходные тексты по exe-файлу на языках Pascal, Delphi, C++, Perl и 1C. Только найти ее трудно.


ikivio © ( 2004-06-03 01:34 ) [7]

>DrPass Есть универсальная программа, называется
>Muzzle Decompiler Pro
По моему, она называется Muzzle Enterprise.


GebbelZ © ( 2004-06-03 22:03 ) [8]

и каждый раз одно и то же.
ну как люди не могут понять, что компиляция — ОДНОНАПРАВЛЕННАЯ процедура, и из EXE файла НИКАК НЕ ВОЗМОЖНО получить исходный код программы

а для изучения того или иного алгоритма работы можно воспользоваться дизасемблером:
— Sourcer (для DOS)
— Win32DASM
— IDA
— DEDE


Игорь Шевченко © ( 2004-06-03 22:43 ) [9]


> ну как люди не могут понять, что компиляция — ОДНОНАПРАВЛЕННАЯ
> процедура, и из EXE файла НИКАК НЕ ВОЗМОЖНО получить исходный
> код программы

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


Gero © ( 2004-06-03 23:24 ) [10]


> последняя версия со 100% успехом восстанавливает исходные
> тексты по exe-файлу на языках Pascal, Delphi, C++, Perl
> и 1C

Хм..


GebbelZ © ( 2004-06-03 23:41 ) [11]

2 Игорь Шевченко:
для человека, имеющего прямые руки и желание возможно _всё_!

по своему опыту — «получить код обладающей той же функциональностью» ох как сложно.

>>генерирует в принципе, одинаковый код для конкретных конструкций языка высокого уровня, так что восстановить эти конструкции в большинстве случаев можно.

ага, а про оптимизации кода мы забыли?

«декомпиляторы» есть — для Clipera и для VB, но чтобы из EXE получить DPR — никогда 🙂


Gero © ( 2004-06-03 23:43 ) [12]


> но чтобы из EXE получить DPR — никогда 🙂

Неправда.


Игорь Шевченко © ( 2004-06-03 23:47 ) [13]


> ага, а про оптимизации кода мы забыли?

Оптимизация тоже детерминирована, а следовательно, в какой-то степени обратима. Зная набор правил оптимизации, подобрать нужный алгоритм к известному коду вполне реально, только не быстро, а я с самого начала говорил, что это непростое занятие. Кроме того, никто же не ставит целью получение из оптимизированного машинного кода исходный неоптимизированный, не так ли ?


GebbelZ © ( 2004-06-04 00:09 ) [14]

как я уже сказал — «для человека, имеющего прямые руки и желание возможно _всё_!»

но скормив EXE файл декомпилятору и получив набор каких-нибудь файлов ещё не факт что этот проект будет компилироваться

тем более сложность процесса восстановления кода и затраты времени увеличиваются в геом. прогрессии в зависимости от размера EXE файла.

да ещё «набор правил оптимизации» может меняться в зависимости от номера билда дельфи.


Zet ( 2004-06-10 11:17 ) [15]

Удалено модератором
Примечание: Задавй вопрос в своей ветке


Rule © ( 2004-06-10 11:30 ) [16]

Удалено модератором
Примечание: Ответ пошлешь туда


stone © ( 2004-06-10 11:43 ) [17]

Ребятя, вы о чем? Человеку надо
> декапилировать ехе файл

Это капиляры из него извлечь что-ли?


Anatoly Podgoretsky © ( 2004-06-10 11:47 ) [18]

GebbelZ © (04.06.04 00:09) [14]
гемороя море 🙂

Не то слово, но теоритически возможно, только зачем говорить об ехе, что надо кроме текста программы еще и библиотеки декомпилировать?

ЗЫ: Декапилиция это вроде бы процесс удаления волос с ног?


Rule © ( 2004-06-10 12:21 ) [19]

Удалено модератором
Примечание: И сейчас это делаешь, при том прямо это здесь же и признаешь


Странник © ( 2004-06-10 12:36 ) [20]

Ну куда все смотрят. Все в программирование.
Вопрос был: декапилировать ехе файл .

Декапилировать — т.е. убрать капли. А какие капли могут быть в ехе-файле?
Водочные, пивные и т.п. — кефирчику с утра попить.
если другие капли — то и рецепты другие.


Digitman © ( 2004-06-10 13:03 ) [21]


> Anatoly Podgoretsky © (10.06.04 11:47) [18]
> ЗЫ: Декапилиция это вроде бы процесс удаления волос с ног?

не . сей чудный процесс, кажись, эпиляцией зовется ..

позволю себе пофантазировать : не менее чуден был бы обратный процесс — ДЕэпиляция, т.е. не сбор урожая, а посев

Декомпилировать delphi 7?

Есть программа написанная мною давно, код удалил по непонятным мне причинам, чем декомпилировать чтобы было удобно? Есть вот такая тема декомпилировал программой dede но там написано delphi2-6: player вот пример кода

procedure TForm3.ChangeLight(Sender : TObject); begin (* * Reference to Form3 | 00478678 A118EC4700 mov eax, dword ptr [$0047EC18] 0047867D 0514030000 add eax, +$00000314 00478682 50 push eax 00478683 6800120000 push $00001200 00478688 6801400000 push $00004001 * Reference to: opengl32.glLightfv() | 0047868D E82AADFEFF call 004633BC 00478692 C3 ret *) end;

не пойму как из этого сделать делфи-код вот весь проект

  • Вопрос задан более трёх лет назад
  • 865 просмотров

3 комментария

Простой 3 комментария

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *