
Kit de herramientas de interfaz de usuario extensible para depuradores que proporciona vistas personalizables de registros, desensamblado, pila, memoria, puntos de interrupción y retroceso para LLDB, GDB, VDB y WinDbg.
Voltron es un kit de herramientas extensible para la interfaz de usuario de depuradores, escrito en Python. Su objetivo es mejorar la experiencia del usuario de varios depuradores (LLDB, GDB, VDB y WinDbg) permitiendo la conexión de vistas de utilidad que pueden recuperar y mostrar datos del host del depurador. Al ejecutar estas vistas en otras TTYs, puedes construir una interfaz de usuario de depurador personalizada según tus necesidades.
Voltron no pretende ser todo para todos. No es un reemplazo completo de la CLI de tu depurador. Más bien, busca complementar tu configuración existente y permitirte extender tu depurador de línea de comandos tanto o tan poco como desees. Si solo quieres una vista del contenido de los registros en una ventana junto a tu depurador, puedes hacerlo. Si quieres ir a fondo y tener algo que se parezca más a OllyDbg, también puedes hacerlo.
Se proporcionan vistas incorporadas para:
La configuración del autor se ve algo así:
Cualquier comando del depurador se puede dividir en una vista y resaltar con un lexer Pygments especificado:
Más capturas de pantalla están aquí.
Voltron soporta LLDB, GDB, VDB y WinDbg/CDB (a través de PyKD) y se ejecuta en macOS, Linux y Windows.
El soporte para WinDbg es bastante nuevo; por favor, abre un issue si tienes problemas.
Se soportan las siguientes arquitecturas:
| lldb | gdb | vdb | windbg | |
|---|---|---|---|---|
| x86 | ✓ | ✓ | ✓ | ✓ |
| x86_64 | ✓ | ✓ | ✓ | ✓ |
| arm | ✓ | ✓ | ✓ | ✗ |
| arm64 | ✓ | ✗ | ✗ | ✗ |
| powerpc | ✗ | ✓ | ✗ | ✗ |
Nota: Solo se soportan completamente macOS y derivados de Debian por el script de instalación. No debería fallar en otras distribuciones de Linux, pero no intentará instalar las dependencias de paquetes. Si usas otra distribución, echa un vistazo a install.sh para determinar qué dependencias podrías necesitar instalar antes de ejecutarlo.
Descarga el código fuente y ejecuta el script de instalación:
$ git clone https://github.com/snare/voltron
$ cd voltron
$ ./install.sh
Por defecto, el script de instalación instalará en el directorio site-packages del usuario. Si deseas instalar en el site-packages del sistema, usa la bandera -s:
$ ./install.sh -s
También puedes instalar en un entorno virtual (solo para LLDB) de la siguiente manera:
$ ./install.sh -v /ruta/a/venv -b lldb
Si estás en Windows sin un shell, tienes problemas de instalación o prefieres instalarlo manualmente, consulta la documentación de instalación manual.
Si tu depurador tiene un script de inicio (.lldbinit para LLDB o .gdbinit para GDB), configúralo para cargar Voltron cuando arranque, importando 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 tu .gdbinit o .lldbinit automáticamente si detecta GDB o LLDB en tu PATH.
LLDB:
command script import /ruta/a/voltron/entry.py
GDB:
source /ruta/a/voltron/entry.py
Inicia tu depurador e inicializa Voltron manualmente si es necesario.
En versiones recientes de LLDB no necesitas inicializar Voltron manualmente:
$ lldb binary_target
En versiones antiguas de LLDB necesitas llamar a voltron init después de cargar el inferior:
$ lldb binary_target
(lldb) voltron init
GDB:
$ gdb binary_target
VDB:
$ ./vdbbin binary_target
> script /ruta/a/voltron/entry.py
WinDbg/CDB solo se soporta ejecutado a través de Bash con un entorno de usuario Linux. El autor prueba con Git Bash y ConEmu. PyKD y Voltron se pueden cargar en un solo comando al iniciar el depurador:
$ cdb -c '.load C:\ruta\a\pykd.pyd ; !py --global C:\ruta\a\voltron\entry.py' binary_target
En otra terminal (yo uso paneles de iTerm) inicia una de las vistas de la interfaz. 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 alcance el punto de interrupción, las vistas se actualizarán para reflejar el estado actual de registros, pila, memoria, etc. Las vistas se actualizan después de que se ejecuta cada comando en la CLI del depurador, utilizando el mecanismo de "gancho de parada" del depurador. Así que cada vez que avances o continúes y golpees un punto de interrupción, las vistas se actualizarán.
Consulta la wiki en github.
P. ¿Por qué recibo un ImportError al cargar Voltron?
R. Puede que tengas varias versiones de Python instaladas y hayas instalado Voltron con la incorrecta. Consulta las instrucciones de instalación más detalladas.
P. ¿GEF? ¿PEDA? ¿PwnDbg? ¿fG's gdbinit?
R. Todas son extensiones excelentes para GDB. Estas herramientas proporcionan principalmente conjuntos de comandos adicionales para tareas de explotación, pero cada una también proporciona una pantalla de "contexto" con una vista de registros, pila, código, etc., como Voltron. Estas herramientas imprimen su pantalla de contexto en la consola del depurador cada vez que el depurador se detiene. Voltron adopta un enfoque diferente al incrustar un implante de servidor RPC en el depurador y permitir la conexión de vistas desde otras terminales (o incluso navegadores web, o ahora sincronizando con Binary Ninja), lo que permite al usuario construir una interfaz de múltiples ventanas más limpia para su depurador. Voltron funciona muy bien junto con todas estas herramientas. Puedes simplemente deshabilitar la pantalla de contexto en tu extensión GDB preferida y conectar algunas vistas de Voltron, mientras aún obtienes todos los beneficios de los comandos útiles que añaden estas herramientas.
Consulta el rastreador de issues en github para obtener más información o para reportar problemas.
Si estás experimentando un ImportError al cargar Voltron, asegúrate de haber seguido las instrucciones de instalación para tu plataforma.
En versiones antiguas de LLDB, el comando voltron init debe ejecutarse manualmente después de cargar el objetivo de depuración, ya que se debe cargar un objetivo antes de que se puedan instalar los ganchos de Voltron. Voltron intentará registrar automáticamente su manejador de eventos e informará al usuario si se requiere voltron init.
Más información sobre el soporte de 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 mucho, la combinación más utilizada. Esperemos que Voltron no prenda fuego a tus mascotas, pero tu experiencia puede variar.
Consulta el archivo LICENSE.
Si usas esto y no lo odias, cómprame una cerveza en alguna conferencia. Esta licencia también se extiende a otros colaboradores - richo definitivamente merece algunas cervezas por sus contribuciones.
Gracias a mis antiguos empleadores Assurance y Azimuth Security por darme tiempo para trabajar en esto.
Reconocimientos a richo por todas sus contribuciones a Voltron.
fG!'s gdbinit fue la inspiración original para este proyecto.
Gracias a Willi por implementar el soporte para VDB.
Voltron ahora usa Capstone para desensamblado, además del mecanismo interno de desensamblado de los hosts del depurador. Capstone es un desensamblador potente, de código abierto y multiarquitectura sobre el cual se están construyendo la próxima generación de herramientas de ingeniería inversa y depuración. Échale un vistazo.
Gracias a grazfather por sus contribuciones continuas.