Значение и употреба на декомпилация

Просто казано, декомпилацията е обратна на компилация: превеждане на изпълним файл на език от по-високо ниво.

Да предположим, че губите източника на проекта си Delphi и имате само изпълним файл: обратната инженерия (декомпилация) е полезна, ако оригиналните източници не са налични.

Хм, "източници не са налични", означава ли това, че можем да декомпилираме проекти на Delphi на други хора? Е, да и не ...

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

Не разбира се, че не. Напълно автоматизирана декомпилация не е възможна - нито един декомпилатор не може точно да възпроизведе оригиналния изходен код.

Когато проектът Delphi е компилиран и свързан за създаване на самостоятелен изпълним файл, повечето от имената, използвани в програмата, се преобразуват в адреси. Тази загуба на имена означава, че декомпилаторът трябва да създаде уникални имена за всички константи, променливи, функции и процедури. Дори ако се постигне определена степен на успех, на генерирания "изходен код" липсват смислени имена на променливи и функции.

instagram viewer

Очевидно синтаксисът на езика на източника вече не съществува в изпълнимия файл. Декомпилаторът би бил много труден да интерпретира серията инструкции за машинен език (ASM), които съществуват в изпълним файл и да реши каква е оригиналната инструкция за източник.

Защо и кога да се използва декомпилация

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

  • Възстановяване на изгубен изходен код
  • Миграция на приложения към нова хардуерна платформа
  • Определяне на съществуването на вируси или злонамерен код в програмата
  • Коригиране на грешки, когато собственикът на приложението не е на разположение, за да извърши корекцията.
  • Възстановяване на чуждия изходен код (например за определяне на алгоритъм).

Това законно ли е?

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

Забележка: ако търсите пукнатини на Delphi, ключови генератори или просто серийни номера: вие сте на грешен сайт. Моля, имайте предвид, че всичко, което намерите тук, е написано / представено само за проучвателни / образователни цели.

За момента Borland не предлага продукт, способен да декомпилира изпълним (.exe) файл или "Delphi компилирана единица" (.dcu) обратно към оригиналния изходен код (.pas).

Delphi компилиран блок (DCU)

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

Това означава, че ако имате някой, например, компонент, съставен източник, всичко, което трябва да направите, е да го обърнете и да получите кода. Грешен. Форматът на DCU файла е недокументиран (патентован формат) и може да се променя от версия до версия.

След компилатора: Delphi Reverse Engineering

Ако искате да опитате да декомпилирате изпълним файл на 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 данните от EXE файл, можем да се обадим на EnumResourceNames API функция... За повече информация относно извличането на DFM от изпълним файл, вижте: Кодиране на Delphi DFM Explorer статия.

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

Ако се интересувате от обратната инженерна програма на Delphi, предлагам ви да разгледате следните няколко „декомпилатора“:

Декомпилатор на изпълними файлове (EXE) и динамични библиотеки (DLL), написана в Delphi и изпълнена в Windows32 среда. Крайната цел на проекта е разработването на програмата, способна да възстанови по-голямата част от първоначалните Delphi изходни кодове от компилирания файл, но IDR, както и други декомпилатори на Delphi, все още не могат да го направят. Независимо от това IDR е в състояние значително да улесни подобен процес. В сравнение с други добре известни декомпилатори на Delphi резултатът от IDR анализа има най-голяма пълнота и надеждност.

Revendepro намира почти всички структури (класове, типове, процедури и т.н.) в програмата и генерира pascal представянето, процедурите ще бъдат написани в асемблера. Поради известно ограничение в асемблера генерираният изход не може да бъде компилиран. Източникът на този декомпилатор е свободно достъпен. За съжаление, това е единственият декомпилатор, който не успях да използвам - той подканва с изключение, когато се опитате да декомпилирате някой изпълним файл на Delphi.

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

DeDe е много бърза програма, която може да анализира изпълними файлове, компилирани с Delphi. След декомпилация DeDe ви дава следното:

  • Всички dfm файлове на целта. Ще можете да ги отворите и редактирате с Delphi.
  • Всички публикувани методи в добре коментиран ASM код с препратки към низове, импортирани извиквания на функции, обаждания на методи на класове, компоненти в устройството, блокове Try-Except и Try-End. По подразбиране DeDe извлича само публикуваните източници на методи, но можете също така да обработите друга процедура в изпълним файл, ако знаете компенсирането на RVA с помощта на Tools | Разглобете менюто Proc.
  • Много допълнителна информация.
  • Можете да създадете папка на проект Delphi с всички dfm, pas, dpr файлове. Забележка: пасовите файлове съдържат споменатия по-горе добре коментиран ASM код. Те не могат да бъдат прекомпилирани!
instagram story viewer