Server de informații pentru codurile sursă ale programatorilor din întreaga lume

Decompilare în Delphi

Citind forumurile de programare, uneori întâlniți o întrebare precum: "Am un program compilat pe Delphi, cum obțin codul sursă?". De obicei, o astfel de întrebare apare când programatorul a pierdut fișiere de proiect și a rămas doar .exe. De obicei, nu este posibilă restaurarea completă a codului sursă într-un limbaj de nivel înalt. Acest lucru înseamnă că și alții nu vor putea restabili codul sursă al programului dvs. Hmm. și da și nu.

În primul rând, voi spune imediat că este imposibil să restabiliți codul sursă exact așa cum a fost imposibil, deoarece nu există un astfel de decompilator în lume care ar putea crea acest lucru.

Când se aplică decompilarea. Există multe motive pentru acest lucru. Iată câteva dintre ele:
- Restaurați codul sursă;
- Transferați aplicația pe o altă platformă;
- Identificați prezența virușilor în codul programului sau codul rău intenționat;
- Corectarea erorilor în program, în cazul în care creatorul aplicației nu va face acest lucru :)

În prezent, Borland nu furnizează niciun produs software capabil să decomprime fișiere executabile (.exe) sau module Delphi (.dcu) compilate în cod sursă (.pas).

Dacă totuși ați decis să încercați să decompilați executabilul, atunci trebuie să știți următoarele lucruri. Codul sursă pentru Delphi este de obicei stocat în două tipuri de fișiere: sursa însăși în codare ASCII (.pas. Dpr) și fișiere de resurse (.res .Rc .Dfm.Dcr). Fișierele Dfm stochează proprietățile obiectelor conținute în formular. Când se creează fișierul .exe final, Delphi copiază informațiile din fișierele .dfm în el. De fiecare dată când modificăm coordonatele formei, descrierile butoanelor sau evenimentele asociate, Delphi scrie aceste modificări în .dfm (cu excepția codului procedurii, care este stocat în fișierele pas / dcu). În cele din urmă, pentru a obține un fișier .dfm în timpul decompilației, trebuie să știți ce tipuri de resurse sunt stocate în executabilul Win32.

Toate programele compilate în Delphi au următoarele secțiuni: CODE, DATE, BSS. idata, tls. rdata. Rsrc. Cel mai important pentru decompilarea secțiunilor CODE și .rsrc. Articolul "Adăugarea de funcționalități la un program Delphi" conține câteva informații interesante despre formatele Delphi executabile, precum și informații despre clasele și resursele DFM. În acest articol există un punct interesant sub titlul: "Cum să adăugați dispozitivul de tratare a evenimentului într-un fișier deja compilat, de exemplu, pentru a schimba textul de pe buton".

Dintre numeroasele tipuri de resurse stocate în fișierul .exe, RT_RCDATA este de interes, care stochează informațiile care erau în fișierul DFM înainte de difuzare. Pentru a extrage datele DFM dintr-un fișier .exe, putem apela API-ul prin funcția EnumResourceNames.

Arta decompilării a fost, în mod tradițional, o mulțime de maeștri care sunt familiarizați cu asamblorul și cu debuggerii. Unele decompilatoare Delphi dau impresia că oricine, chiar și cu cunoștințe tehnice limitate, poate schimba majoritatea executabililor Delphi după voință.

În cele din urmă, dacă sunteți interesat de decompilare, atunci vă sugerez câteva decompilatoare Delphi:

Revendepro
Revendepro găsește în program aproape toate structurile (clase, tipuri, proceduri etc.) și generează reprezentarea lor pascală, procedurile vor fi reprezentate în mod natural în limba de asamblare. Din păcate, codul de asamblare obținut nu poate fi recent compilat. De asemenea, este disponibilă sursa acestui decompilator. Din păcate, acest decompilator nu funcționează destul - generează o eroare la decompilare.

MRIP
Vă permite să extrageți toate resursele din aplicația Delphi: cursoare, pictograme, fișiere DFM, fișiere pas, etc. Dar principala sa caracteristică este capacitatea de a extrage fișierele stocate în alte fișiere. Suporta mai mult de 100 de formate de fisiere. MRip funcționează sub DOS.

Exe2Dpr
Acest program poate recupera sursele parțial pierdute ale proiectului. Nu are o interfață și funcționează din linia de comandă, de exemplu: 'exe2dpr [-o] exeFile' (codul sursă al proiectului va fi creat în directorul curent).







Trimiteți-le prietenilor: