Delphi dekompilieren (1/3)

Dekompilierung ist 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 ursprünglichen Quellen nicht verfügbar sind.

Hm, "Quellen nicht verfügbar", heißt das, dass wir die Delphi-Projekte anderer Leute dekompilieren können? Na ja und nein ...

Ist echte Dekompilierung möglich??

Nein natürlich nicht. Eine vollautomatische Dekompilierung ist nicht möglich - kein Dekompiler kann 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 Dekompilierer eindeutige Namen für alle Konstanten, Variablen, Funktionen und Prozeduren erstellen muss. Selbst wenn ein gewisser Grad an Erfolg erzielt wird, fehlen dem generierten "Quellcode" aussagekräftige Variablen- und Funktionsnamen.
Offensichtlich ist die Syntax der Quellsprache in der ausführbaren Datei nicht mehr vorhanden. Es wäre für einen Dekompiler sehr schwierig, die in einer ausführbaren Datei vorhandenen Reihen von Maschinensprachenanweisungen (ASM) zu interpretieren und zu entscheiden, was die ursprüngliche Quellanweisung war.

Warum und wann wird die Dekompilierung verwendet?

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 Schadcode im Programm
  • Fehlerkorrektur, wenn der Eigentümer der Anwendung für die Korrektur nicht verfügbar ist.
  • Wiederherstellung des Quellcodes eines anderen Benutzers (um beispielsweise einen Algorithmus zu bestimmen).

Ist das legal??

Reverse Engineering ist KEIN Riss, obwohl es manchmal schwierig ist, die Grenze zwischen diesen beiden zu ziehen. Computerprogramme sind urheber- und markenrechtlich geschützt. Verschiedene Länder haben unterschiedliche Ausnahmen von den Rechten des Urheberrechtsinhabers. Die gängigsten geben an, dass es in Ordnung ist, zu dekompilieren: zum Zwecke der Interpretierbarkeit, wenn die Schnittstellenspezifikation nicht zur Verfügung gestellt wurde, zum Zwecke der Fehlerkorrektur, wenn der Inhaber des Urheberrechts nicht zur Verfügung steht, um die Korrektur vorzunehmen, um Teile zu bestimmen des Programms, die nicht urheberrechtlich geschützt sind. Natürlich sollten Sie sehr vorsichtig sein / sich an Ihren Anwalt wenden, wenn Sie Zweifel haben, ob Sie die Exe-Datei eines Programms zerlegen dürfen.

Hinweis: Wenn Sie Delphi-Risse, Schlüsselgeneratoren oder nur Seriennummern suchen: Sie sind auf der falschen Seite. Bitte denken Sie daran, dass alles, was Sie hier finden, nur zu Erkundungs- / Bildungszwecken geschrieben / präsentiert wird.

Derzeit bietet Borland kein Produkt an, das in der Lage ist, eine ausführbare (.exe) Datei oder die "Delphi compiled unit" (.dcu) auf den ursprünglichen Quellcode (.pas) zurückzusetzen..

Delphi Compiled Unit (DCU)

Beim Kompilieren oder Ausführen eines Delphi-Projekts 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 gespeichert, jedoch mit der Erweiterung .DCU. 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 jemanden haben, die Quelle einer kompilierten Komponente nur umkehren müssen, um den Code abzurufen. 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 einer exe kopiert Delphi 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 eine Ereignisprozedur zuweisen, schreibt Delphi diese Änderungen in eine DFM-Datei (nicht den Code der Ereignisprozedur - dieser wird in der pas / dcu-Datei gespeichert). Um die "dfm" aus der ausführbaren Datei zu erhalten, müssen wir verstehen, welche Arten von Ressourcen in einer ausführbaren Win32-Datei gespeichert sind.