Abschnitt 2 Delphi Reverse Engineering
Derzeit bietet Borland keine Produkte zum Dekompilieren ausführbarer Dateien (.exe) oder „Delphi-kompilierter Dateien“ (.dcu) in rohen Programmcode (.pas) an.
Delphi-kompilierte Einheit: DCU ( Delphi-kompilierte Einheit: DCU )
Wenn ein Delphi-Projekt kompiliert oder ausgeführt wird, wird eine Kompilierungseinheitsdatei (.dcu) generiert. Standardmäßig wird die kompilierte Version jeder Einheit in einer separaten Binärdatei gespeichert. Der Dateiname ist derselbe wie die Einheitendatei und ihre Erweiterung ist .DCU. Beispiel: Die Datei „unit1.dcu“ enthält den in der Datei „unit1.pas“ deklarierten Code und die Daten.
Das bedeutet, dass Sie, wenn Sie über eine Ressource verfügen, beispielsweise eine kompilierte Komponente, diese lediglich dekompilieren und den Quellcode abrufen müssen. Falsch, das DCU-Dateiformat ist undokumentiert (Eigentümerformat) und kann sich von Version zu Version ändern.
Nach dem Compiler: Delphi Reverse Engineering
Wenn Sie versuchen, eine ausführbare Delphi-Datei zu dekompilieren, sollten Sie einige Dinge wissen:
Delphi-Quellprogrammdateien werden normalerweise in zwei Dateitypen gespeichert: ASCII-Codedateien (.pas, .dPR) und Ressourcendateien (.res, .rc, .dfm, .dcr). DFM-Dateien enthalten Details (Eigenschaften) der im Formular enthaltenen Objekte. Beim Erstellen einer ausführbaren Datei kopiert Delphi die Informationen in der .dfm-Datei in die fertige .exe-Codedatei. Die Formulardatei beschreibt jede Komponente im Formular, einschließlich aller stabilen Eigenschaftswerte. Immer wenn wir die Position eines Formulars oder den Titel einer Schaltfläche ändern oder einer Komponente eine Ereignisprozedur zuweisen, zeichnet Delphi diese Änderungen in der DFM-Datei auf (nicht im Code für die Ereignisprozedur – er wird in der pas/dcu-Datei gespeichert). . Um „dfm“ aus einer ausführbaren Datei zu erhalten, müssen wir verstehen, welche Art von Ressourcen in der ausführbaren Win32-Datei gespeichert sind.
Alle von Delphi kompilierten Programme bestehen aus den folgenden Teilen: CODE, DATA, BSS, .idata, tls, .rdata, .rsrc. Aus Sicht der Dekompilierung sind die wichtigsten Teile: CODE, .rsrc. Im Artikel „Hinzufügen von Funktionalität zu einem Delphi-Programm“ („Hinzufügen von Funktionalität zu einem Delphi-Programm“) (Hinzufügen des Übersetzers: einer nach dem anderen) werden einige interessante Dinge über das ausführbare Delphi-Format, Klasseninformationen und DFM-Ressourcen besprochen: Wie Ereignisse zuweisen zu anderen Event-Handlern, die im gleichen Formular definiert sind. So fügen Sie Ihren eigenen Event-Handler hinzu, um der ausführbaren Datei Code hinzuzufügen, um den Titel der Schaltfläche zu ändern.
Unter den verschiedenen Arten von Ressourcen, die in der .exe-Datei gespeichert sind, verfügen RT_RCDATA oder anwendungsdefinierte Ressourcen (Rohdaten) über die in der DFM-Datei vor der Kompilierung enthaltenen Informationen. Um DFM-Daten aus einer .exe-Datei auszuwählen, können wir die API-Funktion EnumResourceNames aufrufen... Weitere Informationen zum Auswählen von DFM-Daten aus einer .exe-Datei finden Sie unter: „Codieren eines Delphi-DFM-Explorers“ („Schreiben eines Delphi DFM-Detektor"). (Übersetzer hinzugefügt: Nacheinander übersetzt)