Înțeles și utilizări ale decompilării

Simplu vorbind, decompilarea este inversul compilării: traducerea unui fișier executabil într-un limbaj de nivel superior.

Să presupunem că pierdeți sursa proiectului Delphi și aveți doar fișierul executabil: inginerie inversă (decompilare) este utilă dacă sursele originale nu sunt disponibile.

Hm, „surse care nu sunt disponibile”, asta înseamnă că putem decompila proiectele Delphi ale altor persoane? Ei bine, da și nu ...

Este posibilă decompilarea adevărată?

Nu, desigur că nu. Decompilarea complet automatizată nu este posibilă - niciun decompilator nu poate reproduce exact codul sursă original.

Când un proiect Delphi este compilat și conectat pentru a produce un fișier executabil autonom, majoritatea numelor utilizate în program sunt convertite în adrese. Această pierdere de nume înseamnă că un decompilator ar trebui să creeze nume unice pentru toate constantele, variabilele, funcțiile și procedurile. Chiar dacă se obține un anumit succes, „codul sursă” generat nu are nume semnificative de variabile și funcții.

instagram viewer

Evident, sintaxa limbajului sursă nu mai există în executabil. Ar fi foarte dificil pentru un decompilator să interpreteze seria de instrucțiuni de limbaj de mașină (ASM) care există într-un fișier executabil și să decidă care a fost instrucțiunea sursă inițială.

De ce și când se utilizează decompilarea

Ingineria inversă poate fi folosită din mai multe motive, dintre care unele sunt:

  • Recuperarea codului sursă pierdut
  • Migrarea aplicațiilor către o nouă platformă hardware
  • Determinarea existenței în program a virușilor sau a codului rău intenționat
  • Corecție de eroare atunci când proprietarul aplicației nu este disponibil pentru a face corectarea.
  • Recuperarea codului sursă al altcuiva (de exemplu, pentru a determina un algoritm).

Este legal?

Ingineria inversă NU este crăpată, deși uneori este dificil să tragi linia fină între cele două. Programele computerizate sunt protejate de legile privind drepturile de autor și mărcile comerciale. Diferite țări au excepții diferite de la drepturile deținătorului dreptului de autor. Cele mai obișnuite afirmă că este bine să decompilăm: în scopul interpretării, în cazul în care specificația interfeței nu a fost disponibilă, pentru scopuri de corectare a erorilor în care proprietarul dreptului de autor nu este disponibil pentru a efectua corectarea, pentru a determina părți ale programului care nu sunt protejate de drepturi de autor. Desigur, trebuie să fiți foarte atent / contactați avocatul dacă aveți îndoieli dacă aveți voie să dezasamblați fișierul exe al unui program.

Notă: dacă căutați fisuri Delphi, generatoare de chei sau doar numere de serie: sunteți pe site-ul greșit. Vă rugăm să rețineți că tot ce găsiți aici este scris / prezentat doar în scopuri de explorare / educație.

Pentru moment, Borland nu oferă niciun produs capabil să decompileze un fișier executabil (.exe) sau „Unitatea compilată Delphi” (.dcu) înapoi la codul sursă original (.pas).

Unitatea Compilată Delphi (DCU)

Când un proiect Delphi este compilat sau rulați un fișier de unitate compilat (.pas) este creat. În mod implicit, versiunea compilată a fiecărei unități este stocată într-un fișier de format binar separat cu același nume ca fișierul de unitate, dar cu extensia .DCU. De exemplu unit1.dcu conține codul și datele declarate în fișierul unit1.pas.

Acest lucru înseamnă că dacă aveți anumite date, de exemplu, sursa compilată pentru componente, tot ce trebuie să faceți este să o inversați și să obțineți codul. Gresit. Formatul de fișier DCU nu este documentat (format proprietar) și se poate schimba de la versiune la versiune.

După compilator: Delphi Reverse Engineering

Dacă doriți să încercați să decompilați un fișier executabil Delphi, acestea sunt câteva dintre lucrurile pe care ar trebui să le știți:

Fișierele sursă ale programelor Delphi sunt de obicei stocate în două tipuri de fișiere: fișiere cod ASCII (.pas, .dpr) și fișiere resursă (.res, .rc, .dfm, .dcr). Fișierele Dfm conțin detaliile (proprietățile) obiectelor conținute într-un formular. Când creați un exe, Delphi copiază informațiile în fișiere .dfm în fișierul de cod .exe finalizat. Fișierele de formular descriu fiecare componentă din formularul dvs., inclusiv valorile tuturor proprietăților persistente. De fiecare dată când schimbăm poziția unui formular, o legendă a unui buton sau alocăm o procedură de eveniment unei componente, Delphi scrie modificările într-un fișier DFM (nu codul procedurii evenimentului - acesta este stocat în pas / dcu fişier). Pentru a obține „dfm” din fișierul executabil, trebuie să înțelegem ce tip de resurse sunt stocate în interiorul unui executabil Win32.

Toate programele compilate de Delphi au următoarele secțiuni: COD, DATA, BSS, .idata, tls, .rdata, .rsrc. Cele mai importante din punct de vedere al decompilării sunt secțiunile CODE și .rsrc. În "Adăugarea funcționalității la un program Delphi"sunt prezentate câteva date interesante despre formatul executabil Delphi, informațiile despre clasă și resursele DFM: cum să reasignați evenimentele care vor fi gestionate de alți manageri de evenimente definiți în aceeași formă. Și mai mult: cum să adăugați propriul dvs. manager de evenimente, adăugând codul la executabil, care va schimba subtitrarea unui buton.

Printre multe tipuri de resurse care sunt stocate într-un fișier exe, RT_RCDATA sau resursa definită de aplicație (date brute) deține informațiile care au fost în fișierul DFM înainte de compilare. Pentru a extrage datele DFM dintr-un fișier exe, putem apela la EnumResourceNames Funcția API... Pentru mai multe informații despre extragerea DFM dintr-un executabil, consultați: Codarea unui explorator Delphi DFM articol.

Arta ingineriei inverse a fost în mod tradițional țara vrăjitorilor tehnici, familiarizați cu limbajul de asamblare și cu depanatoarele. Au apărut mai multe decompilatoare Delphi care permit oricui, chiar și cu cunoștințe tehnice limitate, să inverseze majoritatea fișierelor executabile Delphi.

Dacă sunteți interesat de programele Delphi de inginerie inversă, vă recomand să aruncați o privire la următoarele câteva „decompilatoare”:

Un decompilator de fișiere executabile (EXE) și biblioteci dinamice (DLL), scris în Delphi și executat în mediul Windows32. Obiectivul final al proiectului este dezvoltarea programului capabil să restabilească cea mai mare parte a Delphi inițiale coduri sursă din fișierul compilat, dar IDR, precum și alți decompilatori Delphi, nu o pot face încă. Cu toate acestea, IDR este într-un statut considerabil pentru a facilita acest proces. În comparație cu alte decompilatoare Delphi bine cunoscute, rezultatul analizei IDR are cea mai mare completitate și fiabilitate.

Revendepro găsește aproape toate structurile (clase, tipuri, proceduri etc.) în program și generează reprezentarea pascală, procedurile vor fi scrise în asamblator. Datorită unor limitări în asamblare, ieșirea generată nu poate fi recompilată. Sursa acestui decompilator este disponibilă gratuit. Din păcate, acesta este singurul decompilator pe care nu am putut să-l folosesc - solicită cu o excepție când încercați să decompilați un fișier executabil Delphi.

EMS Source Rescuer este o aplicație wizard ușor de utilizat, care vă poate ajuta să restaurați codul sursă pierdut. Dacă pierdeți sursele proiectului Delphi sau C ++ Builder, dar aveți un fișier executabil, atunci acest instrument poate salva o parte din surse pierdute. Rescuer produce toate formularele de proiect și modulele de date cu toate proprietățile și evenimentele alocate. Procedurile de evenimente produse nu au un corp (nu este un decompilator), dar au o adresă de cod în fișierul executabil. În cele mai multe cazuri, Salvatorul economisește 50-90% din timpul dvs. pentru restaurarea proiectelor.

DeDe este un program foarte rapid care poate analiza executabile compilate cu Delphi. După decompilare DeDe vă oferă următoarele:

  • Toate fișierele dfm ale țintei. Le vei putea deschide și edita cu Delphi.
  • Toate metodele publicate în cod ASM bine comentat, cu referiri la șiruri, apeluri funcționale importate, apeluri metode clase, componente din unitate, blocuri Try-Except și Try-Final. În mod implicit, DeDe preia doar sursele metodelor publicate, dar puteți, de asemenea, să procesați o altă procedură într-un executabil, dacă cunoașteți compensarea RVA folosind Instrumentele | Demontați meniul Proc.
  • Multe informații suplimentare.
  • Puteți crea un folder de proiect Delphi cu toate fișierele dfm, pas, dpr. Notă: fișierele pas conțin codul ASM menționat mai sus. Nu pot fi recompilate!