
Kit UI de débogueur extensible offrant des vues personnalisables des registres, du désassemblage, de la pile, de la mémoire, des points d'arrêt et de la backtrace pour LLDB, GDB, VDB et WinDbg.
Voltron est une boîte à outils extensible d'interface utilisateur pour débogueur écrite en Python. Elle vise à améliorer l'expérience utilisateur de divers débogueurs (LLDB, GDB, VDB et WinDbg) en permettant l'attachement de vues utilitaires capables de récupérer et d'afficher des données depuis l'hôte du débogueur. En exécutant ces vues dans d'autres TTY, vous pouvez construire une interface utilisateur de débogueur personnalisée adaptée à vos besoins.
Voltron n'a pas pour objectif d'être tout pour tout le monde. Ce n'est pas un remplacement complet de l'interface en ligne de commande de votre débogueur. Il vise plutôt à compléter votre configuration existante et à vous permettre d'étendre votre débogueur en ligne de commande autant ou aussi peu que vous le souhaitez. Si vous voulez simplement une vue du contenu des registres dans une fenêtre à côté de votre débogueur, vous pouvez le faire. Si vous voulez aller jusqu'à avoir quelque chose qui ressemble plus à OllyDbg, vous pouvez aussi le faire.
Des vues intégrées sont fournies pour :
La configuration de l'auteur ressemble à ceci :
N'importe quelle commande du débogueur peut être séparée dans une vue et mise en évidence avec un lexer Pygments spécifié :
Plus de captures d'écran sont ici.
Voltron supporte LLDB, GDB, VDB et WinDbg/CDB (via PyKD) et fonctionne sur macOS, Linux et Windows.
Le support de WinDbg est encore assez récent, veuillez ouvrir un ticket si vous rencontrez des problèmes.
Les architectures suivantes sont supportées :
Note : Seuls macOS et les dérivés Debian sont entièrement supportés par le script d'installation. Il ne devrait normalement pas échouer sur d'autres distributions Linux, mais il n'essaiera pas d'installer les dépendances des paquets. Si vous utilisez une autre distribution, jetez un œil à install.sh pour déterminer les dépendances que vous pourriez devoir installer avant de l'exécuter.
Téléchargez les sources et exécutez le script d'installation :
$ git clone https://github.com/snare/voltron
$ cd voltron
$ ./install.sh
Par défaut, le script d'installation installe dans le répertoire site-packages de l'utilisateur. Si vous voulez installer dans le site-packages système, utilisez le drapeau -s :
$ ./install.sh -s
Vous pouvez également installer dans un environnement virtuel (pour LLDB uniquement) de cette manière :
$ ./install.sh -v /chemin/vers/venv -b lldb
Si vous êtes sur Windows sans shell, si vous rencontrez des problèmes d'installation, ou si vous préférez installer manuellement, veuillez consulter la documentation d'installation manuelle.
Si votre débogueur a un script d'initialisation (.lldbinit pour LLDB ou .gdbinit pour GDB), configurez-le pour charger Voltron au démarrage en sourcant le point d'entrée entry.py. Le chemin complet se trouvera à l'intérieur du paquet voltron. Par exemple, sur macOS, il pourrait être /Library/Python/2.7/site-packages/voltron/entry.py. Le script install.sh ajoutera cela automatiquement à votre .gdbinit ou .lldbinit s'il détecte GDB ou LLDB dans votre chemin.
LLDB :
command script import /chemin/vers/voltron/entry.py
GDB :
source /chemin/vers/voltron/entry.py
Démarrez votre débogueur et initialisez Voltron manuellement si nécessaire.
Sur les versions récentes de LLDB, vous n'avez pas besoin d'initialiser Voltron manuellement :
$ lldb binaire_cible
Sur les versions plus anciennes de LLDB, vous devez appeler voltron init après avoir chargé l'inferior :
Voir le wiki sur github.
Q. Pourquoi ai-je une ImportError lors du chargement de Voltron ?
R. Vous avez peut-être plusieurs versions de Python installées et avez installé Voltron avec la mauvaise. Voir les instructions d'installation plus détaillées.
Q. GEF ? PEDA ? PwnDbg ? fG's gdbinit ?
R. Toutes ces extensions sont superbes pour GDB. Ces outils fournissent principalement des ensembles de commandes supplémentaires pour des tâches d'exploitation, mais chacun fournit également un affichage de « contexte » avec une vue des registres, de la pile, du code, etc., comme Voltron. Ces outils affichent leur contexte dans la console du débogueur à chaque arrêt du débogueur. Voltron adopte une approche différente en intégrant un implant serveur RPC dans le débogueur et en permettant l'attachement de vues depuis d'autres terminaux (ou même des navigateurs web, ou maintenant en synchronisant avec Binary Ninja), ce qui permet à l'utilisateur de construire une interface multi-fenêtres plus propre pour son débogueur. Voltron fonctionne très bien en complément de tous ces outils. Vous pouvez simplement désactiver l'affichage du contexte dans votre extension GDB de choix et connecter quelques vues Voltron, tout en bénéficiant des commandes utiles ajoutées par ces outils.
Voir le gestionnaire de tickets sur github pour plus d'informations ou pour soumettre des problèmes.
Si vous rencontrez une ImportError lors du chargement de Voltron, veuillez vous assurer d'avoir suivi les instructions d'installation pour votre plateforme.
Sur les versions plus anciennes de LLDB, la commande voltron init doit être exécutée manuellement après le chargement de la cible de débogage, car une cible doit être chargée avant que les hooks de Voltron puissent être installés. Voltron tentera d'enregistrer automatiquement son gestionnaire d'événements, et informera l'utilisateur si voltron init est nécessaire.
Plus d'informations sur le support de WinDbg/CDB ici.
Les auteurs utilisent principalement Voltron avec la version la plus récente de LLDB sur macOS. Nous essaierons de tout tester sur autant de plateformes et architectures que possible avant les versions, mais LLDB/macOS/x64 sera de loin la combinaison la plus fréquemment utilisée. Espérons que Voltron ne mettra pas le feu à vos animaux de compagnie, mais les résultats peuvent varier.
Voir le fichier LICENSE.
Si vous utilisez cela et ne le détestez pas, offrez-moi une bière lors d'une conférence un jour. Cette licence s'étend également aux autres contributeurs - richo mérite définitivement quelques bières pour ses contributions.
Merci à mes anciens employeurs Assurance et Azimuth Security pour m'avoir donné le temps de travailler sur ce projet.
Un grand merci à richo pour toutes ses contributions à Voltron.
fG!'s gdbinit a été l'inspiration originale de ce projet.
Merci à Willi pour avoir implémenté le support VDB.
Voltron utilise maintenant Capstone pour le désassemblage ainsi que le mécanisme de désassemblage interne des hôtes de débogage. Capstone est un désassembleur open source multi-architecture puissant sur lequel la prochaine génération d'outils de rétro-ingénierie et de débogage est construite. Allez y jeter un œil.
Merci à grazfather pour ses contributions continues.
| lldb | gdb | vdb | windbg |
|---|
| x86 | ✓ | ✓ | ✓ | ✓ |
| x86_64 | ✓ | ✓ | ✓ | ✓ |
| arm | ✓ | ✓ | ✓ | ✗ |
| arm64 | ✓ | ✗ | ✗ | ✗ |
| powerpc | ✗ | ✓ | ✗ | ✗ |
$ lldb binaire_cible
(lldb) voltron init
GDB :
$ gdb binaire_cible
VDB :
$ ./vdbbin binaire_cible
> script /chemin/vers/voltron/entry.py
WinDbg/CDB n'est supporté que s'il est exécuté via Bash avec un espace utilisateur Linux. L'auteur teste avec Git Bash et ConEmu. PyKD et Voltron peuvent être chargés en une seule commande lors du lancement du débogueur :
$ cdb -c '.load C:\chemin\vers\pykd.pyd ; !py --global C:\chemin\vers\voltron\entry.py' binaire_cible
Dans un autre terminal (j'utilise des panneaux iTerm) démarrez l'une des vues de l'interface utilisateur. Sur LLDB, WinDbg et GDB, les vues se mettront à jour immédiatement. Sur VDB, elles ne se mettront à jour que lorsque l'inferior s'arrête (sur un point d'arrêt, après un pas, etc.) :
$ voltron view register
$ voltron view stack
$ voltron view disasm
$ voltron view backtrace
Définissez un point d'arrêt et exécutez votre inferior.
(*db) b main
(*db) run
Lorsque le débogueur atteint le point d'arrêt, les vues seront mises à jour pour refléter l'état actuel des registres, de la pile, de la mémoire, etc. Les vues sont mises à jour après chaque commande exécutée dans l'interface en ligne de commande du débogueur, en utilisant le mécanisme de « hook d'arrêt » du débogueur. Ainsi, à chaque fois que vous faites un pas, ou que vous continuez et atteignez un point d'arrêt, les vues se mettent à jour.