Декомпіляція в delphi

Дворічна дочка програміста запитує у мами:
- А правда, що програми після деінсталяції потрапляють на небо, на величезний сервер, який ніколи не висне? Мама задумливо відповідає:
- Якби у твого тата сервер ніколи не вис, то ти, напевно, ще й не скомпільована б.

Читаючи форуми з програмування, іноді натикаєшся на запитання типу: "У мене є скомпільованій на Delphi. Як мені отримати її вихідний код?". Зазвичай таке питання виникає, коли програміст втратив файли проекту і у нього залишився тільки .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 декомпілятори:

Схожі статті