Skip to content
KitploitKITPLOIT
ToolsBlog
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
Virtuailor — IDAPython-Tool zum automatischen Erstellen von C++-virtuellen Tabellen in IDA Pro | Kitploit
Tools/GitHubGitHub/0xgalz/virtuailor
Statische AnalyseDynamische Analyse (Sandboxing)Reverse EngineeringDebuggerBinäranalyse
GitHub0xgalz/virtuailor

Virtuailor

IDAPython-Tool zum automatischen Erstellen von C++-virtuellen Tabellen in IDA Pro

Repository anzeigen
1.4k1394vor 6 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

Virtuailor - IDAPython-Werkzeug zur Rekonstruktion von C++-Vtabellen

Virtuailor ist ein IDAPython-Werkzeug zur Rekonstruktion von Vtabellen für C++-Code, der für die Intel-Architektur geschrieben wurde, sowohl für 32-Bit- als auch für 64-Bit-Code und AArch64 (Neu!). Das Werkzeug besteht aus zwei Teilen: einem statischen und einem dynamischen.

Der erste Teil, der statische, umfasst folgende Fähigkeiten:

  • Erkennt indirekte Aufrufe.
  • Hookt die Wertzuweisung der indirekten Aufrufe mittels bedingter Haltepunkte (der Hook-Code).

Der zweite Teil, der dynamische, umfasst folgende Fähigkeiten:

  • Erstellt Vtabellen-Strukturen.
  • Benennt Funktionen und Vtabellen-Adressen um.
  • Fügt Struktur-Offsets zu den indirekten Aufrufen im Assembler hinzu.
  • Fügt Xrefs von indirekten Aufrufen zu ihren virtuellen Funktionen hinzu (mehrere Xrefs).
  • Für AArch64 – versucht, undefinierte Vtabellen und zugehörige virtuelle Funktionen zu korrigieren (Unterstützung für Firmware).

Wie benutzt man es?

Virtuailor unterstützt jetzt IDA-Versionen von 7.0 bis zur neuesten Version (7.5). Wenn Sie IDA-Versionen älter als 7.4 verwenden, müssen Sie zum Branch beforeIDA-7.4 wechseln. Der Master-Branch unterstützt die neueste verfügbare Version (7.5).

  1. Standardmäßig sucht Virtuailor nach virtuellen Aufrufen in ALLEN Adressen des Codes. Wenn Sie den Code auf einen bestimmten Adressbereich beschränken möchten, kein Problem: Bearbeiten Sie einfach die Datei Main, um den gewünschten Bereich in den Variablen und hinzuzufügen:
start_addr_range
end_addr_range
root@kitploit:~
if __name__ == '__main__':

    start_addr_range = idc.MinEA()  # You can change the virtual calls address range
    end_addr_range = idc.MaxEA()
    add_bp_to_virtual_calls(start_addr_range, end_addr_range)
  1. Optional (aber dringend empfohlen): Erstellen Sie einen Snapshot Ihrer IDB. Drücken Sie einfach Strg+Umschalt+T und erstellen Sie einen Snapshot.

  2. Drücken Sie File->Run script... und navigieren Sie zum Virtuailor-Ordner, wählen Sie Main.py aus. Das folgende GIF bietet eine verständlichere visuelle Erklärung. Wie man es verwendet

Die GUI bietet Ihnen nun die Möglichkeit, einen Zielbereich auszuwählen. Falls Sie die gesamte Binärdatei bearbeiten möchten, drücken Sie einfach OK mit den Standardwerten für Start- und Endadresse.

Anschließend werden die Haltepunkte in Ihrem Code platziert. Sie müssen nur noch Ihren Code mit dem IDA-Debugger ausführen, die gewünschten Aktionen durchführen und beobachten, wie die Vtabellen erstellt werden! Für AArch64 können Sie einen entfernten GDB-Server einrichten und mit dem IDA-Debugger debuggen.

Falls Sie die Haltepunkte nicht mehr benötigen, gehen Sie zur Haltepunktliste in IDA und löschen Sie die gewünschten Haltepunkte.

Es ist mir auch sehr wichtig anzumerken, dass dies die zweite Version des Werkzeugs mit Unterstützung für 32-Bit, 64-Bit und AArch64 ist. In einigen Fällen werden vermutlich eine geringe Anzahl von Haltepunkten übersehen. Bitte eröffnen Sie in solchen Fällen ein Issue und kontaktieren Sie mich, damit ich den Code verbessern und zur Behebung beitragen kann. Vielen Dank im Voraus!

Ausgabe und allgemeine Funktionen

Vtabellen-Strukturen

Die Strukturen, die Virtuailor aus der bei virtuellen Aufrufen verwendeten Vtable erstellt, die getroffen wurden. Die Vtable-Funktionen werden basierend auf dem relevanten Register, das im BP-Opcode verwendet wurde, aus dem Speicher extrahiert.

Beispiel einer Vtable Da ich eine Korrelation zwischen der Struktur in IDA und den Vtabellen im Datenabschnitt herstellen wollte, ändert der BP den Vtable-Adressnamen im Datenabschnitt in den Namen der Struktur. Wie im folgenden Bild zu sehen: Beispiel einer Vtable im Speicher

Auch die Namen der virtuellen Funktionen werden geändert – außer in Situationen, in denen die Namen nicht die standardmäßigen IDA-Namen sind (Funktionen mit Symbolen oder vom Benutzer geänderte). In diesen Fällen bleiben die Funktionsnamen erhalten und werden mit ihrem aktuellen Namen zur Vtable-Struktur hinzugefügt.

Die gewählten Namen folgen dem folgenden Muster:

  • vtable_
  • vfunc_ Der Rest des Namens ist entweder der Offset vom Beginn des Segments. Dies liegt hauptsächlich daran, dass die meisten Binärdateien heutzutage PIE und PIC sind und daher ASLR erzwungen wird (anstatt den vollständigen Adressnamen zu verwenden, der in 64-Bit-Umgebungen ebenfalls recht lang ist). Die Vtable-Struktur enthält außerdem einen Kommentar: „Was called from offset: XXXX“. Dieser Offset ist der Offset vom Beginn des Segments.

Strukturen zur Assembly hinzufügen

Nach der Erstellung der Vtable fügt Virtuailor auch eine Verbindung zwischen der erstellten Struktur und der Assembly hinzu, wie in den folgenden Bildern zu sehen: BP nach einer Ausführung, Beispiel 2

P.S.: Der im BP verwendete Strukturoffset ist nur für den letzten getätigten Aufruf relevant. Um ein besseres Verständnis aller getätigten virtuellen Aufrufe zu erhalten, wurde die Xref-Funktion hinzugefügt, wie im nächsten Abschnitt erläutert.

Xref zu virtuellen Funktionen

Beim statischen Reversingen von C++ ist es nicht trivial zu sehen, wer wen aufgerufen hat, da die meisten Aufrufe indirekte Aufrufe sind. Nach der Ausführung von Virtuailor hat jedoch jede indirekt aufgerufene Funktion nun einen Xref zu diesen Stellen.

Das folgende GIF zeigt die hinzugefügten Xrefs mit ihrem indirekten Funktionsaufruf:

xref

Bisherige Vorträge und Präsentationen

Das Werkzeug wurde auf der RECon Brussels, Troopers und Warcon vorgestellt. Die Präsentation ist unter folgendem Link zu finden: https://www.youtube.com/watch?v=Xk75TM7NmtA

Danksagungen

Den Crews von REcon Brussels, Troopers und Warcon, Nana, @tmr232, @matalaz, @oryandp, @talkain, @shiftreduce

Lizenz

Das Plugin ist unter der GNU GPL v3-Lizenz lizenziert.

Tool herunterladen