
Toolkit UI per debugger estensibile che fornisce viste personalizzabili di registri, disassemblaggio, stack, memoria, breakpoint e backtrace per LLDB, GDB, VDB e WinDbg.
Voltron è un toolkit estensibile per l'interfaccia utente del debugger scritto in Python. Mira a migliorare l'esperienza utente di vari debugger (LLDB, GDB, VDB e WinDbg) consentendo il collegamento di viste di utilità che possono recuperare e visualizzare dati dall'host del debugger. Eseguendo queste viste in altri TTY, puoi costruire un'interfaccia utente del debugger personalizzata per soddisfare le tue esigenze.
Voltron non mira a essere tutto per tutti. Non è una sostituzione completa della CLI del tuo debugger. Piuttosto, mira a complementare la tua configurazione esistente e permetterti di estendere il tuo debugger CLI quanto desideri. Se vuoi solo una vista del contenuto dei registri in una finestra accanto al tuo debugger, puoi farlo. Se vuoi andare fino in fondo e avere qualcosa che assomigli più a OllyDbg, puoi farlo anche tu.
Le viste integrate sono fornite per:
La configurazione dell'autore assomiglia a questa:
Qualsiasi comando del debugger può essere separato in una vista e evidenziato con un lexer Pygments specificato:
Ulteriori screenshot sono qui.
Voltron supporta LLDB, GDB, VDB e WinDbg/CDB (tramite PyKD) e funziona su macOS, Linux e Windows.
Il supporto per WinDbg è ancora abbastanza recente, per favore apri un problema se hai problemi.
Le seguenti architetture sono supportate:
Nota: Solo macOS e i derivati di Debian sono completamente supportati dallo script di installazione. Sperabilmente non dovrebbe fallire su altre distribuzioni Linux, ma non tenterà di installare le dipendenze dei pacchetti. Se stai usando un'altra distribuzione, dai un'occhiata a install.sh per capire quali dipendenze potresti dover installare prima di eseguirlo.
Scarica il codice sorgente ed esegui lo script di installazione:
$ git clone https://github.com/snare/voltron
$ cd voltron
$ ./install.sh
Per impostazione predefinita, lo script di installazione installerà nella directory site-packages dell'utente. Se vuoi installare nella directory site-packages di sistema, usa il flag -s:
$ ./install.sh -s
Puoi anche installare in un ambiente virtuale (solo per LLDB) in questo modo:
$ ./install.sh -v /path/to/venv -b lldb
Se sei su Windows senza una shell, hai problemi durante l'installazione o preferisci installare manualmente, consulta la documentazione di installazione manuale.
Se il tuo debugger ha uno script di init (.lldbinit per LLDB o .gdbinit per GDB), configuralo per caricare Voltron all'avvio eseguendo il file di entry point entry.py. Il percorso completo sarà all'interno del pacchetto voltron. Ad esempio, su macOS potrebbe essere /Library/Python/2.7/site-packages/voltron/entry.py. Lo script install.sh aggiungerà automaticamente questo al tuo .gdbinit o .lldbinit se rileva GDB o LLDB nel tuo PATH.
LLDB:
command script import /path/to/voltron/entry.py
GDB:
source /path/to/voltron/entry.py
Avvia il debugger e inizializza Voltron manualmente se necessario.
Sulle versioni recenti di LLDB non hai bisogno di inizializzare Voltron manualmente:
$ lldb target_binary
Sulle versioni più vecchie di LLDB devi chiamare voltron init dopo aver caricato l'inferiore:
Vedi il wiki su github.
D. Perché ottengo un ImportError caricando Voltron?
R. Potresti avere più versioni di Python installate e aver installato Voltron usando quella sbagliata. Vedi le istruzioni di installazione più dettagliate.
D. GEF? PEDA? PwnDbg? fG's gdbinit?
R. Tutte estensioni fantastiche per GDB. Questi strumenti forniscono principalmente insiemi di comandi aggiuntivi per attività di exploitation, ma ciascuno fornisce anche una visualizzazione "contesto" con una vista di registri, stack, codice, ecc., come Voltron. Questi strumenti stampano la loro visualizzazione contestuale nella console del debugger ogni volta che il debugger si ferma. Voltron adotta un approccio diverso incorporando un server RPC nel debugger e consentendo il collegamento di viste da altri terminali (o persino browser web, o ora sincronizzando con Binary Ninja), che permette all'utente di costruire un'interfaccia multi-finestra più pulita per il proprio debugger. Voltron funziona benissimo insieme a tutti questi strumenti. Puoi semplicemente disabilitare la visualizzazione del contesto nella tua estensione GDB preferita e collegare alcune viste di Voltron, ottenendo comunque tutti i vantaggi dei comandi utili aggiunti da questi strumenti.
Vedi il tracciatore di problemi su github per maggiori informazioni o per segnalare problemi.
Se stai riscontrando un ImportError caricando Voltron, assicurati di aver seguito le istruzioni di installazione per la tua piattaforma.
Sulle versioni più vecchie di LLDB, il comando voltron init deve essere eseguito manualmente dopo aver caricato il target di debug, poiché un target deve essere caricato prima che gli hook di Voltron possano essere installati. Voltron tenterà di registrare automaticamente il suo gestore di eventi e informerà l'utente se è necessario voltron init.
Maggiori informazioni sul supporto WinDbg/CDB qui.
Gli autori usano principalmente Voltron con la versione più recente di LLDB su macOS. Cercheremo di testare tutto su quante più piattaforme e architetture possibile prima dei rilasci, ma LLDB/macOS/x64 sarà di gran lunga la combinazione più utilizzata. Sperabilmente Voltron non darà fuoco ai tuoi animali domestici, ma i risultati possono variare.
Vedi il file LICENSE.
Se usi questo e non lo odi, comprami una birra a una conferenza qualche volta. Questa licenza si estende anche ad altri contributori - richo merita sicuramente qualche birra per i suoi contributi.
Grazie ai miei ex datori di lavoro Assurance e Azimuth Security per avermi dato il tempo di lavorare su questo.
Ringraziamenti a richo per tutti i suoi contributi a Voltron.
Il gdbinit di fG! è stata l'ispirazione originale per questo progetto.
Grazie a Willi per aver implementato il supporto VDB.
Voltron ora usa Capstone per il disassemblaggio oltre al meccanismo di disassemblaggio interno degli host del debugger. Capstone è un potente disassemblatore open source multi-architettura su cui si stanno costruendo la prossima generazione di strumenti di reverse engineering e debugging. Dai un'occhiata.
Grazie a grazfather per i contributi continui.
| lldb | gdb | vdb | windbg |
|---|
| x86 | ✓ | ✓ | ✓ | ✓ |
| x86_64 | ✓ | ✓ | ✓ | ✓ |
| arm | ✓ | ✓ | ✓ | ✗ |
| arm64 | ✓ | ✗ | ✗ | ✗ |
| powerpc | ✗ | ✓ | ✗ | ✗ |
$ lldb target_binary
(lldb) voltron init
GDB:
$ gdb target_binary
VDB:
$ ./vdbbin target_binary
> script /path/to/voltron/entry.py
WinDbg/CDB è supportato solo in esecuzione tramite Bash con un userland Linux. L'autore testa con Git Bash e ConEmu. PyKD e Voltron possono essere caricati in un unico comando all'avvio del debugger:
$ cdb -c '.load C:\path\to\pykd.pyd ; !py --global C:\path\to\voltron\entry.py' target_binary
In un altro terminale (io uso pannelli di iTerm) avvia una delle viste UI. Su LLDB, WinDbg e GDB le viste si aggiorneranno immediatamente. Su VDB non si aggiorneranno fino a quando l'inferiore non si ferma (a un breakpoint, dopo uno step, ecc.):
$ voltron view register
$ voltron view stack
$ voltron view disasm
$ voltron view backtrace
Imposta un breakpoint ed esegui l'inferiore.
(*db) b main
(*db) run
Quando il debugger raggiunge il breakpoint, le viste verranno aggiornate per riflettere lo stato corrente di registri, stack, memoria, ecc. Le viste vengono aggiornate dopo ogni comando eseguito nella CLI del debugger, utilizzando il meccanismo di "stop hook" del debugger. Quindi ogni volta che fai uno step, o continui e raggiungi un breakpoint, le viste si aggiorneranno.