
La extensión de código abierto del equipo FLARE para añadir scripting en Python 3 a Ghidra.
Ghidrathon es una extensión de Ghidra que añade capacidades de scripting en Python 3 a Ghidra. ¿Por qué? Ghidra admite scripting de forma nativa en Java y Jython. Desafortunadamente, muchas herramientas de análisis de código abierto, como capa, Unicorn Engine, angr, etc., están escritas en Python 3, lo que dificulta y, en algunos casos, imposibilita el uso de estas herramientas en Ghidra. Además, la comunidad de seguridad ha publicado varios plugins excelentes para otros frameworks de SRE como IDA Pro y Binary Ninja, pero nuevamente, debido a que muchos de estos plugins usan Python 3, es difícil portarlos a Ghidra. Ghidrathon te ayuda a usar herramientas existentes y desarrollar nuevas herramientas Python 3 en Ghidra, y a scriptear Ghidra usando Python moderno de una manera que se integra estrechamente con la interfaz de usuario de Ghidra. Reemplaza la extensión Python 2.7 existente implementada mediante Jython. Esto incluye la ventana del intérprete interactivo, la integración con el Ghidra Script Manager y la ejecución de scripts en modo headless de Ghidra.

Consulta nuestro ejemplo de script Python 3 para Ghidra aquí para ver más de cerca cómo escribir scripts Python 3 para Ghidra.
Consulta:
Sigue los siguientes pasos para instalar Ghidrathon en tu entorno de Ghidra:
$ python -m pip install -r requirements.txt
$ python ghidrathon_configure.py <absolute_path_to_ghidra_install_dir>
Nota: ghidrathon_configure.py por defecto intenta escribir un archivo llamado ghidrathon.save en <absolute_path_to_ghidra_install_dir>. Puedes especificar la ruta donde se escribe este archivo estableciendo la variable de entorno GHIDRATHON_SAVE_PATH antes de ejecutar ghidrathon_configure.py y Ghidra:
$ export GHIDRATHON_SAVE_PATH="/path/to/custom/dir" # Linux/MacOS
$ set GHIDRATHON_SAVE_PATH="C:\path\to\custom\dir" # Windows
Nota: es posible que se te solicite establecer una variable de entorno llamada JAVA_HOME. Esta debe hacer referencia a la ruta absoluta del JDK que has configurado para tu instalación de Ghidra.
.zip) en Ghidra:
File > Install Extensions...+.zip)OkInstall Anyway si aparece la ventana Extension Version Mismatch.zip) a <absolute_path_to_ghidra_install_dir>\Ghidra\ExtensionsPuedes cambiar Ghidrathon para que use un intérprete de Python diferente ejecutando el paso 2 con el nuevo intérprete de Python.
Puedes usar un entorno virtual de Python con Ghidrathon ejecutando el paso 2 desde el entorno virtual. Para cambiar a un entorno virtual diferente, simplemente ejecuta el paso 2 desde el nuevo entorno virtual.
La ventana del intérprete proporciona acceso interactivo a tu intérprete de Python 3. Haz clic en "Window" y selecciona "Ghidrathon" para abrir la ventana del intérprete.

Ghidrathon se integra directamente con el Ghidra Script Manager, lo que te permite crear, editar y ejecutar scripts de Python 3 dentro de Ghidra. Haz clic en "Create New Script" y selecciona "Python 3" para crear un nuevo script de Python 3. Haz clic en "Run Script" o "Run Editors's Script" para ejecutar tu script de Python 3 y revisa la ventana de la consola de Ghidra para ver la salida del script.

Ghidrathon te ayuda a ejecutar scripts de Python 3 en modo headless de Ghidra. Ejecuta el script analyzeHeadless ubicado en tu carpeta de instalación de Ghidra, especifica tu script de Python 3 y revisa la ventana de la consola para ver la salida del script.
$ analyzeHeadless C:\Users\wampus example -process example.o -postScript ghidrathon_example.py
[...]
INFO SCRIPT: C:\Users\wampus\.ghidra\.ghidra_10.0.3_PUBLIC\Extensions\Ghidrathon-master\ghidra_scripts\ghidrathon_example.py (HeadlessAnalyzer)
Function _init @ 0x101000: 3 blocks, 8 instructions
Function FUN_00101020 @ 0x101020: 1 blocks, 2 instructions
Function __cxa_finalize @ 0x101040: 1 blocks, 2 instructions
Function printf @ 0x101050: 1 blocks, 2 instructions
Function _start @ 0x101060: 1 blocks, 13 instructions
Function deregister_tm_clones @ 0x101090: 4 blocks, 9 instructions
Function register_tm_clones @ 0x1010c0: 4 blocks, 14 instructions
Function __do_global_dtors_aux @ 0x101100: 5 blocks, 14 instructions
[...]
INFO REPORT: Post-analysis succeeded for file: /example.o (HeadlessAnalyzer)
INFO REPORT: Save succeeded for processed file: /example.o (HeadlessAnalyzer)
Para obtener más información sobre cómo ejecutar Ghidra en modo headless, consulta <absolute_path_to_ghidra_install_dir>/support/analyzeHeadlessREADME.html.
Una de nuestras mayores motivaciones al desarrollar Ghidrathon fue permitir el uso de módulos de Python 3 de terceros en Ghidra. Puedes instalar un módulo y comenzar a usarlo dentro de Ghidra igual que en una configuración típica de Python. Esto también aplica a módulos que hayas instalado previamente. Por ejemplo, podemos instalar y usar Unicorn para emular código ARM dentro de Ghidra.

Ghidrathon proporciona una experiencia de scripting que refleja fielmente las extensiones Java y Jython de Ghidra, lo que incluye poner a disposición, en el ámbito builtins de Python, las variables de instancia de estado de GhidraScript, p. ej. currentProgram, y los métodos de FlatProgramAPI, p. ej. findBytes. Esto significa que todos los módulos de Python importados por tu código tienen acceso a estas variables y métodos. Ghidrathon difiere ligeramente de las extensiones Java y Jython de Ghidra al exponer las variables de estado de GhidraScript como llamadas a funciones de Python en lugar de accesos directos; por ejemplo, tu código Python 3 debe acceder a currentProgram mediante la llamada a función currentProgram(). Este pequeño cambio garantiza que tu código Python 3 reciba las variables de estado correctas de GhidraScript durante la ejecución. Consulta nuestro ejemplo de script Python 3 para Ghidra aquí para ver más de cerca cómo escribir scripts Python 3 para Ghidra.
Ghidrathon vincula tu instalación local de Python con Ghidra utilizando el proyecto de código abierto Jep. Esencialmente, tu intérprete local de Python se ejecuta dentro de Ghidra con acceso a todos tus paquetes de Python y a la API estándar de scripting de Ghidra. Ghidrathon también funciona con entornos virtuales de Python, ayudándote a crear, aislar y gestionar paquetes que quizás solo desees tener instalados para usar en Ghidra. Debido a que Ghidrathon usa tu instalación local de Python, tienes control sobre la versión de Python y el entorno que se ejecuta dentro de Ghidra.
Para obtener más información sobre cómo Jep funciona para incrustar Python en Java, consulta su documentación aquí.
Ghidrathon utiliza la librería de código abierto Jep, que usa la Interfaz Nativa de Java (JNI) para incrustar Python en la JVM. Los desarrolladores de Ghidra desaconsejan el uso de JNI en Ghidra por las razones discutidas aquí.
| Herramienta | Versión | Fuente |
|---|
| Ghidrathon | >= 4.0.0 | https://github.com/mandiant/Ghidrathon/releases |
| Python | >= 3.8.0 | https://www.python.org/downloads |
| Jep | == 4.2.0 | https://pypi.org/project/jep |
| Ghidra | >= 10.3.2 | https://github.com/NationalSecurityAgency/ghidra/releases |
| Java | >= 17.0.0 | https://adoptium.net/temurin/releases |