Voltron es un conjunto de herramientas de interfaz de usuario de depuración extensible escrito en Python. Su objetivo es mejorar la experiencia del usuario de varios depuradores (LLDB, GDB, VDB y WinDbg) al permitir adjuntar vistas de utilidades que pueden recuperar y mostrar datos del host del depurador. Al ejecutar estas vistas en otros TTY, puede crear una interfaz de usuario del depurador personalizada que se adapte a sus necesidades.
Voltron no pretende ser todo para todos. No es un reemplazo total de la CLI de su depurador. Más bien, su objetivo es complementar su configuración existente y permitirle ampliar su depurador CLI tanto como desee. Si solo desea ver el contenido del registro en una ventana junto a su depurador, puede hacerlo. Si quieres hacer todo lo posible y tener algo que se parezca más a OllyDbg, también puedes hacerlo.
Se proporcionan vistas integradas para:
La configuración del autor se parece a esto:
Cualquier comando del depurador se puede dividir en una vista y resaltar con un lexer de Pygments específico:
Más capturas de pantalla están aquí.
Voltron es compatible con LLDB, GDB, VDB y WinDbg/CDB (a través de PyKD) y se ejecuta en macOS, Linux y Windows.
La compatibilidad con WinDbg aún es bastante nueva; abra un problema si tiene problemas.
Se admiten las siguientes arquitecturas:
lldb | gdb | vdb | viento | |
---|---|---|---|---|
x86 | ✓ | ✓ | ✓ | ✓ |
x86_64 | ✓ | ✓ | ✓ | ✓ |
brazo | ✓ | ✓ | ✓ | ✗ |
brazo64 | ✓ | ✗ | ✗ | ✗ |
powerpc | ✗ | ✓ | ✗ | ✗ |
Nota: Sólo los derivados de macOS y Debian son totalmente compatibles con el script de instalación. Es de esperar que no falle en otras distribuciones de Linux, pero no intentará instalar dependencias de paquetes. Si está utilizando otra distribución, eche un vistazo a install.sh
para determinar qué dependencias podría necesitar instalar antes de ejecutarlo.
Descargue la fuente y ejecute el script de instalación:
$ git clone https://github.com/snare/voltron
$ cd voltron
$ ./install.sh
De forma predeterminada, el script de instalación se instalará en el directorio site-packages
del usuario. Si desea instalar los site-packages
en el sistema, utilice el indicador -s
:
$ ./install.sh -s
También puede instalar en un entorno virtual (solo para LLDB) como este:
$ ./install.sh -v /path/to/venv -b lldb
Si está en Windows sin shell, tiene problemas para instalar o prefiere instalar manualmente, consulte la documentación de instalación manual.
Si su depurador tiene un script de inicio ( .lldbinit
para LLDB o .gdbinit
para GDB), configúrelo para cargar Voltron cuando se inicie obteniendo el script de punto de entrada entry.py
. La ruta completa estará dentro del paquete voltron
. Por ejemplo, en macOS podría ser /Library/Python/2.7/site-packages/voltron/entry.py . El script install.sh
agregará esto a su archivo .gdbinit
o .lldbinit
automáticamente si detecta GDB o LLDB en su ruta.
LLDB:
command script import /path/to/voltron/entry.py
BGF:
source /path/to/voltron/entry.py
Inicie su depurador e inicialice Voltron manualmente si es necesario.
En versiones recientes de LLDB no es necesario inicializar Voltron manualmente:
$ lldb target_binary
En versiones anteriores de LLDB necesitas llamar voltron init
después de cargar el inferior:
$ lldb target_binary
(lldb) voltron init
BGF:
$ gdb target_binary
VDB:
$ ./vdbbin target_binary
> script /path/to/voltron/entry.py
WinDbg/CDB solo se puede ejecutar a través de Bash con un usuario de Linux. El autor prueba con Git Bash y ConEmu. PyKD y Voltron se pueden cargar con un solo comando al iniciar el depurador:
$ cdb -c '.load C:pathtopykd.pyd ; !py --global C:pathtovoltronentry.py' target_binary
En otra terminal (yo uso paneles de iTerm), inicie una de las vistas de la interfaz de usuario. En LLDB, WinDbg y GDB las vistas se actualizarán inmediatamente. En VDB no se actualizarán hasta que el inferior se detenga (en un punto de interrupción, después de un paso, etc.):
$ voltron view register
$ voltron view stack
$ voltron view disasm
$ voltron view backtrace
Establece un punto de interrupción y ejecuta tu inferior.
(*db) b main
(*db) run
Cuando el depurador alcanza el punto de interrupción, las vistas se actualizarán para reflejar el estado actual de los registros, la pila, la memoria, etc. Las vistas se actualizan después de ejecutar cada comando en la CLI del depurador, utilizando el mecanismo de "enganche de parada" del depurador. Entonces, cada vez que das un paso o continúas y llegas a un punto de interrupción, las vistas se actualizarán.
Vea la wiki en github.
P. ¿Por qué recibo un ImportError
al cargar Voltron?
R. Es posible que tenga varias versiones de Python instaladas y haya instalado Voltron usando la incorrecta. Consulte las instrucciones de instalación más detalladas.
P. ¿ FMAM? PEDA? ¿PwnDbg? ¿Gdbinit de fG?
R. Todas las extensiones súper geniales para GDB. Estas herramientas proporcionan principalmente conjuntos de comandos adicionales para tareas de explotación, pero cada una también proporciona una visualización de "contexto" con una vista de registros, pila, código, etc., como Voltron. Estas herramientas imprimen su visualización de contexto en la consola del depurador cada vez que se detiene el depurador. Voltron adopta un enfoque diferente al incorporar un implante de servidor RPC en el depurador y permitir la conexión de vistas desde otros terminales (o incluso navegadores web, o ahora sincronizando con Binary Ninja), lo que permite al usuario crear una interfaz de ventanas múltiples más limpia para su depurador. Voltron funciona muy bien junto con todas estas herramientas. Puede simplemente desactivar la visualización de contexto en la extensión GDB de su elección y conectar algunas vistas de Voltron, mientras sigue obteniendo todos los beneficios de los útiles comandos agregados por estas herramientas.
Consulte el rastreador de problemas en github para obtener más información o enviar problemas.
Si experimenta un ImportError
al cargar Voltron, asegúrese de haber seguido las instrucciones de instalación para su plataforma.
En versiones anteriores de LLDB, el comando voltron init
debe ejecutarse manualmente después de cargar el destino de depuración, ya que se debe cargar un destino antes de que se puedan instalar los ganchos de Voltron. Voltron intentará registrar automáticamente su controlador de eventos e informará al usuario si se requiere voltron init
.
Más información sobre la compatibilidad con WinDbg/CDB aquí.
Los autores utilizan principalmente Voltron con la versión más reciente de LLDB en macOS. Intentaremos probar todo en tantas plataformas y arquitecturas como sea posible antes de los lanzamientos, pero LLDB/macOS/x64 será, con diferencia, la combinación más utilizada. Ojalá Voltron no prenda fuego a tus mascotas, sino YMMV.
Ver el archivo de LICENCIA.
Si usas esto y no lo odias, cómprame una cerveza en una conferencia alguna vez. Esta licencia también se extiende a otros contribuyentes: Richo definitivamente merece unas cuantas cervezas por sus contribuciones.
Gracias a mis antiguos empleadores Assurance y Azimuth Security por darme tiempo para trabajar en esto.
Felicitaciones a Richo por todas sus contribuciones a Voltron.
gdbinit de fG! fue la inspiración original para este proyecto.
Gracias a Willi por implementar el soporte VDB.
Voltron ahora usa Capstone para el desmontaje, así como el mecanismo de desmontaje interno de los hosts del depurador. Capstone es un potente desensamblador de múltiples arquitecturas, de código abierto, sobre el cual se está construyendo la próxima generación de herramientas de depuración e ingeniería inversa. Échale un vistazo.
Gracias a Grazfather por sus continuas contribuciones.