Delphi decompileren (1/3)

Eenvoudig gezegd is decompilatie het omgekeerde van compilatie: een uitvoerbaar bestand vertalen naar een taal op een hoger niveau.

Stel dat u de bron van uw Delphi-project verliest en u alleen het uitvoerbare bestand hebt: 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 gecompileerd 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 moet maken voor alle constanten, variabelen, functies en procedures. Zelfs als een bepaalde mate van succes wordt bereikt, mist de gegenereerde "broncode" betekenisvolle variabele en functienamen.
Het is duidelijk dat de syntaxis van de brontaal niet langer bestaat in het uitvoerbare bestand. Het zou heel moeilijk zijn voor een decompiler 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 schadelijke code in het programma
  • Foutcorrectie wanneer de eigenaar van de toepassing 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 kraakt NIET, hoewel het soms moeilijk is om de dunne lijn tussen die twee te trekken. Computerprogramma's worden beschermd door auteursrechten en handelsmerken. Verschillende landen hebben verschillende uitzonderingen op de rechten van de auteursrechteigenaar. De meest voorkomende zijn dat het ok is om te decompileren: met het oog op interpreteerbaarheid wanneer de interfacespecificatie niet beschikbaar is gesteld, met het oog op foutcorrectie waarbij de eigenaar van het auteursrecht niet beschikbaar is om de correctie te maken, om onderdelen te bepalen van het programma dat niet auteursrechtelijk is beschermd. 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, sleutelgenerators 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 exploratie / educatieve doeleinden.

Op dit moment biedt Borland geen producten die in staat zijn een uitvoerbaar bestand (.exe) of de "Delphi gecompileerde eenheid" (.dcu) te decompileren naar de oorspronkelijke broncode (.pas).

Delphi Compiled Unit (DCU)

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

Dit betekent dat als je bijvoorbeeld iemand hebt die een component-gecompileerde bron is, je deze alleen hoeft om te keren en de code te krijgen. Mis. Het DCU-bestandsformaat is ongedocumenteerd (eigen formaat) en kan van versie naar versie veranderen.

Na de compiler: Delphi Reverse Engineering

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

Bronbestanden van Delphi-programma's worden meestal in twee bestandstypen opgeslagen: ASCII-codebestanden (.pas, .dpr) en bronbestanden (.res, .rc, .dfm, .dcr). Dfm-bestanden bevatten de details (eigenschappen) van de objecten in een formulier. Bij het maken van een exe kopieert Delphi informatie in .dfm-bestanden naar het voltooide .exe-codebestand. Formulierbestanden beschrijven elke component in uw formulier, inclusief de waarden van alle permanente eigenschappen. Telkens wanneer we de positie van een formulier, het bijschrift van een knop wijzigen of een gebeurtenisprocedure aan een component toewijzen, schrijft Delphi die wijzigingen in een DFM-bestand (niet de code van de gebeurtenisprocedure - dit wordt opgeslagen in het pas / dcu-bestand). Om de "dfm" van het uitvoerbare bestand te krijgen, moeten we weten welk type bronnen zijn opgeslagen in een Win32-uitvoerbaar bestand.