Egyszerűen fogalmazva: a dekompiláció a fordítás fordítottja: egy végrehajtható fájl fordítása egy magasabb szintű nyelvre.
Tegyük fel, hogy elveszíti a Delphi projekt forrását, és csak a végrehajtható fájlja van: a fordított tervezés (dekompiláció) akkor hasznos, ha az eredeti források nem állnak rendelkezésre.
Hm, "a források nem állnak rendelkezésre", ez azt jelenti, hogy lebonthatjuk más emberek Delphi-projektjeit? Nos, igen és nem ...
Lehetséges az igaz dekompiláció?
Nem, természetesen nem. A teljesen automatizált dekompiláció nem lehetséges - egyetlen dekompilátor sem tudta pontosan reprodukálni az eredeti forráskódot.
Ha egy Delphi projektet összeállítanak és összekapcsolnak önálló futtatható fájl létrehozására, akkor a programban használt legtöbb név konvertálódik címre. Ez a névvesztés azt jelenti, hogy a dekompilátornak egyedi neveket kell létrehoznia az összes állandóra, változóra, függvényre és eljárásra. Még ha bizonyos fokú sikert is elérünk, a generált "forráskódnak" nincs értelmes változó- és függvényneve.
Nyilvánvaló, hogy a forrásnyelv szintaxisa már nem létezik a végrehajtható fájlban. A dekompilátor számára nagyon nehéz lenne értelmezni a végrehajtható fájlban lévõ gépi nyelv utasítások (ASM) sorozatát, és eldönteni, hogy mi volt az eredeti forrás utasítás.
Miért és mikor kell használni a dekompilációt?
A hátraépítés több okból is felhasználható, amelyek közül néhány:
- Az elveszett forráskód helyreállítása
- Alkalmazások áttelepítése új hardverplatformra
- A vírusok vagy rosszindulatú kódok meglétének meghatározása a programban
- Hibajavítás, ha az alkalmazás tulajdonosa nem áll rendelkezésre a javításhoz.
- Valaki más forráskódjának helyreállítása (például egy algoritmus meghatározására).
Ez legális?
A hátraépítés NEM repedés, bár néha nehéz meghúzni a finom vonalat e kettő között. A számítógépi programokat a szerzői jogok és a védjegyek törvényei védik. A különböző országok eltérő kivételeket alkalmaznak a szerzői jogok tulajdonosainak jogaira. A leggyakoribbak azt állítják, hogy nem megfelelő a dekompiláció: az interpretálhatóság érdekében, ha az interfész specifikációt még nem tették elérhetővé, a a hibajavítás célja, ha a szerzői jog tulajdonosa nem áll rendelkezésre a javítás elvégzésére, a program azon részeinek meghatározására, amelyeket a szerzői jog. Természetesen nagyon óvatosnak kell lennie / lépjen kapcsolatba az ügyvédjével, ha kétségei vannak arról, hogy engedélyezték-e a program egyes fájljainak lebontását.
jegyzet: ha Delphi repedéseket, kulcsgenerátorokat vagy csak sorozatokat keres: rosszul van. Kérjük, ne feledje, hogy minden, amit itt talál, csak kutatási vagy oktatási célokra van írva / bemutatva.
Jelenleg a Borland nem kínál olyan terméket, amely képes végrehajtható (.exe) fájlt vagy a "Delphi fordított egységet" (.dcu) az eredeti forráskódra (.pas) visszafejteni.
Delphi összeállított egység (DCU)
A Delphi projekt lefordításakor vagy futtatásakor összeállított egység (.pas) fájl jön létre. Alapértelmezés szerint az egyes egységek lefordított verzióját külön bináris formátumú fájlban tárolják, azonos névvel, mint az egységfájl, de .DCU kiterjesztéssel. Például az unit1.dcu tartalmazza az unit1.pas fájlban deklarált kódot és adatokat.
Ez azt jelenti, hogy ha van valaki, például az összetevőkből összeállított forrás, akkor csak annyit kell tennie, hogy megfordítja és megkapja a kódot. Rossz. A DCU fájl formátuma nem dokumentált (saját formátum), és verzióról verzióra változhat.
A fordító után: Delphi Reverse Engineering
Ha meg akarja próbálni egy Delphi futtatható fájl dekompilációját, akkor ezek közül néhányat tudnia kell:
A Delphi programok forrásfájljait általában két fájltípusban tárolják: ASCII kódfájlokat (.pas, .dpr) és erőforrásfájlokat (.res, .rc, .dfm, .dcr). A Dfm fájlok az űrlapban szereplő objektumok részleteit (tulajdonságait) tartalmazzák. Amikor létrehoz egy exe, A Delphi másolja .dfm fájlokban az információkat a kész .exe kódfájlba. Az űrlapfájlok leírják az űrlap egyes összetevőit, beleértve az összes állandó tulajdonság értékét. Minden alkalommal, amikor megváltoztatjuk az űrlap pozícióját, a gomb feliratát, vagy esemény rendezési eljárást rendelünk egy összetevő, a Delphi számára ezeket a módosításokat DFM fájlba írja (nem az esemény eljárás kódjára - ez a pas / dcu fájlban található) fájl). Annak érdekében, hogy megkapjuk a "dfm" fájlt a végrehajtható fájlból, meg kell értenünk, hogy milyen típusú erőforrások vannak tárolva egy Win32 futtatható fájlban.
A Delphi által összeállított összes program a következő szakaszokkal rendelkezik: KÓD, ADATOK, BSS, .idata, tls, .rdata, .rsrc. A dekompilálás szempontjából a legfontosabb a CODE és .rsrc szakasz. Ban,-ben "Funkcionalitás hozzáadása a Delphi programhoz"cikk néhány érdekes tényt mutat be a Delphi futtatható formátuma, osztályinformációja és a DFM erőforrások vonatkozásában: hogyan lehet az események újrarendelését más, azonos formátumban definiált eseménykezelők kezelni. Még több: hogyan lehet hozzáadni a saját eseménykezelőt, a kód hozzáadásával a végrehajtható fájlhoz, amely megváltoztatja a gomb feliratát.
Az exe fájlban tárolt erőforrások sok típusa között az RT_RCDATA vagy az alkalmazás által meghatározott erőforrás (nyers adatok) tárolja azokat az információkat, amelyek a DFM fájlban voltak a fordítás előtt. Annak érdekében, hogy a DFM-adatokat egy exe fájlból kinyerjük, felhívhatjuk a EnumResourceNames API funkció... A DFM végrehajtható fájlból történő kibontásáról lásd: A Delphi DFM felfedező kódolása cikk.
A fordított tervezés művészete hagyományosan a műszaki varázslók földje volt, ismeri az összeszerelési nyelvet és a hibakeresőket. Számos Delphi dekompilátor jelent meg, amelyek lehetővé teszik bárki számára, még korlátozott műszaki ismeretekkel is, hogy megfordítsák a Delphi legtöbb futtatható fájlját.
Ha érdekli a fordított tervezésű Delphi programok, azt javaslom, hogy vessen egy pillantást a következő néhány "dekompilátorra":
A futtatható fájlok (EXE) és dinamikus könyvtárak (DLL), Delphi-ben írva és Windows32 környezetben végrehajtva. A projekt végső célja a program kifejlesztése, amely képes visszaállítani a kezdeti Delphi nagy részét forráskódok az összeállított fájlból, de az IDR, valamint más Delphi dekompilátorok, még nem tudják megtenni. Ennek ellenére az IDR jelentősen olyan állapotban van, hogy megkönnyítse ezt a folyamatot. A jól ismert Delphi dekompilátorokkal összehasonlítva az IDR elemzés eredménye a legnagyobb teljességgel és megbízhatósággal rendelkezik.
A Revendepro szinte az összes struktúrát (osztályok, típusok, eljárások stb.) Megtalálja a programban, és generálja a pascal ábrázolást, az eljárások összeállítóban kerülnek megírásra. Az összeszerelő bizonyos korlátozása miatt a generált kimenetet nem lehet újrafordítani. A dekompilátor forrása szabadon elérhető. Sajnos ez az egyetlen dekompilátor, amelyet nem tudtam használni - kivételével, amikor megpróbál dekompilálni egy Delphi futtatható fájlt.
Az EMS Source Rescuer egy könnyen használható varázsló alkalmazás, amely segít visszaállítani az elveszett forráskódot. Ha elveszíti a Delphi vagy a C ++ Builder projekt forrásait, de van egy futtatható fájlja, akkor ez az eszköz megmentheti az elvesztett források egy részét. A Rescuer előállít minden projekt űrlapot és adatmodult az összes hozzárendelt tulajdonsággal és eseményvel. A létrehozott eseményprocedúrák nem tartalmaznak testet (ez nem egy dekompilátor), de a futtatható fájlban vannak kódcímek. A legtöbb esetben a Rescuer az Ön idejének 50–90% -át megtakarítja a projekt helyreállításához.
A DeDe egy nagyon gyors program, amely képes a Delphivel összeállított végrehajtható fájlok elemzésére. Dekompiláció után a DeDe a következőket adja meg:
- A cél összes dfm fájlja. A Delphi segítségével megnyithatja és szerkesztheti őket.
- Az összes közzétett módszer jól kommentált ASM-kódban, hivatkozással karakterláncokra, importált függvényhívásokra, osztályozott metódushívásokra, az egység alkotóelemeire, a Try-kivétel és a Try-végre blokkokra. Alapértelmezés szerint a DeDe csak a közzétett módszer forrásait tölti le, de egy másik eljárást is végrehajthat egy végrehajtható fájlban, ha ismeri az RVA eltolását az Eszközök | Szerelje szét a Proc menüt.
- Sok további információ.
- Készíthet egy Delphi projektmappát az összes dfm, pas, dpr fájllal. Megjegyzés: a pas fájlok tartalmazzák a fent említett, jól megjegyzett ASM-kódot. Nem lehet újrafordítani!