Paprasčiau tariant, dekompiliacija yra atvirkštinė kompiliacija: vykdomojo failo vertimas į aukštesnio lygio kalbą.
Tarkime, kad prarandate „Delphi“ projekto šaltinį ir turite tik vykdomąjį failą: atvirkštinė inžinerija (dekompiliacija) naudinga, jei originalių šaltinių nėra.
Hm, „šaltinių nėra“, ar tai reiškia, kad galime dekompiliuoti kitų žmonių „Delphi“ projektus? Na, taip ir ne ...
Ar įmanoma tikras dekompiliacija?
Ne zinoma ne. Visiškai automatizuotas depiliavimas neįmanomas - joks dekompiliatorius negalėjo tiksliai atkurti pirminio šaltinio kodo.
Sudarant ir susiejant „Delphi“ projektą, kad būtų sukurtas atskiras vykdomasis failas, dauguma programoje naudojamų pavadinimų yra konvertuojami į adresus. Šis vardų praradimas reiškia, kad dekompiliatorius turės sukurti unikalius visų konstantų, kintamųjų, funkcijų ir procedūrų pavadinimus. Net ir pasiekus tam tikrą sėkmės laipsnį, sukurtame „šaltinio kode“ trūksta reikšmingų kintamųjų ir funkcijų pavadinimų.
Akivaizdu, kad vykdomojoje programoje šaltinio kalbos sintaksės nebėra. Dekompiliatoriui būtų labai sunku išaiškinti mašininės kalbos instrukcijų (ASM), esančių vykdomajame faile, serijas ir nuspręsti, kokia buvo pirminė šaltinio instrukcija.
Kodėl ir kada naudoti dekompiliaciją
Atvirkštinė inžinerija gali būti naudojama dėl kelių priežasčių, kai kurios iš jų:
- Pamesto šaltinio kodo atkūrimas
- Programų perkėlimas į naują aparatūros platformą
- Virusų ar kenkėjiškų kodų buvimo programoje nustatymas
- Klaidos taisymas, kai programos savininkas negali taisyti.
- Kieno nors šaltinio kodo atkūrimas (pavyzdžiui, norint nustatyti algoritmą).
Ar tai legalu?
Atvirkštinė inžinerija NĖRA įtrūkimai, nors kartais sunku nubrėžti tikslią liniją tarp šių dviejų. Kompiuterių programas saugo autorių teisių ir prekių ženklų įstatymai. Įvairiose šalyse yra skirtingos autorių teisių savininkų teisių išimtys. Dažniausiai teigiama, kad dekompiliuoti yra gerai: aiškinimo tikslais, kai dar nebuvo prieinama sąsajos specifikacija, klaidų taisymo tikslai, kai autorių teisių savininkas negali taisyti, nustatyti programos dalis, kurios nėra saugomos autorių teises. Žinoma, turėtumėte būti labai atsargūs / susisiekti su savo advokatu, jei abejojate, ar jums leidžiama išardyti kai kurių programų exe bylas.
Pastaba: jei ieškote „Delphi“ įtrūkimų, raktų generatorių ar tik serijos numerius: esate neteisingoje svetainėje. Atminkite, kad viskas, ką rasite čia, yra parašyta / pateikta tik tyrinėjimo / švietimo tikslais.
Šiuo metu „Borland“ nesiūlo jokio produkto, galinčio išskaidyti vykdomąjį (.exe) failą arba „Delphi sudarytą vienetą“ (.dcu) atgal į pradinį šaltinio kodą (.pas).
„Delphi“ sudarytas vienetas (DCU)
Kai „Delphi“ projektas sudaromas arba vykdomas, sukuriamas kompiliuoto vieneto (.pas) failas. Pagal numatytuosius nustatymus kiekvieno rinkinio kompiliuota versija saugoma atskirame dvejetainio formato faile tuo pačiu pavadinimu kaip ir rinkmenos faile, tačiau su plėtiniu .DCU. Pavyzdžiui, unit1.dcu yra kodas ir duomenys, deklaruoti faile unit1.pas.
Tai reiškia, kad, pavyzdžiui, jei turite ką nors, komponentų sudarytą šaltinį tereikia padaryti, kad jį pakeistumėte ir gautumėte kodą. Neteisinga. DCU failo formatas nėra dokumentų (patentuotas formatas) ir gali keistis iš vienos versijos į kitą.
Po kompiliatoriaus: „Delphi Reverse Engineering“
Jei norėtumėte pabandyti depiliuoti vykdomąjį failą „Delphi“, šiuos dalykus turėtumėte žinoti:
„Delphi“ programų šaltinio failai paprastai saugomi dviejų tipų failais: ASCII kodo failais (.pas, .dpr) ir išteklių failais (.res, .rc, .dfm, .dcr). DFM failuose yra detalių (savybių) apie objektus, esančius formoje. Kuriant egzekucija, „Delphi“ nukopijuoja informaciją .dfm failuose į baigtą .exe kodo failą. Formos failai apibūdina kiekvieną jūsų formos komponentą, įskaitant visų nuolatinių savybių reikšmes. Kiekvieną kartą keičiame formos vietą, mygtuko antraštę arba priskiriame įvykio procedūrą komponentui „Delphi“ rašo tas modifikacijas DFM faile (ne įvykio procedūros kodu - tai saugoma pas / dcu byla). Norėdami gauti „dfm“ iš vykdomojo failo, turime suprasti, kokio tipo ištekliai yra saugomi „Win32“ vykdomajame faile.
Visose „Delphi“ sudarytose programose yra šie skyriai: KODAS, DUOMENYS, BSS, .idata, tls, .rdata, .rsrc. Svarbiausi dekompiliavimo požiūriu yra skyriai CODE ir .rsrc. Viduje "Funkcionalumo pridėjimas prie „Delphi“ programos"Straipsnyje parodyta įdomių faktų apie vykdomų failų formatą„ Delphi ", klasės informaciją ir DFM išteklius: kaip iš naujo priskirti įvykius, kuriuos tvarkytų kiti toje pačioje formoje apibrėžti įvykių tvarkytojai. Dar daugiau: kaip pridėti savo įvykių tvarkyklę, pridedant kodą prie vykdomosios programos, kuri pakeis mygtuko antraštę.
Tarp daugelio išteklių, saugomų exe faile, rūšių, RT_RCDATA arba programos apibrėžtas šaltinis (pirminiai duomenys) saugo informaciją, kuri buvo DFM faile prieš kompiliaciją. Norėdami išgauti DFM duomenis iš exe failo, galime paskambinti „EnumResourceNames“ API funkcija... Norėdami gauti daugiau informacijos apie DFM ištraukimą iš vykdomojo failo, žiūrėkite: „Delphi DFM Explorer“ kodavimas straipsnis.
Atvirkštinės inžinerijos menas tradiciškai buvo techninių burtininkų kraštas, susipažinęs su surinkimo kalba ir derintuvais. Atsirado keletas „Delphi“ dekompiliatorių, leidžiančių kiekvienam, net ir turint ribotas technines žinias, pakeisti daugelį „Delphi“ vykdomųjų failų.
Jei jus domina atvirkštinės inžinerijos „Delphi“ programos, siūlau jums pažvelgti į šiuos kelis „dekompiliatorius“:
Vykdomųjų failų (EXE) ir dinaminės bibliotekos (DLL), parašytas Delphi ir vykdomas „Windows32“ aplinkoje. Galutinis projekto tikslas yra sukurti programą, galinčią atkurti didžiąją pradinio „Delphi“ dalį šaltiniai iš sudaryto failo, tačiau IDR, kaip ir kiti „Delphi“ dekompiliatoriai, to dar negali padaryti. Nepaisant to, IDR padėtis labai palengvina tokį procesą. Palyginti su kitais gerai žinomais Delphi dekompiliatoriais, IDR analizės rezultatas yra didžiausias išbaigtumas ir patikimumas.
„Revendepro“ suranda beveik visas programos struktūras (klases, tipus, procedūras ir tt) ir sukuria paskalų vaizdavimą, procedūros bus surašytos montuotoju. Dėl tam tikrų surinkėjo apribojimų sukurto išėjimo negalima perkompiliuoti. Šaltinis prie šio dekompiliatoriaus yra laisvai prieinamas. Deja, tai nėra vienintelis dekompiliatorius, kurio aš negalėjau naudoti - jis ragina su išimtimi, kai bandote depiliuoti kurį nors „Delphi“ vykdomąjį failą.
EMS Source Rescuer yra lengvai naudojama vedlio programa, kuri gali padėti atkurti prarastą šaltinio kodą. Jei prarandate „Delphi“ ar „C ++ Builder“ projekto šaltinius, bet turite vykdomąjį failą, šis įrankis gali išgelbėti dalį prarastų šaltinių. Gelbėtojas gamina visas projekto formas ir duomenų modulius su visomis priskirtomis ypatybėmis ir įvykiais. Sukurtos įvykių procedūros neturi kūno (tai nėra dekompiliatorius), tačiau vykdomojoje byloje turi kodo adresą. Daugeliu atvejų gelbėtojas sutaupo 50–90% savo laiko projekto atkūrimui.
„DeDe“ yra labai greita programa, galinti analizuoti vykdomuosius failus, sudarytus su „Delphi“. Po dekompiliavimo „DeDe“ suteikia jums:
- Visi taikinio dfm failai. Galėsite juos atidaryti ir redaguoti naudodamiesi „Delphi“.
- Visi paskelbti metodai yra gerai komentuojami ASM kodai su nuorodomis į stygas, importuotus funkcijų skambučius, klasių metodų skambučius, bloko komponentus, „Try-Except“ ir „Try-beidzot“ blokus. Pagal numatytuosius nustatymus „DeDe“ nuskaito tik paskelbtus metodų šaltinius, tačiau jūs taip pat galite apdoroti kitą vykdomosios programos procedūrą, jei žinote RVA poslinkį naudodami įrankius | Išardykite „Proc“ meniu.
- Daug papildomos informacijos.
- Galite sukurti „Delphi“ projekto aplanką su visais dfm, pas, dpr failais. Pastaba: pas failai turi minėtą gerai komentuojamą ASM kodą. Jų negalima perkompiliuoti!