Bedeutung und Verwendung der Dekompilierung

Dekompilierung ist einfach das Gegenteil von Kompilierung: Übersetzen einer ausführbaren Datei in eine höhere Sprache.

Angenommen, Sie verlieren die Quelle Ihres Delphi-Projekts und haben nur die ausführbare Datei: Reverse Engineering (Dekompilierung) ist nützlich, wenn die Originalquellen nicht verfügbar sind.

Hm, "Quellen nicht verfügbar", bedeutet dies, dass wir die Delphi-Projekte anderer Leute dekompilieren können? Nun ja und nein ...

Ist echte Dekompilierung möglich?

Nein natürlich nicht. Eine vollautomatische Dekompilierung ist nicht möglich - kein Dekompiler konnte den ursprünglichen Quellcode exakt reproduzieren.

Wenn ein Delphi-Projekt kompiliert und verknüpft wird, um eine eigenständige ausführbare Datei zu erstellen, werden die meisten im Programm verwendeten Namen in Adressen konvertiert. Dieser Verlust von Namen bedeutet, dass ein Dekompiler eindeutige Namen für alle Konstanten, Variablen, Funktionen und Prozeduren erstellen muss. Selbst wenn ein gewisser Erfolg erreicht wird, fehlen dem generierten "Quellcode" aussagekräftige Variablen- und Funktionsnamen.

instagram viewer

Offensichtlich ist die Syntax der Quellsprache in der ausführbaren Datei nicht mehr vorhanden. Für einen Dekompiler wäre es sehr schwierig, die in einer ausführbaren Datei vorhandene Reihe von Maschinensprachenanweisungen (ASM) zu interpretieren und zu entscheiden, wie die ursprüngliche Quellanweisung lautete.

Warum und wann die Dekompilierung verwendet werden soll

Reverse Engineering kann aus verschiedenen Gründen eingesetzt werden. Einige davon sind:

  • Wiederherstellung des verlorenen Quellcodes
  • Migration von Anwendungen auf eine neue Hardwareplattform
  • Feststellung des Vorhandenseins von Viren oder bösartigem Code im Programm
  • Fehlerkorrektur, wenn der Eigentümer der Anwendung für die Korrektur nicht verfügbar ist.
  • Wiederherstellung des Quellcodes einer anderen Person (um beispielsweise einen Algorithmus zu bestimmen).

Ist das legal?

Reverse Engineering ist NICHT rissig, obwohl es manchmal schwierig ist, die feine Linie zwischen diesen beiden zu ziehen. Computerprogramme sind urheber- und markenrechtlich geschützt. Verschiedene Länder haben unterschiedliche Ausnahmen von den Rechten des Urheberrechtsinhabers. Die gebräuchlichsten besagen, dass eine Dekompilierung in Ordnung ist: zum Zwecke der Interpretierbarkeit, wenn die Schnittstellenspezifikation nicht verfügbar gemacht wurde, für die Zwecke der Fehlerkorrektur, bei denen der Inhaber des Urheberrechts nicht zur Verfügung steht, um die Korrektur vorzunehmen, um Teile des Programms zu bestimmen, die nicht durch geschützt sind Urheberrechte ©. Natürlich sollten Sie sehr vorsichtig sein / Ihren Anwalt kontaktieren, wenn Sie Zweifel haben, ob Sie die Exe-Datei eines Programms zerlegen dürfen.

Hinweis: Wenn Sie nach Delphi-Rissen, Schlüsselgeneratoren oder nur nach Seriennummern suchen: Sie befinden sich an der falschen Stelle. Bitte beachten Sie, dass alles, was Sie hier finden, nur zu Erkundungs- / Bildungszwecken geschrieben / präsentiert wird.

Derzeit bietet Borland kein Produkt an, mit dem eine ausführbare Datei (.exe) oder die "Delphi-kompilierte Einheit" (.dcu) wieder auf den ursprünglichen Quellcode (.pas) dekompiliert werden kann.

Delphi Compiled Unit (DCU)

Wenn ein Delphi-Projekt kompiliert oder ausgeführt wird, wird eine kompilierte Unit-Datei (.pas) erstellt. Standardmäßig wird die kompilierte Version jeder Einheit in einer separaten Datei im Binärformat mit demselben Namen wie die Einheitendatei, jedoch mit der Erweiterung .DCU gespeichert. Zum Beispiel enthält unit1.dcu den Code und die Daten, die in der Datei unit1.pas deklariert sind.

Dies bedeutet, dass Sie, wenn Sie beispielsweise eine kompilierte kompilierte Quelle haben, diese nur umkehren und den Code abrufen müssen. Falsch. Das DCU-Dateiformat ist nicht dokumentiert (proprietäres Format) und kann sich von Version zu Version ändern.

Nach dem Compiler: Delphi Reverse Engineering

Wenn Sie versuchen möchten, eine ausführbare Delphi-Datei zu dekompilieren, sollten Sie Folgendes wissen:

Quelldateien von Delphi-Programmen werden normalerweise in zwei Dateitypen gespeichert: ASCII-Codedateien (.pas, .dpr) und Ressourcendateien (.res, .rc, .dfm, .dcr). Dfm-Dateien enthalten die Details (Eigenschaften) der in einem Formular enthaltenen Objekte. Beim Erstellen eine exe, Delphi kopiert Informationen in .dfm-Dateien in die fertige .exe-Codedatei. Formulardateien beschreiben jede Komponente in Ihrem Formular, einschließlich der Werte aller persistenten Eigenschaften. Jedes Mal, wenn wir die Position eines Formulars oder die Beschriftung einer Schaltfläche ändern oder einer Komponente, Delphi, eine Ereignisprozedur zuweisen schreibt diese Änderungen in eine DFM-Datei (nicht den Code der Ereignisprozedur - diese wird im pas / dcu gespeichert Datei). Um das "dfm" aus der ausführbaren Datei zu erhalten, müssen wir verstehen, welche Art von Ressourcen in einer ausführbaren Win32-Datei gespeichert sind.

Alle von Delphi kompilierten Programme haben die folgenden Abschnitte: CODE, DATA, BSS, .idata, tls, .rdata, .rsrc. Die aus Sicht der Dekompilierung wichtigsten sind die Abschnitte CODE und .rsrc. In dem "Hinzufügen von Funktionen zu einem Delphi-Programm"Artikel Einige interessante Fakten über das Format der ausführbaren Delphi-Dateien, Klasseninformationen und DFM-Ressourcen werden gezeigt: Wie werden Ereignisse neu zugewiesen, die von anderen in derselben Form definierten Ereignishandlern behandelt werden sollen. Noch mehr: Wie Sie Ihren eigenen Ereignishandler hinzufügen und den Code zur ausführbaren Datei hinzufügen, um die Beschriftung einer Schaltfläche zu ändern.

Unter vielen Arten von Ressourcen, die in einer exe-Datei gespeichert sind, enthält die RT_RCDATA oder die anwendungsdefinierte Ressource (Rohdaten) die Informationen, die vor der Kompilierung in der DFM-Datei enthalten waren. Um die DFM-Daten aus einer exe-Datei zu extrahieren, können wir die aufrufen EnumResourceNames API-Funktion... Weitere Informationen zum Extrahieren von DFM aus einer ausführbaren Datei finden Sie unter: Codierung eines Delphi DFM-Explorers Artikel.

Die Kunst des Reverse Engineering war traditionell das Land der technischen Assistenten, die mit Assemblersprache und Debuggern vertraut sind. Es sind mehrere Delphi-Dekompilierer erschienen, die es jedem ermöglichen, selbst mit begrenzten technischen Kenntnissen die meisten ausführbaren Delphi-Dateien zurückzuentwickeln.

Wenn Sie sich für Reverse Engineering von Delphi-Programmen interessieren, empfehlen wir Ihnen, sich die folgenden "Dekompilierer" anzusehen:

Ein Dekompiler für ausführbare Dateien (EXE) und dynamische Bibliotheken (DLL), in Delphi geschrieben und in der Windows32-Umgebung ausgeführt. Das endgültige Projektziel ist die Entwicklung des Programms, mit dem der größte Teil des ursprünglichen Delphi wiederhergestellt werden kann Quellcodes aus der kompilierten Datei, aber IDR sowie andere Delphi-Dekompilierer können dies noch nicht. Trotzdem ist IDR in einem Status, der einen solchen Prozess erheblich erleichtert. Im Vergleich zu anderen bekannten Delphi-Dekompilierern weist das Ergebnis der IDR-Analyse die größte Vollständigkeit und Zuverlässigkeit auf.

Revendepro findet fast alle Strukturen (Klassen, Typen, Prozeduren usw.) im Programm und generiert die Pascal-Darstellung. Prozeduren werden in Assembler geschrieben. Aufgrund einiger Einschränkungen im Assembler kann die generierte Ausgabe nicht neu kompiliert werden. Die Quelle für diesen Dekompiler ist frei verfügbar. Leider ist dies der einzige Dekompiler, den ich nicht verwenden konnte. Er wird mit einer Ausnahme angezeigt, wenn Sie versuchen, eine ausführbare Delphi-Datei zu dekompilieren.

EMS Source Rescuer ist eine benutzerfreundliche Assistentenanwendung, mit der Sie Ihren verlorenen Quellcode wiederherstellen können. Wenn Sie Ihre Delphi- oder C ++ Builder-Projektquellen verlieren, aber über eine ausführbare Datei verfügen, kann dieses Tool einen Teil verlorener Quellen retten. Rescuer erstellt alle Projektformulare und Datenmodule mit allen zugewiesenen Eigenschaften und Ereignissen. Produzierte Ereignisprozeduren haben keinen Body (es ist kein Dekompiler), sondern eine Code-Adresse in der ausführbaren Datei. In den meisten Fällen spart Rescuer 50-90% Ihrer Zeit für die Projektwiederherstellung.

DeDe ist ein sehr schnelles Programm, das mit Delphi kompilierte ausführbare Dateien analysieren kann. Nach der Dekompilierung bietet DeDe Folgendes:

  • Alle dfm-Dateien des Ziels. Sie können sie mit Delphi öffnen und bearbeiten.
  • Alle veröffentlichten Methoden in gut kommentiertem ASM-Code mit Verweisen auf Zeichenfolgen, importierte Funktionsaufrufe, Klassenmethodenaufrufe, Komponenten in der Einheit, Try-Except- und Try-finally-Blöcke. Standardmäßig ruft DeDe nur die veröffentlichten Methodenquellen ab. Sie können jedoch auch eine andere Prozedur in einer ausführbaren Datei verarbeiten, wenn Sie den RVA-Offset mithilfe von Tools | kennen Proc-Menü zerlegen.
  • Viele zusätzliche Informationen.
  • Sie können einen Delphi-Projektordner mit allen dfm-, pas- und dpr-Dateien erstellen. Hinweis: Pas-Dateien enthalten den oben genannten gut kommentierten ASM-Code. Sie können nicht neu kompiliert werden!