Voltron est une boîte à outils d'interface utilisateur de débogueur extensible écrite en Python. Il vise à améliorer l'expérience utilisateur de divers débogueurs (LLDB, GDB, VDB et WinDbg) en permettant la pièce jointe de vues utilitaires capables de récupérer et d'afficher les données de l'hôte du débogueur. En exécutant ces vues dans d’autres TTY, vous pouvez créer 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 la CLI de votre débogueur. Il vise plutôt à compléter votre configuration existante et à vous permettre d'étendre votre débogueur CLI autant ou aussi peu que vous le souhaitez. Si vous souhaitez simplement afficher le contenu du registre dans une fenêtre à côté de votre débogueur, vous pouvez le faire. Si vous voulez tout mettre en œuvre et avoir quelque chose qui ressemble davantage à OllyDbg, vous pouvez le faire aussi.
Des vues intégrées sont fournies pour :
La configuration de l'auteur ressemble à ceci :
Toute commande du débogueur peut être divisée en une vue et mise en évidence avec un lexer Pygments spécifié :
Plus de captures d'écran sont ici.
Voltron prend en charge LLDB, GDB, VDB et WinDbg/CDB (via PyKD) et fonctionne sur macOS, Linux et Windows.
Le support de WinDbg est encore relativement nouveau, veuillez ouvrir un ticket si vous rencontrez des problèmes.
Les architectures suivantes sont prises en charge :
lldb | gdb | vdb | ventbg | |
---|---|---|---|---|
x86 | ✓ | ✓ | ✓ | ✓ |
x86_64 | ✓ | ✓ | ✓ | ✓ |
bras | ✓ | ✓ | ✓ | ✗ |
bras64 | ✓ | ✗ | ✗ | ✗ |
PC puissant | ✗ | ✓ | ✗ | ✗ |
Remarque : seuls les dérivés macOS et Debian sont entièrement pris en charge par le script d'installation. Nous espérons qu'il ne devrait pas échouer sur d'autres distributions Linux, mais il n'essaiera pas d'installer les dépendances des packages. Si vous utilisez une autre distribution, jetez un œil à install.sh
pour déterminer les dépendances que vous devrez peut-être installer avant de l'exécuter.
Téléchargez la source 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 s'installera dans le répertoire site-packages
de l'utilisateur. Si vous souhaitez installer site-packages
dans le système, utilisez l'indicateur -s
:
$ ./install.sh -s
Vous pouvez également installer dans un environnement virtuel (pour LLDB uniquement) comme ceci :
$ ./install.sh -v /path/to/venv -b lldb
Si vous utilisez 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 dispose d'un script d'initialisation ( .lldbinit
pour LLDB ou .gdbinit
pour GDB), configurez-le pour charger Voltron lorsqu'il démarre en recherchant le script de point d'entrée entry.py
. Le chemin complet sera à l’intérieur du package voltron
. Par exemple, sur macOS, il peut s'agir de /Library/Python/2.7/site-packages/voltron/entry.py . Le script install.sh
l'ajoutera automatiquement à votre fichier .gdbinit
ou .lldbinit
s'il détecte GDB ou LLDB dans votre chemin.
LLDB :
command script import /path/to/voltron/entry.py
GDB :
source /path/to/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 target_binary
Sur les anciennes versions de LLDB, vous devez appeler voltron init
après avoir chargé le fichier inférieur :
$ lldb target_binary
(lldb) voltron init
GDB :
$ gdb target_binary
VDB :
$ ./vdbbin target_binary
> script /path/to/voltron/entry.py
WinDbg/CDB n'est pris en charge que 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:pathtopykd.pyd ; !py --global C:pathtovoltronentry.py' target_binary
Dans un autre terminal (j'utilise les volets iTerm), démarrez l'une des vues de l'interface utilisateur. Sur LLDB, WinDbg et GDB, les vues seront mises à jour immédiatement. Sur VDB, ils ne seront pas mis à jour jusqu'à ce que l'inférieur s'arrête (à un point d'arrêt, après une étape, etc.) :
$ voltron view register
$ voltron view stack
$ voltron view disasm
$ voltron view backtrace
Définissez un point d'arrêt et exécutez votre inférieur.
(*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 l'exécution de chaque commande dans la CLI du débogueur, en utilisant le mécanisme de « stop hook » du débogueur. Ainsi, chaque fois que vous avancez ou continuez et atteignez un point d'arrêt, les vues seront mises à jour.
Voir le wiki sur github.
Q. Pourquoi est-ce que je reçois une ImportError
lors du chargement de Voltron ?
A. Vous avez peut-être installé plusieurs versions de Python et avez installé Voltron en utilisant la mauvaise. Voir les instructions d'installation plus détaillées.
Q. FEM ? PEDA? PwnDbg? Le gdbinit de fG ?
A. Toutes les superbes extensions pour GDB. Ces outils fournissent principalement des ensembles de commandes supplémentaires pour les tâches d'exploitation, mais chacun fournit également un affichage « contextuel » avec une vue des registres, de la pile, du code, etc., comme Voltron. Ces outils impriment leur affichage contextuel dans la console du débogueur à chaque arrêt du débogueur. Voltron adopte une approche différente en intégrant un implant de serveur RPC dans le débogueur et en permettant l'attachement de vues provenant d'autres terminaux (ou même de navigateurs Web, ou maintenant en synchronisation avec Binary Ninja), ce qui permet à l'utilisateur de créer une interface multi-fenêtres plus propre pour leur débogueur. Voltron fonctionne très bien avec tous ces outils. Vous pouvez simplement désactiver l'affichage contextuel dans l'extension GDB de votre choix et connecter certaines vues Voltron, tout en bénéficiant de tous les avantages des commandes utiles ajoutées par ces outils.
Consultez le suivi des problèmes sur github pour plus d'informations ou pour soumettre des problèmes.
Si vous rencontrez une ImportError
lors du chargement de Voltron, assurez-vous d'avoir suivi les instructions d'installation de votre plate-forme.
Sur les anciennes versions 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 requis.
Plus d'informations sur la prise en charge 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 plates-formes et d'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 mette pas le feu à vos animaux de compagnie, mais YMMV.
Voir le fichier LICENCE.
Si vous l'utilisez et que vous ne le détestez pas, achetez-moi une bière lors d'une conférence à un moment donné. Cette licence s'étend également aux autres contributeurs - Richo mérite certainement quelques bières pour ses contributions.
Merci à mes anciens employeurs, Assurance et Azimuth Security, de m'avoir donné du temps pour travailler là-dessus.
Accessoires à Richo pour toutes ses contributions à Voltron.
gdbinit de fG! a été l'inspiration originale de ce projet.
Merci à Willi pour la mise en œuvre du support VDB.
Voltron utilise désormais Capstone pour le démontage ainsi que le mécanisme de démontage interne des hôtes du débogueur. Capstone est un désassembleur multi-architecture puissant, open source, sur lequel la prochaine génération d'outils d'ingénierie inverse et de débogage est construite. Vérifiez-le.
Merci à Grazfather pour ses contributions continues.