Voltron ist ein erweiterbares Debugger-UI-Toolkit, das in Python geschrieben ist. Ziel ist es, die Benutzererfahrung verschiedener Debugger (LLDB, GDB, VDB und WinDbg) zu verbessern, indem das Anhängen von Dienstprogrammansichten ermöglicht wird, die Daten vom Debugger-Host abrufen und anzeigen können. Indem Sie diese Ansichten in anderen TTYs ausführen, können Sie eine angepasste Debugger-Benutzeroberfläche erstellen, die Ihren Anforderungen entspricht.
Voltron hat nicht das Ziel, für jeden alles zu bieten. Es ist kein vollständiger Ersatz für die CLI Ihres Debuggers. Vielmehr zielt es darauf ab, Ihr bestehendes Setup zu ergänzen und Ihnen die Möglichkeit zu geben, Ihren CLI-Debugger so viel oder so wenig zu erweitern, wie Sie möchten. Wenn Sie lediglich eine Ansicht des Registerinhalts in einem Fenster neben Ihrem Debugger wünschen, können Sie dies tun. Wenn Sie alles geben und etwas haben möchten, das eher wie OllyDbg aussieht, können Sie das auch tun.
Integrierte Ansichten stehen zur Verfügung für:
Das Setup des Autors sieht in etwa so aus:
Jeder Debugger-Befehl kann in eine Ansicht aufgeteilt und mit einem angegebenen Pygments-Lexer hervorgehoben werden:
Weitere Screenshots finden Sie hier.
Voltron unterstützt LLDB, GDB, VDB und WinDbg/CDB (über PyKD) und läuft auf macOS, Linux und Windows.
Die WinDbg-Unterstützung ist noch recht neu. Bitte öffnen Sie ein Problem, wenn Sie Probleme haben.
Die folgenden Architekturen werden unterstützt:
lldb | gdb | vdb | windbg | |
---|---|---|---|---|
x86 | ✓ | ✓ | ✓ | ✓ |
x86_64 | ✓ | ✓ | ✓ | ✓ |
Arm | ✓ | ✓ | ✓ | ✗ |
arm64 | ✓ | ✗ | ✗ | ✗ |
PowerPC | ✗ | ✓ | ✗ | ✗ |
Hinweis: Nur macOS- und Debian-Derivate werden vom Installationsskript vollständig unterstützt. Auf anderen Linux-Distributionen sollte es hoffentlich nicht scheitern, aber es wird nicht versucht, Paketabhängigkeiten zu installieren. Wenn Sie eine andere Distribution verwenden, werfen Sie einen Blick auf install.sh
um herauszufinden, welche Abhängigkeiten Sie möglicherweise installieren müssen, bevor Sie sie ausführen.
Laden Sie die Quelle herunter und führen Sie das Installationsskript aus:
$ git clone https://github.com/snare/voltron
$ cd voltron
$ ./install.sh
Standardmäßig wird das Installationsskript im site-packages
Verzeichnis des Benutzers installiert. Wenn Sie site-packages
im System installieren möchten, verwenden Sie das Flag -s
:
$ ./install.sh -s
Sie können auch wie folgt in einer virtuellen Umgebung installieren (nur für LLDB):
$ ./install.sh -v /path/to/venv -b lldb
Wenn Sie Windows ohne Shell verwenden, Probleme bei der Installation haben oder die Installation lieber manuell durchführen möchten, lesen Sie bitte die Dokumentation zur manuellen Installation.
Wenn Ihr Debugger über ein Init-Skript ( .lldbinit
für LLDB oder .gdbinit
für GDB) verfügt, konfigurieren Sie es so, dass Voltron beim Start geladen wird, indem Sie das Einstiegspunktskript entry.py
verwenden. Der vollständige Pfad befindet sich im voltron
Paket. Unter macOS könnte es beispielsweise /Library/Python/2.7/site-packages/voltron/entry.py lauten. Das install.sh
Skript fügt dies automatisch zu Ihrer .gdbinit
oder .lldbinit
Datei hinzu, wenn es GDB oder LLDB in Ihrem Pfad erkennt.
LLDB:
command script import /path/to/voltron/entry.py
GDB:
source /path/to/voltron/entry.py
Starten Sie Ihren Debugger und initialisieren Sie Voltron bei Bedarf manuell.
Bei neueren Versionen von LLDB müssen Sie Voltron nicht manuell initialisieren:
$ lldb target_binary
Bei älteren Versionen von LLDB müssen Sie voltron init
aufrufen, nachdem Sie die untergeordnete Version geladen haben:
$ lldb target_binary
(lldb) voltron init
GDB:
$ gdb target_binary
VDB:
$ ./vdbbin target_binary
> script /path/to/voltron/entry.py
WinDbg/CDB wird nur über Bash mit einem Linux-Benutzerland ausgeführt. Der Autor testet mit Git Bash und ConEmu. PyKD und Voltron können beim Starten des Debuggers mit einem Befehl geladen werden:
$ cdb -c '.load C:pathtopykd.pyd ; !py --global C:pathtovoltronentry.py' target_binary
Starten Sie in einem anderen Terminal (ich verwende iTerm-Bereiche) eine der UI-Ansichten. Auf LLDB, WinDbg und GDB werden die Ansichten sofort aktualisiert. Auf VDB werden sie erst aktualisiert, wenn der Untergeordnete stoppt (an einem Haltepunkt, nach einem Schritt usw.):
$ voltron view register
$ voltron view stack
$ voltron view disasm
$ voltron view backtrace
Setzen Sie einen Haltepunkt und führen Sie Ihren Unterlegenen aus.
(*db) b main
(*db) run
Wenn der Debugger den Haltepunkt erreicht, werden die Ansichten aktualisiert, um den aktuellen Status von Registern, Stapel, Speicher usw. widerzuspiegeln. Ansichten werden aktualisiert, nachdem jeder Befehl in der Debugger-CLI ausgeführt wurde, wobei der „Stop-Hook“-Mechanismus des Debuggers verwendet wird. Jedes Mal, wenn Sie einen Schritt ausführen oder fortfahren und einen Haltepunkt erreichen, werden die Ansichten aktualisiert.
Siehe das Wiki auf Github.
F. Warum erhalte ich beim Laden von Voltron eine ImportError
?
A. Möglicherweise haben Sie mehrere Python-Versionen installiert und Voltron mit der falschen installiert. Weitere Informationen finden Sie in den ausführlicheren Installationsanweisungen.
F. GEF? PEDA? PwnDbg? fGs gdbinit?
A. Alles super tolle Erweiterungen für GDB. Diese Tools stellen in erster Linie Sätze zusätzlicher Befehle für Exploit-Aufgaben bereit, aber jedes bietet auch eine „Kontext“-Anzeige mit einer Ansicht von Registern, Stack, Code usw., wie Voltron. Diese Tools drucken ihre Kontextanzeige jedes Mal in der Debugger-Konsole aus, wenn der Debugger stoppt. Voltron verfolgt einen anderen Ansatz, indem es ein RPC-Serverimplantat in den Debugger einbettet und das Anhängen von Ansichten von anderen Terminals (oder sogar Webbrowsern oder jetzt der Synchronisierung mit Binary Ninja) ermöglicht, was dem Benutzer die Erstellung einer übersichtlicheren Multi-Window-Schnittstelle ermöglicht ihr Debugger. Voltron funktioniert hervorragend mit all diesen Tools. Sie können einfach die Kontextanzeige in der GDB-Erweiterung Ihrer Wahl deaktivieren und einige Voltron-Ansichten einbinden und trotzdem alle Vorteile der nützlichen Befehle dieser Tools nutzen.
Weitere Informationen oder zum Einreichen von Problemen finden Sie im Issue-Tracker auf Github.
Wenn beim Laden von Voltron ein ImportError
auftritt, stellen Sie bitte sicher, dass Sie die Installationsanweisungen für Ihre Plattform befolgt haben.
Bei älteren Versionen von LLDB muss der voltron init
-Befehl nach dem Laden des Debug-Ziels manuell ausgeführt werden, da ein Ziel geladen werden muss, bevor die Hooks von Voltron installiert werden können. Voltron wird versuchen, seinen Event-Handler automatisch zu registrieren, und den Benutzer informieren, wenn voltron init
erforderlich ist.
Weitere Informationen zur WinDbg/CDB-Unterstützung finden Sie hier.
Die Autoren verwenden Voltron hauptsächlich mit der neuesten Version von LLDB unter macOS. Wir werden versuchen, vor der Veröffentlichung alles auf möglichst vielen Plattformen und Architekturen zu testen, aber LLDB/macOS/x64 wird bei weitem die am häufigsten verwendete Kombination sein. Hoffentlich setzt Voltron Ihre Haustiere nicht in Brand, aber YMMV.
Siehe die LICENSE-Datei.
Wenn Sie das nutzen und es nicht hassen, spendieren Sie mir irgendwann auf einer Konferenz ein Bier. Diese Lizenz erstreckt sich auch auf andere Mitwirkende – Richo hat sich für seine Beiträge auf jeden Fall ein paar Bier verdient.
Vielen Dank an meine früheren Arbeitgeber Assurance und Azimuth Security, die mir die Zeit gegeben haben, daran zu arbeiten.
Ein großes Lob an Richo für all seine Beiträge zu Voltron.
gdbinit von fG! war die ursprüngliche Inspiration für dieses Projekt.
Danke an Willi für die Umsetzung der VDB-Unterstützung.
Voltron verwendet jetzt Capstone für die Disassemblierung sowie den internen Disassemblierungsmechanismus der Debugger-Hosts. Capstone ist ein leistungsstarker Open-Source-Disassembler für mehrere Architekturen, auf dem die nächste Generation von Reverse-Engineering- und Debugging-Tools aufbaut. Hör zu.
Vielen Dank an Grazfather für die fortlaufenden Beiträge.