
Una interfaz PyQt5 para el plugin binjatron de Binary Ninja que incluye funciones de resaltado destinadas a facilitar que los principiantes aprendan sobre ingeniería inversa.
La capacidad de aplicar ingeniería inversa a binarios x86 es una habilidad importante incluso fuera de la industria de la seguridad de la información. Sin embargo, incluso con la abundancia de materiales de formación disponibles, sigue siendo una habilidad difícil de aprender. Muchos estudiantes han expresado su frustración por la cantidad de conocimientos previos necesarios para lograr avances siquiera modestos en binarios sencillos.
Binary Ninja se comercializa a menudo entre estudiantes debido a su coste relativamente bajo, su interfaz limpia y su facilidad de uso. Los lenguajes intermedios de bajo y medio nivel también proporcionan una forma sencilla de entender qué hacen las instrucciones. Este proyecto pretende convertir Binary Ninja en una herramienta aún mejor para principiantes, facilitando la visualización de la ejecución de un binario.
Este proyecto es producto del programa de prácticas de verano de 2017 de NCC Group. Los componentes de depuración visual pueden considerarse un sucesor espiritual de Microcorruption, un CTF de seguridad embebida creado por Matasano Security. Las actualizaciones posteriores se seguirán en https://github.com/ehennenfent/binja_dynamics. NCC Group no se hace responsable de los cambios realizados en el repositorio después del 18 de agosto de 2017.
Dentro de tu carpeta de plugins de Binary Ninja, ejecuta:
git clone https://github.com/ehennenfent/binja_dynamics.git
cd binja_dynamics
./install.sh
Después de cargar un binario, haz clic en el elemento Enable Dynamic Analysis Tools del menú de herramientas. Se abrirá una ventana del depurador que podrás controlar mediante los botones de la barra de herramientas. A medida que avanzas por la ejecución, la interfaz se actualizará en tiempo real para reflejar el estado del programa. Gracias a Binjatron, la instrucción actual y cualquier punto de interrupción se resaltan en la vista del binario. Para cada dirección de memoria y para los registros, el valor se resalta en naranja cuando ha cambiado como resultado de la instrucción anterior. Del mismo modo, la parte superior e inferior del marco de pila actual (así como la ubicación prevista de la dirección de retorno) se resaltan para que a los principiantes les resulte más fácil identificar qué porciones de la memoria son importantes para examinar. El visor de traceback muestra un backtrace de los marcos de pila actuales y proporciona un botón que salta automáticamente la vista del binario a la ubicación dada por la dirección de memoria donde el plugin espera encontrar la dirección de retorno. En algunas funciones, el marco de pila no se desmonta de la forma que el plugin espera, por lo que esta dirección de retorno prevista puede no ser siempre correcta.

(En la captura de pantalla anterior, el puntero base se muestra en verde oliva)
En ocasiones, puede ser necesario consultar el código fuente para comprender el comportamiento exacto de las interfaces. En previsión de ello, muchas de las decisiones de diseño y los detalles de implementación se explican en comentarios en línea.
La wiki sigue siendo relativamente escasa, pero contenido como la lista de obstáculos y el registro de desarrollo puede ser útil para solucionar problemas.
Considera consultar el repositorio binja_sensei para ver ejemplos que pueden ayudarte a empezar.
Excluyendo Binary Ninja, install.sh se encargará de estas dependencias por ti.