Dekompileerimise tähendus ja kasutamine

Lihtsamalt öeldes on dekompileerimine kompileerimise pöördvõrdeline: käivitatava faili tõlkimine kõrgema taseme keelde.

Oletame, et kaotate Delphi projekti allika ja teil on ainult käivitatav fail: pöördprojekteerimine (dekompileerimine) on kasulik, kui algsed allikad pole saadaval.

Hm, "allikad pole saadaval", kas see tähendab, et suudame teiste inimeste Delphi-projektid dekompileerida? Noh, jah ja ei ...

Kas tõeline dekompileerimine on võimalik?

Ei, muidugi mitte. Täielikult automatiseeritud dekompileerimine pole võimalik - ükski dekompileerija ei suutnud algset lähtekoodi täpselt reprodutseerida.

Kui Delphi projekt kompileeritakse ja lingitakse eraldiseisva käivitatava faili saamiseks, teisendatakse enamik programmis kasutatavaid nimesid aadressideks. Nimede kaotus tähendab, et dekompileerija peaks looma konstandite, muutujate, funktsioonide ja protseduuride jaoks kordumatud nimed. Isegi kui teatud edu saavutatakse, puuduvad loodud lähtekoodil tähenduslikud muutujate ja funktsioonide nimed.

instagram viewer

Ilmselt pole lähtekeele süntaksit käivitatavas vormis enam olemas. Dekompileerijal oleks väga keeruline tõlgendada käivitatavas failis eksisteerivaid masinakeelsete juhiste (ASM) seeriaid ja otsustada, mis oli algne lähtekäsk.

Miks ja millal kasutada dekompileerimist

Pöördtehnoloogiat saab kasutada mitmel põhjusel, millest mõned on:

  • Kadunud lähtekoodi taastamine
  • Rakenduste migreerimine uuele riistvaraplatvormile
  • Viiruste või pahatahtliku koodi olemasolu tuvastamine programmis
  • Vea parandamine, kui rakenduse omanik pole paranduse tegemiseks saadaval.
  • Kellegi teise lähtekoodi taastamine (näiteks algoritmi määramiseks).

Kas see on seaduslik?

Pöördprojekteerimine EI OLE lõhenemist, kuigi vahel on keeruline nende kahe vahele peenet piiri tõmmata. Arvutiprogramme kaitsevad autoriõiguse ja kaubamärgiseadused. Erinevates riikides on autoriõiguse omaniku õigustest erinevad erandid. Kõige tavalisemad väidavad, et dekompileerimine on ok: tõlgendatavuse huvides, kui liidese spetsifikatsiooni pole veel kättesaadavaks tehtud, vigade parandamise eesmärgid, kui autoriõiguse omanikul pole parandusi teha, määrata need programmi osad, mis pole kaitstud autoriõigused. Muidugi peaksite olema väga ettevaatlik / võtma ühendust oma juristiga, kui kahtlete, kas teil on lubatud mõne programmi exe-fail lahti võtta.

Märge: kui otsite Delphi pragusid, võtmegeneraatoreid või lihtsalt seerianumbreid: olete valel saidil. Pidage meeles, et kõik, mida siit leiate, on kirjutatud / esitatud ainult uurimise või õppe eesmärgil.

Praegu ei paku Borland ühtegi toodet, mis suudaks käivitatava (.exe) faili või "Delphi kompileeritud üksuse" (.dcu) uuesti algsesse lähtekoodi (.pas) tagasi dekompileerida.

Delphi koostatud üksus (DCU)

Kui Delphi projekt kompileeritakse või käivitatakse, luuakse kompileeritud ühiku (.pas) fail. Vaikimisi salvestatakse iga üksuse kompileeritud versioon eraldi binaarses vormingus failis, millel on sama nimi kui ühikufailil, kuid laiendiga .DCU. Näiteks unit1.dcu sisaldab faili unit1.pas deklareeritud koodi ja andmeid.

See tähendab, et kui teil on näiteks keegi, siis peate komponendi kompileeritud allikast selle pöörduma ja koodi hankima. Vale. DCU failivorming on dokumenteerimata (patenteeritud vorming) ja see võib versioonist versioonini muutuda.

Pärast kompilaatorit: Delphi pöördprojekteerimine

Kui soovite proovida Delphi käivitatava faili dekompileerimist, peaksite teadma järgmist:

Delphi programmide lähtefaile hoitakse tavaliselt kahes failitüübis: ASCII koodifailid (.pas, .dpr) ja ressursifailid (.res, .rc, .dfm, .dcr). Dfm-failid sisaldavad vormis sisalduvate objektide üksikasju (omadusi). Luues eksi, Kopeerib Delphi .dfm-failides oleva teabe valmis .exe-koodifaili. Vormifailid kirjeldavad kõiki teie vormi komponente, sealhulgas kõigi püsivate omaduste väärtusi. Iga kord, kui muudame vormi positsiooni, nupu pealkirja või määrame sündmuse protseduuri komponendile Delphi kirjutab need muudatused DFM-faili (mitte sündmuse protseduuri koodi - see salvestatakse pas / dcu fail). Käivitatavast failist "dfm" saamiseks peame mõistma, millist tüüpi ressursse Win32 käivitatavas failis hoitakse.

Kõigil Delphi koostatud programmidel on järgmised jaotised: CODE, DATA, BSS, .idata, tls, .rdata, .rsrc. Dekompileerimise seisukohast on olulisemad lõigud CODE ja .rsrc. Jaotises "Funktsionaalsuse lisamine Delphi programmile"artiklis kuvatakse mõned huvitavad faktid Delphi käivitatavate vormingute, klassiteabe ja DFM-i ressursside kohta: kuidas ümber määrata sündmusi, mida käsitlevad teised samas vormis määratletud sündmustekäitlejad. Veelgi enam: kuidas lisada oma sündmuste töötleja, täidetavale koodile lisades, mis muudab nupu pealdist.

Tüüpiliste ressursitüüpide hulgas, mida salvestatakse exe-failis, sisaldab RT_RCDATA või rakenduse määratletud ressurss (lähteandmed) teavet, mis oli DFM-failis enne kompilatsiooni. DFM-i andmete ekstraheerimiseks exe-failist võime helistada EnumResourceNames API funktsioon... Lisateavet DFM-i käivitatavast ekstraheerimise kohta leiate järgmiselt saidilt: Delphi DFM-i uurija kodeerimine artikkel.

Pöördtehnika kunst on traditsiooniliselt olnud tehniliste võlurite maa, tuttav montaažikeele ja siluritega. Ilmunud on mitu Delphi dekompileerijat, mis võimaldavad kõigil, isegi piiratud tehniliste teadmistega, enamiku Delphi käivitatavate failide insenerprojekteerida.

Kui olete huvitatud Delphi pöördprojekteerimisest, siis soovitan teil vaadata järgmisi "dekompileerijaid":

Käivitatavate failide (EXE) ja dünaamilised raamatukogud (DLL), kirjutatud Delfis ja käivitatud Windows32 keskkonnas. Projekti lõplik eesmärk on programmi arendamine, mis on võimeline taastama suurema osa esialgsest Delphist lähtekoodid kompileeritud failist, kuid IDR, nagu ka teised Delphi dekompileerijad, ei saa seda veel teha. Sellegipoolest on IDR sellise protsessi hõlbustamiseks märkimisväärselt staatuses. Võrreldes teiste tuntud Delphi dekompileerijatega on IDR analüüsi tulemus kõige täielikum ja usaldusväärsem.

Revendepro leiab programmist peaaegu kõik struktuurid (klassid, tüübid, protseduurid jne) ja loob passaalse esituse, protseduurid kirjutatakse monteerijana. Mõningate piirangute tõttu monteerimises ei saa genereeritud väljundit uuesti kompileerida. Selle dekompileerija allikas on vabalt saadaval. Kahjuks on see ainus dekompileerija, mida ma ei saanud kasutada - see küsib mõne erandiga, kui proovite mõnda Delphi käivitatavat faili dekompileerida.

EMS Source Rescuer on hõlpsasti kasutatav viisardirakendus, mis aitab teil kaotatud lähtekoodi taastada. Kui kaotate Delphi või C ++ Builderi projektiallikad, kuid teil on käivitatav fail, siis võib see tööriist päästa osa kaotatud allikatest. Päästja toodab kõik projektivormid ja andmemoodulid koos kõigi määratud omaduste ja sündmustega. Valmistatud sündmusprotseduuridel pole keha (see ei ole dekompileerija), kuid neil on käivitatavas failis koodi aadress. Enamikul juhtudel säästab päästja projekti taastamiseks 50–90% teie ajast.

DeDe on väga kiire programm, mis suudab Delphiga kompileeritud käivitatavaid faile analüüsida. Pärast dekompileerimist annab DeDe teile järgmise:

  • Kõik sihtmärgi dfm-failid. Saate neid Delphi abil avada ja redigeerida.
  • Kõik avaldatud meetodid on hästi kommenteeritud ASM-koodiga koos viidetega stringidele, imporditud funktsioonikõnedele, klassikõnede meetodikõnedele, ühiku komponentidele, plokkidele Proovi-Välja arvatud ja Proovi-Lõpuks. Vaikimisi hangib DeDe ainult avaldatud meetodite allikad, kuid võite töödelda ka mõnda muud protseduuri käivitatavas failis, kui teate RVA nihet tööriistade Tööriistad | Demonteerige menüü Proc.
  • Palju lisateavet.
  • Saate luua Delphi projekti kausta kõigi dfm, pas, dpr failidega. Märkus: pas-failid sisaldavad ülalnimetatud hästi kommenteeritud ASM-koodi. Neid ei saa uuesti kompileerida!