Pomen in uporabe dekompilacije

Preprosto rečeno, dekompilacija je obratna kompilacija: prevajanje izvršljive datoteke v jezik višje ravni.

Recimo, da izgubite vir svojega projekta Delphi in imate samo izvršljivo datoteko: obratno inženirstvo (dekompilacija) je koristno, če izvirni viri niso na voljo.

Hm, "virov ni na voljo", ali to pomeni, da lahko dekompiliramo druge projekte Delphija? No, da in ne ...

Ali je možna resnična dekompilacija?

Ne, seveda ne. Popolnoma avtomatizirana dekompilacija ni mogoča - noben dekompilator ne bi mogel natančno reproducirati prvotne izvorne kode.

Ko je projekt Delphi sestavljen in povezan za izdelavo samostojne izvršljive datoteke, se večina imen, uporabljenih v programu, pretvori v naslove. Ta izguba imen pomeni, da bi moral dekompirator ustvariti edinstvena imena za vse konstante, spremenljivke, funkcije in postopke. Tudi če je dosežena določena stopnja uspeha, ustvarjena "izvorna koda" nima smiselnih imen spremenljivk in funkcij.
Očitno sintaksa izvornega jezika v izvršljivi datoteki ne obstaja več. Dekompilator bi zelo težko razlagal vrsto strojnih jezikovnih navodil (ASM), ki obstajajo v izvršljivi datoteki, in se odločil, kakšen je izvorni ukaz.

instagram viewer

Zakaj in kdaj uporabiti dekompilacijo

Povratni inženiring je mogoče uporabiti iz več razlogov, med katerimi so:

  • Obnovitev izgubljene izvorne kode
  • Migracija aplikacij na novo strojno platformo
  • Ugotavljanje obstoja virusov ali zlonamerne kode v programu
  • Popravek napak, ko lastnik aplikacije ni na voljo za izvedbo popravka.
  • Obnovitev izvorne kode nekoga drugega (na primer za določitev algoritma).

Ali je to zakonito?

Povratni inženiring NE lomi, čeprav je včasih težko potegniti natančno črto med tema dvema. Računalniški programi so zaščiteni z zakoni o avtorskih pravicah in blagovnih znamkah. Različne države imajo različne izjeme glede pravic lastnika avtorskih pravic. Najpogostejši navajajo, da je v redu dekompirati: za namene razlage, če specifikacija vmesnika še ni bila na voljo, za odpravljanje napak, kadar lastnik avtorskih pravic ni na voljo za izvedbo popravka, za določitev delov programa, ki niso zaščiteni z avtorske pravice. Seveda morate biti zelo previdni / obrnite se na svojega odvetnika, če dvomite, ali lahko razstavite datoteko exe nekaterih programov.

Opomba: če iščete razpoke v Delphiju, ključne generatorje ali samo serijske številke: ste na napačnem mestu. Upoštevajte, da je vse, kar najdete tukaj, napisano / predstavljeno samo v raziskovalne / izobraževalne namene.

Borland zaenkrat ne ponuja nobenega izdelka, ki bi lahko razgradil izvršljivo datoteko (.exe) ali "Delphi sestavljeno enoto" (.dcu) nazaj v prvotno izvorno kodo (.pas).

Delphi sestavljena enota (DCU)

Ko je sestavljen projekt Delphi ali zaženete sestavljeno datoteko enote (.pas). Privzeto je sestavljena različica vsake enote shranjena v ločeni datoteki binarnega formata z istim imenom kot datoteka enote, vendar s pripono .DCU. Na primer unit1.dcu vsebuje kodo in podatke, deklarirane v datoteki unit1.pas.

To pomeni, da če imate na primer nekone, sestavljen iz komponentnega vira, morate le to obrniti in dobiti kodo. Napačno. Oblika datoteke DCU je nedokumentirana (lastniška oblika) in se lahko spreminja iz različice v različico.

Po prevajalniku: Delphi Reverse Engineering

Če želite poskusiti dekompilirati izvršljivo datoteko Delphi, je nekaj, kar morate vedeti:

Izvorne datoteke programov Delphi so ponavadi shranjene v dveh vrstah datotek: kodne datoteke ASCII (.pas, .dpr) in datoteke virov (.res, .rc, .dfm, .dcr). Dfm datoteke vsebujejo podrobnosti (lastnosti) predmetov v obrazcu. Pri ustvarjanju exe, Delphi kopira podatke v datoteke .dfm v končano datoteko .exe. Datoteke obrazcev opisujejo vsako komponento v obrazcu, vključno z vrednostmi vseh obstojnih lastnosti. Vsakič, ko spremenimo položaj obrazca, napis gumba ali dodelimo postopek dogodku komponenti, Delphi te spremembe zapiše v datoteko DFM (ne kodo postopka dogodka - ta se shrani v pas / dcu mapa). Da bi dobili "dfm" iz izvršljive datoteke, moramo razumeti, kakšne vrste virov so shranjene znotraj izvršljivega sistema Win32.

Vsi programi, ki jih je sestavil Delphi, imajo naslednje razdelke: CODE, DATA, BSS, .idata, tls, .rdata, .rsrc. Najpomembnejša z vidika razgradnje sta razdelka CODE in .rsrc. V "Dodajanje funkcionalnosti v program Delphi"v članku je prikazano nekaj zanimivih dejstev o formatu izvedljivih datotek Delphi, informacijah o razredu in virih DFM: kako dodeliti dogodke, ki jih bodo obravnavali drugi upravljavci dogodkov, definirani v isti obliki. Še več: kako dodati svoj upravljavec dogodkov in dodati kodo v izvedljiv, ki bo spremenil napis gumba.

Med številnimi vrstami virov, ki so shranjeni v datoteki exe, RT_RCDATA ali vire, definiran za aplikacije (surovi podatki), vsebujejo podatke, ki so bili pred kompilacijo v datoteki DFM. Da izvlečemo podatke DFM iz datoteke exe, lahko pokličemo EnumResourceNames Funkcija API... Če želite več informacij o pridobivanju DFM-ja iz izvršljive datoteke, glejte: Kodiranje raziskovalca Delphi DFM Članek.

Umetnost obratnega inženiringa je že tradicionalno dežela tehničnih čarovnikov, ki jo poznajo jezik montaže in napak. Pojavilo se je več Depilijevih dekompilatorjev, ki omogočajo obrnitev večine Delphijevih izvršljivih datotek, tudi z omejenim tehničnim znanjem.

Če vas zanimajo povratni inženiring programi Delphi, predlagam, da si ogledate nekaj naslednjih "dekompilatorjev":

Dekompilator izvršljivih datotek (EXE) in dinamične knjižnice (DLL), napisan v Delfih in izveden v okolju Windows32. Končni cilj projekta je razvoj programa, ki je sposoben obnoviti večino začetnega Delphija izvorne kode iz sestavljene datoteke, vendar IDR, pa tudi drugi delilniki Delphi, tega še ne morejo storiti. Kljub temu je IDR v takšnem stanju, da olajša tak postopek. Rezultat analize IDR ima v primerjavi z drugimi dobro znanimi depilatorji Delphi največjo popolnost in zanesljivost.

Revendepro v programu najde skoraj vse strukture (razrede, vrste, postopke itd.) In ustvari pascalno predstavitev, postopki bodo zapisani v sestavljavcu. Zaradi določenih omejitev v sestavljavcu ustvarjenega izida ni mogoče ponovno sestaviti. Izvor tega dekompilatorja je prosto dostopen. Na žalost je to edini dekompiler, ki ga nisem mogel uporabiti - z izjemo se prikaže, ko poskušate dekompilirati neko izvedljivo datoteko Delphi.

EMS Source Rescuer je enostaven za uporabo čarovnika, ki vam lahko pomaga obnoviti izgubljeno izvorno kodo. Če izgubite vire projektov Delphi ali C ++ Builder, vendar imate izvedljivo datoteko, potem lahko to orodje reši del izgubljenih virov. Reševalec izdela vse obrazce projekta in podatkovne module z vsemi dodeljenimi lastnostmi in dogodki. Postopki izdelanih dogodkov nimajo telesa (ni dekompirator), vendar imajo v izvršljivi datoteki naslov kode. V večini primerov reševalec prihrani 50-90% vašega časa za obnovo projekta.

DeDe je zelo hiter program, ki lahko analizira izvršljive datoteke, sestavljene z Delphi. Po dekompilaciji vam DeDe omogoči naslednje:

  • Vse dfm datoteke cilja. Z Delphi jih boste lahko odprli in uredili.
  • Vse objavljene metode v dobro komentirani ASM kodi s sklici na nizov, uvoženih klicev funkcij, klicev metode klicev, komponente v enoti, bloki Try-Except in Try-End. DeDe privzeto pridobi samo objavljene vire metod, lahko pa obdelate tudi drug postopek v izvršljivi datoteki, če poznate odmik RVA z orodji | Razstavite meni Proc.
  • Veliko dodatnih informacij.
  • Lahko ustvarite projektno mapo Delphi z vsemi datotekami dfm, pas, dpr. Opomba: pas datoteke vsebujejo omenjeno dobro komentirano kodo ASM. Ni jih mogoče ponovno sestaviti!
instagram story viewer