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 ...
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.
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ă originală.
Ingineria inversă poate fi folosită din mai multe motive, dintre care unele sunt:
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. 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 de interfață nu a fost pusă la dispoziție, în scopul corectării erorilor, în cazul în care proprietarul dreptului de autor nu este disponibil pentru a face corecția, pentru a determina părțile a programului care nu sunt protejate prin copyright. Desigur, ar trebui să fii 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 „Delphi compilate unitate” (.dcu) înapoi la codul sursă original (.pas).
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.
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. La crearea unui 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 acele modificări într-un fișier DFM (nu codul procedurii evenimentului - acesta este stocat în fișierul pas / dcu). Pentru a obține „dfm” din fișierul executabil, trebuie să înțelegem ce tip de resurse sunt stocate într-un executabil Win32.