Význam a použití dekompilace

Jednoduše řečeno, dekompilace je inverzí kompilace: překlad spustitelného souboru do jazyka vyšší úrovně.

Předpokládejme, že ztratíte zdroj projektu Delphi a máte pouze spustitelný soubor: reverzní inženýrství (dekompilace) je užitečné, pokud původní zdroje nejsou k dispozici.

Hm, „zdroje nejsou k dispozici“, znamená to, že můžeme dekompilovat projekty Delphi jiných lidí? Ano, ano a ne ...

Je možná skutečná dekompilace?

Ne, samozřejmě že ne. Plně automatizovaná dekompilace není možná - žádný dekompilátor nemohl přesně reprodukovat původní zdrojový kód.

Při kompilaci a propojení projektu Delphi za účelem vytvoření samostatného spustitelného souboru se většina názvů použitých v programu převede na adresy. Tato ztráta jmen znamená, že dekompilátor by musel vytvořit jedinečné názvy pro všechny konstanty, proměnné, funkce a procedury. I když je dosaženo určitého stupně úspěchu, generovaný „zdrojový kód“ postrádá smysluplné názvy proměnných a funkcí.
Syntaxe zdrojového jazyka samozřejmě ve spustitelném souboru zjevně neexistuje. Pro dekompilátor by bylo velmi obtížné interpretovat řadu instrukcí strojového jazyka (ASM), které existují ve spustitelném souboru, a rozhodnout, jaká byla původní zdrojová instrukce.

instagram viewer

Proč a kdy použít dekompilaci

Reverzní inženýrství lze použít z několika důvodů, z nichž některé jsou:

  • Obnova ztraceného zdrojového kódu
  • Migrace aplikací na novou hardwarovou platformu
  • Stanovení existence virů nebo škodlivého kódu v programu
  • Oprava chyb, když vlastník aplikace není k dispozici pro provedení opravy.
  • Obnova zdrojového kódu někoho jiného (například k určení algoritmu).

Je to legální?

Reverzní inženýrství NEBUDE praskat, ačkoli je někdy obtížné mezi těmito dvěma nakreslit jemnou hranici. Počítačové programy jsou chráněny zákony o autorských právech a ochranných známkách. Různé země mají různé výjimky z práv vlastníka autorských práv. Nejběžnější státy uvádějí, že je v pořádku dekompilovat: pro účely interpretovatelnosti, kde specifikace rozhraní nebyla zpřístupněna, pro účely opravy chyb, pokud vlastník autorských práv není k dispozici pro provedení opravy, určení částí programu, které nejsou chráněny autorská práva. Samozřejmě byste měli být velmi opatrní / obraťte se na svého právníka, pokud máte pochybnosti, zda máte povoleno rozebrat soubor exe některého programu.

Poznámka: Pokud hledáte praskliny Delphi, generátory klíčů nebo jen sériová čísla: jste na nesprávném webu. Mějte prosím na paměti, že vše, co zde najdete, je psáno / prezentováno pouze pro účely průzkumu / vzdělávání.

Borland v současné době nenabízí žádný produkt schopný dekompilovat spustitelný soubor (.exe) nebo „kompilovanou jednotku Delphi“ (.dcu) zpět na původní zdrojový kód (.pas).

Kompilovaná jednotka Delphi (DCU)

Při kompilaci nebo spuštění projektu Delphi je vytvořen soubor kompilované jednotky (.pas). Ve výchozím nastavení je kompilovaná verze každé jednotky uložena v samostatném souboru binárního formátu se stejným názvem jako soubor jednotky, ale s příponou .DCU. Například unit1.dcu obsahuje kód a data deklarovaná v souboru unit1.pas.

To znamená, že pokud máte například někoho, zkompilovaný zdroj, vše, co musíte udělat, je obrátit jej a získat kód. Špatně. Formát souboru DCU je nezdokumentovaný (proprietární formát) a může se měnit z verze na verzi.

Po kompilátoru: Delphi reverzní inženýrství

Pokud byste se chtěli pokusit dekompilovat spustitelný soubor Delphi, měli byste vědět:

Zdrojové soubory programů Delphi jsou obvykle uloženy ve dvou typech souborů: kódové soubory ASCII (.pas, .dpr) a soubory prostředků (.res, .rc, .dfm, .dcr). Soubory Dfm obsahují podrobnosti (vlastnosti) objektů obsažených ve formuláři. Při vytváření exe, Delphi zkopíruje informace v souborech PDF do dokončeného souboru .exe. Soubory formuláře popisují každou komponentu ve formuláři, včetně hodnot všech trvalých vlastností. Pokaždé, když změníme polohu formuláře, titulek tlačítka nebo přiřadíme proceduře události komponentu, Delphi zapíše tyto úpravy do souboru DFM (ne kód procedury události - je uložen v pas / dcu) soubor). Abychom dostali "dfm" z spustitelného souboru, musíme pochopit, jaký typ prostředků je uložen uvnitř spustitelného souboru Win32.

Všechny programy kompilované společností Delphi mají následující sekce: KÓD, DATA, BSS, .idata, tls, .rdata, .rsrc. Nejdůležitější z hlediska dekompilace jsou sekce CODE a .rsrc. V "Přidání funkcí do programu Delphi"Článek ukazuje několik zajímavých faktů o formátu spustitelných souborů Delphi, informacích o třídě a zdrojích DFM: jak přiřadit události, aby byly zpracovány jinými obsluhy událostí definovanými ve stejné podobě." Ještě více: jak přidat svůj vlastní obslužný program události, přidáním kódu do spustitelného souboru, který změní titulek tlačítka.

Mezi mnoha typy prostředků, které jsou uloženy v souboru exe, obsahuje RT_RCDATA nebo prostředek definovaný aplikací (surová data) informace, které byly v souboru DFM před kompilací. Abychom mohli extrahovat data DFM ze souboru exe, můžeme zavolat EnumResourceNames Funkce API... Další informace o extrahování DFM z spustitelného souboru najdete na adrese: Kódování Průzkumníka Delphi DFM článek.

Umění reverzního inženýrství je tradičně zemí technických kouzelníků, kteří jsou obeznámeni s jazykem montáže a debuggery. Objevilo se několik dekompilátorů Delphi, které umožňují každému, dokonce i s omezenými technickými znalostmi, převrátit většinu spustitelných souborů Delphi.

Pokud vás zajímají programy Delphi pro reverzní inženýrství, navrhuji vám podívat se na několik následujících „dekompilátorů“:

Dekompilátor spustitelných souborů (EXE) a dynamické knihovny (DLL), napsané v Delphi a spuštěné v prostředí Windows32. Konečným cílem projektu je vývoj programu schopného obnovit většinu původních Delphi zdrojové kódy ze kompilovaného souboru, ale IDR, stejně jako ostatní dekompilátory Delphi, to zatím nemohou udělat. IDR je přesto ve stavu, který takový proces usnadňuje. Ve srovnání s jinými dobře známými dekompilátory Delphi má výsledek analýzy IDR největší úplnost a spolehlivost.

Revendepro najde téměř všechny struktury (třídy, typy, procedury atd.) V programu a generuje pascal reprezentaci, procedury budou napsány v assembleru. Kvůli určitému omezení v assembleru nelze vygenerovaný výstup překompilovat. Zdroj tohoto dekompilátoru je volně k dispozici. Bohužel toto je jediný dekompilátor, který jsem nebyl schopen použít - při pokusu o dekompilaci spustitelného souboru Delphi se zobrazí výzva.

EMS Source Rescuer je snadno použitelná průvodce, která vám pomůže obnovit ztracený zdrojový kód. Pokud ztratíte zdroje projektu Delphi nebo C ++ Builder, ale máte spustitelný soubor, může tento nástroj zachránit část ztracených zdrojů. Záchranář vytváří všechny projektové formuláře a datové moduly se všemi přiřazenými vlastnostmi a událostmi. Vytvořené procedury událostí nemají tělo (nejedná se o dekompilátor), ale mají adresu kódu ve spustitelném souboru. Ve většině případů zachrání zachránce 50-90% času na obnovu projektu.

DeDe je velmi rychlý program, který dokáže analyzovat spustitelné soubory kompilované s Delphi. Po dekompilaci vám DeDe poskytne následující:

  • Všechny dfm soubory cíle. Budete je moci otevřít a upravit pomocí Delphi.
  • Všechny publikované metody v dobře komentovaném ASM kódu s odkazy na řetězce, importované volání funkcí, volání metod tříd, komponenty v jednotce, bloky Try-Except a Try-Final. Ve výchozím nastavení DeDe načítá pouze publikované zdroje metod, ale můžete také zpracovat jinou proceduru ve spustitelném souboru, pokud znáte korekci RVA pomocí Nástroje | Rozebrat nabídku Proc.
  • Mnoho dalších informací.
  • Můžete vytvořit složku projektu Delphi se všemi soubory dfm, pas, dpr. Poznámka: soubory pas obsahují výše uvedený dobře komentovaný kód ASM. Nelze je překompilovat!