Značenje i upotreba dekompilacije

Jednostavno rečeno, dekompilacija je obrnuto sastavljanje: prevođenje izvršne datoteke u jezik više razine.

Pretpostavimo da izgubite izvor projekta Delphi i imate samo izvršnu datoteku: obrnuti inženjering (dekompilacija) je koristan ako izvorni izvori nisu dostupni.

Hm, "izvori nisu dostupni", znači li to da možemo dekompilirati Delphi projekte drugih ljudi? Pa, da i ne ...

Je li moguća istinska dekompilacija?

Ne, naravno da ne. Potpuno automatizirana dekompilacija nije moguća - nijedan dekompiler ne može točno reproducirati izvorni izvorni kod.

Kada se Delphi projekt sastavi i poveže za proizvodnju samostalne izvršne datoteke, većina imena koja se koriste u programu pretvaraju se u adrese. Ovaj gubitak imena znači da bi dekompiler trebao stvoriti jedinstvena imena za sve konstante, varijable, funkcije i postupke. Čak i ako se postigne određeni stupanj uspjeha, generiranom "izvornom kodu" nedostaje smislena imena varijabli i funkcija.
Očito sintaksa izvornog jezika više ne postoji u izvršnoj datoteci. Dekompileru bi bilo vrlo teško interpretirati niz strojnih jezičnih uputa (ASM) koje postoje u izvršnoj datoteci i odlučiti koja je izvorna uputa izvora.

instagram viewer

Zašto i kada koristiti dekompilaciju

Obrnuti inženjering može se koristiti iz nekoliko razloga, od kojih su neki:

  • Oporavak izgubljenog izvornog koda
  • Migracija aplikacija na novu hardversku platformu
  • Utvrđivanje postojanja virusa ili zlonamjernog koda u programu
  • Ispravljanje pogreške kada vlasnik aplikacije nije dostupan za ispravak.
  • Oporavak tuđeg izvornog koda (na primjer za određivanje algoritma).

Je li to legalno?

Obrnuti inženjering NE pukne, iako je ponekad teško povući tanku liniju između ta dva. Računalni programi zaštićeni su zakonima o autorskim pravima i zaštitnim znakovima. Različite zemlje imaju različite iznimke od prava vlasnika autorskih prava. Najčešći navodi da je u redu dekompilirati: u svrhu tumačenja tamo gdje specifikacija sučelja nije dostupna, za svrhe ispravljanja pogrešaka kada vlasnik autorskih prava nije dostupan za ispravak, odrediti dijelove programa koji nisu zaštićeni autorsko pravo. Naravno da biste trebali biti vrlo oprezni / obratite se svom odvjetniku ako sumnjate imate li mogućnost rastavljanja exe datoteke nekog programa.

Bilješka: ako tražite pukotine Delphija, generatore ključeva ili samo serijske brojeve: na pogrešnom ste mjestu. Imajte na umu da je sve što ovdje pronađete napisano / predstavljeno samo u istraživačke / obrazovne svrhe.

Za sada Borland ne nudi nijedan proizvod koji bi mogao dekomponirati izvršnu (.exe) datoteku ili "Delphi sastavljenu jedinicu" (.dcu) natrag u izvorni izvorni kod (.pas).

Delphi sastavljena jedinica (DCU)

Kada se Delphi projekt sastavi ili pokrene sastavljena jedinica (.pas) datoteke. Prema zadanim postavkama, sastavljena verzija svake jedinice pohranjuje se u zasebnu datoteku binarnog formata s istim nazivom kao i jedinična datoteka, ali s ekstenzijom .DCU. Na primjer unit1.dcu sadrži kôd i podatke deklarirane u datoteci unit1.pas.

To znači da ako imate neke, na primjer, komponentni izvor sastavljen, sve što trebate učiniti je preokrenuti i dobiti kôd. Pogrešno. Format datoteke DCU nije dokumentiran (vlasnički format) i može se mijenjati od verzije do verzije.

Nakon sastavljača: Delphi Reverse Engineering

Ako želite pokušati dekompilirati izvršnu datoteku Delphi, to su neke od stvari koje biste trebali znati:

Izvorne datoteke programa Delphi obično se pohranjuju u dvije vrste datoteka: datoteke ASCII kodova (.pas, .dpr) i datoteke resursa (.res, .rc, .dfm, .dcr). Dfm datoteke sadrže detalje (svojstva) objekata sadržanih u obrascu. Prilikom stvaranja exe, Delphi kopira podatke u .dfm datoteke u gotovu datoteku .exe. Datoteke obrasca opisuju svaku komponentu vašeg obrasca, uključujući vrijednosti svih trajnih svojstava. Svaki put kad promijenimo položaj obrasca, naslov gumba ili dodijelimo postupak događaju komponenti, Delphi upisuje te izmjene u DFM datoteku (a ne kod postupka događaja - pohranjuje se u pas / dcu datoteka). Da bismo dobili "dfm" iz izvršne datoteke, moramo razumjeti kakvu vrstu resursa pohranjujemo u izvršnu Win32 izvedbu.

Svi programi koje je sastavio Delphi imaju sljedeće odjeljke: CODE, DATA, BSS, .idata, tls, .rdata, .rsrc. Najvažniji sa stajališta dekompliciranja su odjeljci CODE i .rsrc. U odjeljku "Dodavanje funkcionalnosti u Delphi program"u članku su prikazane neke zanimljive činjenice o formatu izvršnih datoteka u Delphiju, informacijama o klasi i izvorima DFM-a: kako dodijeliti događaje kojima će se rukovati drugi rukovatelji događajima definirani u istom obliku. Još više: kako dodati svoj priručnik događaja, dodavanje koda izvršnom dokumentu, a to će promijeniti naslov gumba.

Među mnogim vrstama resursa koji su pohranjeni u exe datoteci, RT_RCDATA ili resurs definiran aplikacijom (neobrađeni podaci) sadrže podatke koji su bili u DFM datoteci prije kompilacije. Da bismo izdvojili DFM podatke iz exe datoteke koju možemo nazvati EnumResourceNames API funkcija... Za više informacija o izdvajanju DFM-a iz izvršne datoteke pogledajte: Kodiranje istraživača Delphi DFM članak.

Umjetnost obrnutog inženjerstva tradicionalno je bila zemlja tehničkih čarobnjaka, upoznata s jezikom montaže i programima za uklanjanje pogrešaka. Pojavilo se nekoliko Delphi dekompilera koji omogućuju bilo kome, čak i s ograničenim tehničkim znanjem, obrnuti inženjering većine Delphijevih izvršnih datoteka.

Ako vas zanimaju obrnuti inženjering programi Delphi, predlažem vam da pogledate sljedećih nekoliko "dekompilera":

Dekompiler izvršnih datoteka (EXE) i dinamičke knjižnice (DLL), napisano u Delphiju i izvedeno u Windows32 okruženju. Konačni cilj projekta je razvoj programa sposobnog da obnovi najveći dio početnih Delphija izvorni kodovi iz sastavljene datoteke, ali IDR, kao i drugi Delphi dekompilatori, to još ne mogu. Bez obzira na to, IDR je u značajnom stanju koji olakšava takav postupak. U usporedbi s drugim dobro poznatim Delphi dekompilerima, rezultat IDR analize ima najveću cjelovitost i pouzdanost.

Revendepro pronalazi gotovo sve strukture (klase, vrste, postupke itd.) U programu i generira pascal reprezentaciju, procedure će biti napisane u alata za sklapanje. Zbog nekih ograničenja u alata za sklapanje, generirani izlaz se ne može ponovno sastaviti. Izvor ovog decompilera je slobodno dostupan. Nažalost, ovo je jedini dekompiler koji nisam uspio upotrijebiti - zahtijeva se iznimka kada pokušate dekompilirati neku izvedenu datoteku Delphija.

EMS Source Rescuer čarobnjak je jednostavan za korištenje program koji vam može pomoći da vratite izgubljeni izvorni kod. Ako izgubite izvore projekta Delphi ili C ++ Builder, ali imate izvršnu datoteku, tada ovaj alat može spasiti dio izgubljenih izvora. Spasitelj proizvodi sve obrasce projekta i podatkovne module sa svim dodijeljenim svojstvima i događajima. Izrađeni postupci događaja nemaju tijelo (nije dekompiler), već imaju adresu koda u izvršnoj datoteci. U većini slučajeva Spasitelj štedi 50-90% vašeg vremena za obnovu projekata.

DeDe je vrlo brz program koji može analizirati izvršne datoteke sastavljene s Delphi. Nakon dekompilacije DeDe vam daje sljedeće:

  • Sve dfm datoteke cilja. Moći ćete ih otvoriti i urediti pomoću Delphija.
  • Sve objavljene metode u dobro komentiranom ASM kodu s referencama na žice, uvezene pozive funkcija, pozive metoda klasa, komponente u jedinici, blokove Try-Except i Try-End. DeDe prema zadanim postavkama dohvaća samo izvore objavljenih metoda, ali možete izvršiti i drugi postupak u izvršnom dokumentu ako znate odstupanje RVA-a pomoću alata | Rastavite izbornik Proc.
  • Puno dodatnih informacija.
  • Možete stvoriti mapu projekta Delphi sa svim dfm, pas, dpr datotekama. Napomena: pas datoteke sadrže spomenuti ASM kod. Ne mogu se prekompolirati!
instagram story viewer