Skip to content
KitploitKITPLOIT
ToolsBlog
Log in
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
pythia — Ein Werkzeug zum Extrahieren von RTTI-Informationen aus Delphi-Executables, geschrieben in reinem Python. | Kitploit
Tools/GitHubGitHub/nccgroup/pythia
Reverse EngineeringMalware-AnalyseBinäranalyse
GitHubnccgroup/pythia

pythia

Ein Werkzeug zum Extrahieren von RTTI-Informationen aus Delphi-Executables, geschrieben in reinem Python.

Repository anzeigen
2479vor 7 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Einführung / tl;dr

Dieses Tool durchsucht eine ausführbare Datei nach Delphi-Daten, einschließlich RTTI und virtuellen Funktionstabellen. Es gibt eine JSON-Datei mit Informationen über identifizierte Klassen und Funktionen aus, die für weitere Analysen verwendet werden kann, zum Beispiel:

  • Erzeuge einen Klassenbaum.
  • Erzeuge Namen & Kommentare für IDA.
  • Speise sie in weitere Verarbeitung ein, z.B. automatische Dekompilierung.

Ein IDAPython-Skript, das die Ausgabe in IDA laden kann, wird bereitgestellt.

Das Skript wurde geschrieben, um andere Werkzeuge zum Reverse Engineering von Delphi zu ergänzen.

Autor & Lizenz

Als Open Source veröffentlicht von NCC Group Plc - http://www.nccgroup.com/

Entwickelt von David Cannings (@edeca) [email protected]

http://www.github.com/nccgroup/pythia

Dieses Projekt wird unter der AGPL-Lizenz veröffentlicht. Weitere Informationen finden Sie in der Datei LICENSE.

So funktioniert es

Der Ablauf auf hoher Ebene ist:

  • Lade eine PE-Datei und finde Code-Abschnitte
  • Scanne jeden Code-Abschnitt in 4-Byte-Schritten
  • Identifiziere potenzielle vftables und validiere sie
  • Extrahiere den Klassennamen und die Beziehungen zu Elternklassen
  • Identifiziere Funktionsvererbung

Identifizieren potenzieller vftables

Delphi-vftables sind gut dokumentiert. Informationen für die neueste Version sind verfügbar von Embarcadero. Inoffizielle Dokumentation ist für Delphi 2005 verfügbar (siehe hier).

Der Quellcode von Free Pascal ist ebenfalls nützlich (GitHub-Mirror).

Das erste Element in einer vftable ist vmtSelfPtr, das auf den Anfang der virtuellen Funktionstabelle zeigt. Das Skript scannt jedes Code-Segment in der PE-Datei nach einer Stelle, die +0x4C Bytes vorwärts zeigt. Beachten Sie, dass der Delphi-Compiler vftables an einer 4-Byte-Grenze ausrichtet (zur Optimierung).

Zum Beispiel enthält die folgende VA 0x0046E1C8 den Offset 0x0046E214, der 0x4C Bytes voraus liegt. Wie in IDA gezeigt:

.text:0046E1C8                   ; Classes::TComponent *vftable_TDCP_misty1
.text:0046E1C8 14 E2 46 00       vftable_TDCP_misty1 dd offset off_46E214

Dieser Ansatz kann False Positives erzeugen, daher werden andere Felder in der vftable auf plausible Werte geprüft. Zum Beispiel wird vmtInstanceSize geprüft, um sicherzustellen, dass es nicht übermäßig groß ist, und es wird verifiziert, dass Funktionszeiger in einem ausführbaren Abschnitt liegen. Während der Tests war die False-Positive-Rate trotz der Brute-Force-Suchmethode sehr niedrig.

Vererbung

Jede in einer vftable gefundene Funktion wird daraufhin geprüft, ob sie von der Elternklasse geerbt oder überladen wurde. Delphi unterstützt keine Mehrfachvererbung, daher kann dies erreicht werden, indem der Zeiger in der vftable der Elternklasse mit dem gleichen Offset geprüft wird.

Wenn beide Zeiger auf dieselbe Funktion verweisen, wurde sie geerbt. Wenn das Kind einen anderen Zeiger hat, wurde sie überladen.

Beispielausgabe

Die primäre Ausgabe des Tools ist eine JSON-Datei, die in nachfolgende Verarbeitungen / Werkzeuge eingespeist werden kann. Es sind jedoch einige weitere Ausgabeformate enthalten.

Baumausgabe

Verwenden Sie die Option --save-tree, um eine Datei wie die folgende zu erzeugen:

TObject (at 0x0040112c)
|-- Exception (at 0x004081f8)
|   |-- EAbort (at 0x00408260)
|   |-- EAbstractError (at 0x00408ad4)
|   |-- EAssertionFailed (at 0x00408a74)
|   |-- EBcdException (at 0x004bd110)
|   |   +-- EBcdOverflowException (at 0x004bd16c)
|   |-- EBitsError (at 0x0041ab04)
|   |-- EComponentError (at 0x0041abbc)
|   |-- EConvertError (at 0x00408850)
|   |-- EDCP_cipher (at 0x0046a0ac)
|   |   +-- EDCP_blockcipher (at 0x0046a29c)
|   |-- EDCP_hash (at 0x00469f20)
.. etc ..

Zukünftige Ziele

  • Identifiziere die Delphi-Version (z.B. anhand der PACKAGEINFO- oder DVCLAL-Ressource) und passe das Scannen an verschiedene vftable-Layouts an.
  • Analysiere mehr Klasseninformationen, z.B. Eigenschaften (ein Delphi-spezifisches Element) und Methodentabellen
  • Analysiere Delphi-RTTI-Informationen (vmtTypeInfo in der vftable)
  • Disassembliere Code mit Capstone und identifiziere virtuelle Aufrufe (z.B. call [ecx+3Fh] einer Instanzmethode zuordnen)

Einschränkungen

  • Bisher nur mit 32-Bit-Code getestet. Bitte senden Sie mir 64-Bit-Beispiele.
  • Unterstützt nur Windows-PE-Dateien (Delphi kann auch in andere Formate kompilieren).
  • Nicht als vollständiger Delphi-Decompiler konzipiert. Verwenden Sie DeDe / IDR / Hex-Rays.
  • Nur nützlich mit Delphi-Binärdateien, die Objekte verwenden (nicht alle tun das).
  • Modernes Delphi verwendet Namen wie TComparer<System.Bindings.EvalProtocol.TPair<System.IInterface,System.Pointer>>, die in IDA ziemlich unentzifferbar sind.

Bitte senden Sie mir Beispiele von Binärdateien, bei denen dieses Tool nicht funktioniert, damit es verbessert werden kann.

Tool herunterladen