Betydning og anvendelser af dekompilering

Enkelt sagt er dekompilering det inverse af kompilering: oversættelse af en eksekverbar fil til et højere niveau sprog.

Antag, at du mister dit Delphi-projektets kilde, og at du kun har den eksekverbare fil: reverse engineering (dekompilering) er nyttig, hvis de originale kilder ikke er tilgængelige.

Hm, "kilder ikke tilgængelige", betyder det, at vi kan dekompilere andres Delphi-projekter? Nå, ja og nej ...

Er sand dekompilering mulig?

Nej selvfølgelig ikke. Fuld automatiseret dekompilering er ikke mulig - ingen dekompilator kunne nøjagtigt gengive den originale kildekode.

Når et Delphi-projekt er samlet og linket til at producere en fristående eksekverbar fil, konverteres de fleste af de navne, der er brugt i programmet, til adresser. Dette tab af navne betyder, at en dekompilator skulle skabe unikke navne på alle konstanter, variabler, funktioner og procedurer. Selv hvis der opnås en vis grad af succes, mangler den genererede "kildekode" meningsrige variabel- og funktionsnavne.
Det er klart, at kildesprogssyntax ikke længere findes i eksekverbar. Det ville være meget vanskeligt for en decompiler at fortolke serien med maskinsproginstruktioner (ASM), der findes i en eksekverbar fil og beslutte, hvad den originale kildeanvisning var.

instagram viewer

Hvorfor og hvornår man skal bruge dekompilering

Reverse engineering kan bruges af flere årsager, hvoraf nogle er:

  • Gendannelse af mistet kildekode
  • Migrering af applikationer til en ny hardwareplatform
  • Bestemmelse af eksistensen af ​​vira eller ondsindet kode i programmet
  • Fejlkorrektion, når ejeren af ​​applikationen ikke er tilgængelig til at foretage korrektionen.
  • Gendannelse af en andens kildekode (for at bestemme en algoritme for eksempel).

Er dette lovligt?

Reverse engineering er IKKE revnet, selvom det undertiden er vanskeligt at trække den fine linje mellem disse to. Computerprogrammer er beskyttet af lov om ophavsret og varemærker. Forskellige lande har forskellige undtagelser fra ophavsretsejers rettigheder. De mest almindelige siger, at det er ok at dekompilere: med henblik på fortolkbarhed, hvor grænsefladespecifikationen ikke er gjort tilgængelig, for med henblik på fejlkorrektion, hvor ejeren af ​​ophavsretten ikke er tilgængelig til at foretage korrektionen, til at bestemme dele af programmet, der ikke er beskyttet af ophavsret. Selvfølgelig skal du være meget forsigtig / kontakte din advokat, hvis du er i tvivl om du har tilladelse til at adskille programmets exe-fil.

Bemærk: Hvis du leder efter Delphi-revner, nøglegeneratorer eller bare serienumre: du er på det forkerte sted. Husk, at alt, hvad du finder her, kun er skrevet / præsenteret til udforskning / uddannelsesmæssige formål.

For øjeblikket tilbyder Borland ikke noget produkt, der er i stand til at dekompilere en eksekverbar (.exe) -fil eller "Delphi-kompileret enhed" (.dcu) tilbage til den originale kildekode (.pas).

Delphi Compiled Unit (DCU)

Når et Delphi-projekt kompileres eller køres, oprettes en compiled unit (.pas) -fil. Som standard gemmes den kompilerede version af hver enhed i en separat fil med binært format med samme navn som enhedsfilen, men med udvidelsen .DCU. F.eks. Indeholder unit1.dcu koden og data, der er deklareret i filen unit1.pas.

Dette betyder, at hvis du har nogle, f.eks. Komponentkompileret kilde, skal du bare gøre at vende den og hente koden. Forkert. DCU-filformatet er udokumenteret (proprietært format) og kan ændre sig fra version til version.

Efter kompilatoren: Delphi Reverse Engineering

Hvis du gerne vil prøve at dekompilere en Delphi-eksekverbar fil, er dette nogle af de ting, du skal vide:

Delphi-programmer kildefiler gemmes normalt i to filtyper: ASCII-kodefiler (.pas, .dpr) og ressourcefiler (.res, .rc, .dfm, .dcr). Dfm-filer indeholder detaljerne (egenskaber) for objekterne i en form. Når du opretter en exe, Delphi kopierer oplysninger i .dfm-filer til den færdige .exe-kodefil. Formularfiler beskriver hver komponent i din form, inklusive værdierne for alle vedvarende egenskaber. Hver gang vi ændrer en forms placering, en knappes billedtekst eller tildeler en hændelsesprocedure til en komponent, Delphi skriver disse ændringer i en DFM-fil (ikke koden til hændelsesproceduren - dette gemmes i pas / dcu fil). For at få "dfm" fra den eksekverbare fil er vi nødt til at forstå, hvilken type ressourcer der er gemt i en Win32-eksekverbar.

Alle programmer udarbejdet af Delphi har følgende sektioner: CODE, DATA, BSS, .idata, tls, .rdata, .rsrc. Det vigtigste set fra dekompilering er synspunktet CODE og .rsrc. I "Tilføjelse af funktionalitet til et Delphi-program"artiklen viser nogle interessante fakta om Delphi-eksekverbare formater, klasseinfo og DFM-ressourcer: hvordan tildeles nye begivenheder, der skal håndteres af andre begivenhedshåndterere, der er defineret i samme form. Endnu mere: hvordan du tilføjer din egen begivenhedshåndterer, tilføjer koden til den eksekverbare, der ændrer billedtekst på en knap.

Blandt mange typer ressourcer, der er gemt i en exe-fil, indeholder RT_RCDATA eller den applikationsdefinerede ressource (rå data) de oplysninger, der var i DFM-filen inden kompilering. For at udtrække DFM-data fra en exe-fil kan vi kalde EnumResourceNames API-funktion... For mere information om udpakning af DFM fra en eksekverbar, se: Koder for en Delphi DFM-udforsker genstand.

Kunsten til omvendt teknik har traditionelt været landets tekniske troldmænd, kendt med samlingssprog og debuggers. Flere Delphi-dekompilatorer er dukket op, som tillader nogen, selv med begrænset teknisk viden, at vende engineering af de fleste Delphi-eksekverbare filer.

Hvis du er interesseret i reverse engineering Delphi-programmer, foreslår jeg dig at tage et kig på følgende par "dekompilatorer":

En decompiler af eksekverbare filer (EXE) og dynamiske biblioteker (DLL), skrevet i Delphi og udført i Windows32-miljø. Det endelige projektmål er udvikling af programmet, der er i stand til at gendanne det meste af det første Delphi kildekoder fra den kompilerede fil, men IDR såvel som andre Delphi-dekompilatorer kan ikke gøre det endnu. Ikke desto mindre er IDR i en status betydeligt for at lette en sådan proces. Sammenlignet med andre velkendte Delphi-dekompilatorer har resultatet af IDR-analyse den største komplethed og pålidelighed.

Revendepro finder næsten alle strukturer (klasser, typer, procedurer osv.) I programmet, og genererer den pascale repræsentation, procedurer vil blive skrevet i samleren. På grund af en vis begrænsning i samleren kan den genererede output ikke komprimeres igen. Kilden til denne decompiler er frit tilgængelig. Desværre er dette den eneste decompiler, som jeg ikke kunne bruge - den beder med en undtagelse, når du prøver at dekompilere nogle af Delphi-eksekverbare filer.

EMS Source Rescuer er et brugervenligt guide-program, der kan hjælpe dig med at gendanne din mistede kildekode. Hvis du mister dine Delphi- eller C ++ Builder-projektkilder, men har en eksekverbar fil, kan dette værktøj redde en del af mistede kilder. Redningsmand fremstiller alle projektformer og datamoduler med alle tildelte egenskaber og begivenheder. Fremstillede hændelsesprocedurer har ikke et organ (det er ikke en decompiler), men har en kodeadresse i en eksekverbar fil. I de fleste tilfælde sparer Rescuer 50-90% af din tid til projektgendannelse.

DeDe er et meget hurtigt program, der kan analysere eksekverbare filer udarbejdet med Delphi. Efter dekompilering giver DeDe dig følgende:

  • Alle dfm-filer af målet. Du vil være i stand til at åbne og redigere dem med Delphi.
  • Alle offentliggjorte metoder i godt kommenteret ASM-kode med henvisninger til strenge, importerede funktionsopkald, klassemetoderopkald, komponenter i enheden, Try-Except og Try-End-blokke. Som standard henter DeDe kun de offentliggjorte metodekilder, men du kan også behandle en anden procedure i en eksekverbar, hvis du kender RVA-forskydningen ved hjælp af Værktøjer | Demonter Proc-menuen.
  • En masse yderligere oplysninger.
  • Du kan oprette en Delphi-projektmappe med alle dfm-, pas-, dpr-filer. Bemærk: pas-filer indeholder ovennævnte godt kommenterede ASM-kode. De kan ikke genkompileres!
instagram story viewer