Betekenis en gebruik van decompilatie

Simpel gezegd, decompilatie is het omgekeerde van compilatie: het vertalen van een uitvoerbaar bestand naar een hogere taal.

Stel dat u de bron van uw Delphi-project verliest en u alleen het uitvoerbare bestand heeft: reverse engineering (decompilatie) is handig als de originele bronnen niet beschikbaar zijn.

Hm, "bronnen niet beschikbaar", betekent dit dat we de Delphi-projecten van anderen kunnen decompileren? Nou ja en nee ...

Is echte decompilatie mogelijk?

Nee natuurlijk niet. Volledig geautomatiseerde decompilatie is niet mogelijk - geen enkele decompiler kan de originele broncode exact reproduceren.

Wanneer een Delphi-project wordt samengesteld en gekoppeld om een ​​zelfstandig uitvoerbaar bestand te produceren, worden de meeste namen die in het programma worden gebruikt, geconverteerd naar adressen. Dit verlies van namen betekent dat een decompiler unieke namen zou moeten maken voor alle constanten, variabelen, functies en procedures. Zelfs als een bepaalde mate van succes wordt behaald, mist de gegenereerde "broncode" betekenisvolle variabelen en functienamen.

instagram viewer

Het is duidelijk dat de syntaxis van de brontaal niet langer bestaat in het uitvoerbare bestand. Het zou voor een decompiler erg moeilijk zijn om de reeks machinetaalinstructies (ASM) in een uitvoerbaar bestand te interpreteren en te beslissen wat de oorspronkelijke broninstructie was.

Waarom en wanneer decompilatie gebruiken

Reverse engineering kan om verschillende redenen worden gebruikt, waaronder:

  • Herstel van verloren broncode
  • Migratie van applicaties naar een nieuw hardwareplatform
  • Bepaling van het bestaan ​​van virussen of kwaadaardige code in het programma
  • Foutcorrectie wanneer de eigenaar van de applicatie niet beschikbaar is om de correctie uit te voeren.
  • Herstel van de broncode van iemand anders (om bijvoorbeeld een algoritme te bepalen).

Is dit legaal?

Reverse engineering is GEEN kraak, hoewel het soms moeilijk is om de dunne lijn tussen die twee te trekken. Computerprogramma's zijn beschermd door copyright en handelsmerkwetten. Verschillende landen hebben verschillende uitzonderingen op de rechten van de auteursrechthebbende. De meest voorkomende zijn dat het ok is om te decompileren: met het oog op de interpreteerbaarheid wanneer de interfacespecificatie niet beschikbaar is gesteld, voor de doeleinden van foutcorrectie waarbij de eigenaar van het copyright niet beschikbaar is om de correctie uit te voeren, om delen van het programma te bepalen die niet worden beschermd door auteursrechten. Natuurlijk moet u heel voorzichtig zijn / contact opnemen met uw advocaat als u twijfelt of u het exe-bestand van een programma mag demonteren.

Notitie: als u op zoek bent naar Delphi-scheuren, sleutelgeneratoren of alleen serienummers: u bevindt zich op de verkeerde site. Houd er rekening mee dat alles wat u hier vindt alleen is geschreven / gepresenteerd voor verkennings- / educatieve doeleinden.

Momenteel biedt Borland geen enkel product aan dat een uitvoerbaar (.exe) bestand of de "door Delphi gecompileerde eenheid" (.dcu) kan decompileren naar de originele broncode (.pas).

Delphi gecompileerde eenheid (DCU)

Wanneer een Delphi-project wordt gecompileerd of wordt uitgevoerd, wordt een gecompileerd eenheidsbestand (.pas) gemaakt. Standaard wordt de gecompileerde versie van elke eenheid opgeslagen in een afzonderlijk binair formaatbestand met dezelfde naam als het eenheidsbestand, maar met de extensie .DCU. Unit1.dcu bevat bijvoorbeeld de code en gegevens die zijn gedeclareerd in het unit1.pas-bestand.

Dit betekent dat als je bijvoorbeeld iemand hebt, een component gecompileerde bron alles wat je hoeft te doen is het om te keren en de code op te halen. Mis. Het DCU-bestandsformaat is ongedocumenteerd (eigen formaat) en kan van versie naar versie veranderen.

Na de compiler: Delphi Reverse Engineering

Als u een uitvoerbaar Delphi-bestand wilt decompileren, zijn dit enkele dingen die u moet weten:

De bronbestanden van Delphi-programma's worden gewoonlijk opgeslagen in twee bestandstypen: ASCII-codebestanden (.pas, .dpr) en bronbestanden (.res, .rc, .dfm, .dcr). Dfm-bestanden bevatten de details (eigenschappen) van de objecten in een formulier. Bij het creëren een exe, Delphi kopieert informatie in .dfm-bestanden naar het voltooide .exe-codebestand. Formulierbestanden beschrijven elk onderdeel in uw formulier, inclusief de waarden van alle blijvende eigenschappen. Elke keer dat we de positie van een formulier wijzigen, het bijschrift van een knop of een gebeurtenisprocedure toewijzen aan een component, Delphi schrijft die wijzigingen in een DFM-bestand (niet de code van de gebeurtenisprocedure - dit wordt opgeslagen in de pas / dcu het dossier). Om de "dfm" uit het uitvoerbare bestand te halen, moeten we begrijpen wat voor soort bronnen zijn opgeslagen in een Win32-uitvoerbaar bestand.

Alle door Delphi samengestelde programma's hebben de volgende secties: CODE, DATA, BSS, .idata, tls, .rdata, .rsrc. Het belangrijkste vanuit het oogpunt van decompilatie zijn de secties CODE en .rsrc. In de "Functionaliteit toevoegen aan een Delphi-programma"artikel enkele interessante feiten over Delphi uitvoerbare bestanden formaat, klasse info en DFM bronnen worden getoond: hoe gebeurtenissen opnieuw toe te wijzen aan andere event handlers gedefinieerd in hetzelfde formulier. Sterker nog: hoe u uw eigen gebeurtenishandler toevoegt, de code aan het uitvoerbare bestand toevoegt, dat verandert het bijschrift van een knop.

Van de vele soorten bronnen die zijn opgeslagen in een exe-bestand, bevat de RT_RCDATA of de door de applicatie gedefinieerde bron (onbewerkte gegevens) de informatie die zich in het DFM-bestand bevond vóór de compilatie. Om de DFM-gegevens uit een exe-bestand te extraheren, kunnen we de EnumResourceNames API-functie... Ga voor meer informatie over het extraheren van DFM uit een uitvoerbaar bestand naar: Codering van een Delphi DFM-verkenner artikel.

De kunst van reverse engineering is van oudsher het land van technische wizards, bekend met assembleertaal en debuggers. Er zijn verschillende Delphi-decompilers verschenen waarmee iedereen, zelfs met beperkte technische kennis, de meeste uitvoerbare bestanden van Delphi kan reverse-engineeren.

Als u geïnteresseerd bent in Delphi-programma's voor reverse engineering, raad ik u aan de volgende paar "decompilers" te bekijken:

Een decompiler van uitvoerbare bestanden (EXE) en dynamische bibliotheken (DLL), geschreven in Delphi en uitgevoerd in een Windows32-omgeving. Het uiteindelijke projectdoel is de ontwikkeling van het programma dat in staat is het grootste deel van de oorspronkelijke Delphi te herstellen broncodes van het gecompileerde bestand, maar IDR, evenals andere Delphi-decompilers, kunnen het nog niet doen. Desalniettemin heeft IDR een aanzienlijke status om een ​​dergelijk proces te vergemakkelijken. In vergelijking met andere bekende Delphi-decompilers heeft het resultaat van IDR-analyse de grootste volledigheid en betrouwbaarheid.

Revendepro vindt bijna alle structuren (klassen, typen, procedures, enz.) In het programma en genereert de pascal-representatie, procedures zullen in assembler worden geschreven. Vanwege enige beperking in de assembler kan de gegenereerde uitvoer niet opnieuw worden gecompileerd. De bron voor deze decompiler is vrij beschikbaar. Helaas is dit de enige decompiler die ik niet kon gebruiken - het vraagt ​​om een ​​uitzondering wanneer je een uitvoerbaar Delphi-bestand probeert te decompileren.

EMS Source Rescuer is een eenvoudig te gebruiken wizard-applicatie die u kan helpen uw verloren broncode te herstellen. Als u uw Delphi- of C ++ Builder-projectbronnen kwijtraakt, maar een uitvoerbaar bestand heeft, kan deze tool een deel van verloren bronnen redden. Redder produceert alle projectvormen en gegevensmodules met alle toegewezen eigenschappen en gebeurtenissen. Geproduceerde gebeurtenisprocedures hebben geen body (het is geen decompiler), maar hebben een adres van code in een uitvoerbaar bestand. In de meeste gevallen bespaart de redder 50-90% van uw tijd aan projectherstel.

DeDe is een zeer snel programma dat uitvoerbare bestanden kan analyseren die met Delphi zijn samengesteld. Na decompilatie geeft DeDe je het volgende:

  • Alle dfm-bestanden van het doel. Je kunt ze openen en bewerken met Delphi.
  • Alle gepubliceerde methoden in ASM-code met veel commentaar met verwijzingen naar tekenreeksen, geïmporteerde functieaanroepen, klassenmethodeaanroepen, componenten in de eenheid, Try-Except- en Try-Tens-blokken. Standaard haalt DeDe alleen de bronnen van gepubliceerde methoden op, maar u kunt ook een andere procedure in een uitvoerbaar bestand verwerken als u de RVA-offset kent met behulp van Tools | Demonteer Proc-menu.
  • Veel aanvullende informatie.
  • U kunt een Delphi-projectmap maken met alle dfm-, pas- en dpr-bestanden. Opmerking: pas-bestanden bevatten de bovengenoemde, goed becommentarieerde ASM-code. Ze kunnen niet opnieuw worden samengesteld!
instagram story viewer