Dekompilering av Delphi (1/3)

Enkelt uttryckt är dekompilering den omvända kompilationen: översättning av en körbar fil till ett högre språk.

Anta att du tappar källan till ditt Delphi-projekt och att du bara har den körbara filen: reverse engineering (dekompilering) är användbart om de ursprungliga källorna inte är tillgängliga.

Hm, "källor inte tillgängliga", betyder det att vi kan dekompilera andras Delphi-projekt? Tja, ja och nej ...

Är sann dekompilering möjlig?

Nej, självklart inte. Helautomatisk dekompilering är inte möjlig - ingen dekompilerare kunde exakt reproducera den ursprungliga källkoden.

När ett Delphi-projekt sammanställs och länkas för att producera en fristående körbar fil konverteras de flesta av de namn som används i programmet till adresser. Denna förlust av namn betyder att en dekompilerare måste skapa unika namn för alla konstanter, variabler, funktioner och procedurer. Även om en viss framgångsgrad uppnås saknar den genererade "källkoden" meningsfulla variabla och funktionsnamn.
Uppenbarligen finns källspråkssyntax inte längre i körbara. Det skulle vara mycket svårt för en dekompilerare att tolka serien med maskinspråkinstruktioner (ASM) som finns i en körbar fil och bestämma vad den ursprungliga källinstruktionen var.

Varför och när man ska använda dekompilering

Omvänd teknik kan användas av flera skäl, varav några är:

  • Återställning av förlorad källkod
  • Migrering av applikationer till en ny hårdvaruplattform
  • Bestämning av förekomsten av virus eller skadlig kod i programmet
  • Felkorrigering när applikationsägaren inte är tillgänglig för att göra korrigeringen.
  • Återställning av någon annans källkod (för att fastställa en algoritm till exempel).

Är detta lagligt?

Omvänd teknik spricker INTE, även om det ibland är svårt att dra den fina linjen mellan dessa två. Datorprogram är skyddade av lagar om upphovsrätt och varumärken. Olika länder har olika undantag från upphovsrättsägarens rättigheter. De vanligaste uppger att det är ok att dekompilera: för tolkningsändamål där gränssnittets specifikation inte har gjorts tillgänglig, för felkorrigering där ägaren till upphovsrätten inte är tillgänglig för att göra korrigeringen, för att bestämma delar av programmet som inte är skyddat av upphovsrätt. Naturligtvis bör du vara mycket försiktig / kontakta din advokat om du är osäker på om du har tillåtelse att ta isär ett programs exe-fil.

Notera: om du letar efter Delphi-sprickor, nyckelgeneratorer eller bara serienummer: du är på fel webbplats. Kom ihåg att allt du hittar här är skrivet / presenterat för utforskning / utbildningsändamål.

För tillfället erbjuder Borland inte någon produkt som kan dekompilera en körbar (.exe) -fil eller "Delphi compiled unit" (.dcu) tillbaka till den ursprungliga källkoden (.pas).

Delphi Compiled Unit (DCU)

När ett Delphi-projekt kompileras eller körs skapas en kompilerad enhet (.pas) -fil. Som standard lagras den sammanställda versionen av varje enhet i en separat fil med binärt format med samma namn som enhetsfilen, men med tillägget .DCU. Till exempel innehåller unit1.dcu koden och data som deklareras i filen unit1.pas.

Detta innebär att om du har någon, till exempel komponentkompilerad källa, behöver du bara vända den och få koden. Fel. DCU-filformatet är odokumenterat (proprietärt format) och kan komma att ändras från version till version.

Efter kompilatorn: Delphi Reverse Engineering

Om du vill försöka dekompilera en körbar fil från Delphi är det några av de saker du bör veta:

Delphi-programkällfiler lagras vanligtvis i två filtyper: ASCII-kodfiler (.pas, .dpr) och resursfiler (.res, .rc, .dfm, .dcr). Dfm-filer innehåller detaljerna (egenskaperna) för de objekt som finns i ett formulär. När du skapar ett exe kopierar Delphi information i .dfm-filer till den färdiga .exe-kodfilen. Formfiler beskriver varje komponent i din form, inklusive värdena på alla bestående egenskaper. Varje gång vi ändrar en formulärs position, en knapps rubrik eller tilldelar en händelseprocedur till en komponent, skriver Delphi dessa ändringar i en DFM-fil (inte koden för händelseproceduren - detta lagras i pas / dcu-filen). För att få "dfm" från den körbara filen måste vi förstå vilken typ av resurser som finns lagrade i en Win32-körbar.