
L'estensione open-source del team FLARE per aggiungere lo scripting Python 3 a Ghidra.
Ghidrathon è un'estensione di Ghidra che aggiunge funzionalità di scripting Python 3 a Ghidra. Perché? Ghidra supporta nativamente lo scripting in Java e Jython. Purtroppo, molti strumenti di analisi open-source, come capa, Unicorn Engine, angr, ecc., sono scritti in Python 3, rendendo difficile e, in alcuni casi, impossibile utilizzare questi strumenti in Ghidra. Inoltre, la community della sicurezza ha rilasciato diversi ottimi plugin per altri framework SRE come IDA Pro e Binary Ninja, ma anche in questo caso, poiché molti di questi plugin usano Python 3, è difficile portarli su Ghidra. Ghidrathon ti aiuta a usare strumenti Python 3 esistenti e a svilupparne di nuovi in Ghidra, e a scrivere script per Ghidra usando Python moderno in modo da integrarsi strettamente con l'interfaccia utente di Ghidra. Sostituisce la precedente estensione Python 2.7 implementata tramite Jython. Questo include la finestra dell'interprete interattivo, l'integrazione con il Ghidra Script Manager e l'esecuzione di script in modalità headless di Ghidra.

Consulta il nostro esempio di script Python 3 per Ghidra qui per uno sguardo più approfondito sulla scrittura di script Python 3 per Ghidra.
Scopri:
Segui i seguenti passaggi per installare Ghidrathon nel tuo ambiente Ghidra:
$ python -m pip install -r requirements.txt
$ python ghidrathon_configure.py <absolute_path_to_ghidra_install_dir>
Nota: ghidrathon_configure.py per impostazione predefinita tenta di scrivere un file chiamato ghidrathon.save in <absolute_path_to_ghidra_install_dir>. Puoi specificare il percorso in cui viene scritto questo file impostando la variabile d'ambiente GHIDRATHON_SAVE_PATH prima di eseguire ghidrathon_configure.py e Ghidra:
$ export GHIDRATHON_SAVE_PATH="/path/to/custom/dir" # Linux/MacOS
$ set GHIDRATHON_SAVE_PATH="C:\path\to\custom\dir" # Windows
Nota: potrebbe esserti richiesto di impostare una variabile d'ambiente chiamata JAVA_HOME. Questa deve referenziare il percorso assoluto del JDK che hai configurato per la tua installazione di Ghidra.
.zip) in Ghidra:
File > Install Extensions...+.zip)OkInstall Anyway se viene visualizzata la finestra Extension Version Mismatch.zip) in <absolute_path_to_ghidra_install_dir>\Ghidra\ExtensionsPuoi far usare a Ghidrathon un interprete Python diverso eseguendo il passaggio 2 con il nuovo interprete Python.
Puoi usare un ambiente virtuale Python con Ghidrathon eseguendo il passaggio 2 dall'ambiente virtuale. Per passare a un ambiente virtuale diverso, esegui semplicemente il passaggio 2 dal nuovo ambiente virtuale.
La finestra dell'interprete fornisce accesso interattivo al tuo interprete Python 3. Fai clic su "Window" e seleziona "Ghidrathon" per aprire la finestra dell'interprete.

Ghidrathon si integra direttamente con il Ghidra Script Manager consentendoti di creare, modificare ed eseguire script Python 3 all'interno di Ghidra. Fai clic su "Create New Script" e seleziona "Python 3" per creare un nuovo script Python 3. Fai clic su "Run Script" o "Run Editors's Script" per eseguire il tuo script Python 3 e controlla la finestra Ghidra Console per l'output dello script.

Ghidrathon ti aiuta a eseguire script Python 3 in modalità headless di Ghidra. Esegui lo script analyzeHeadless situato nella cartella di installazione di Ghidra, specifica il tuo script Python 3 e controlla la finestra della console per l'output dello 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)
Per maggiori informazioni sull'esecuzione di Ghidra in modalità headless, consulta <absolute_path_to_ghidra_install_dir>/support/analyzeHeadlessREADME.html.
Una delle nostre più grandi motivazioni nello sviluppo di Ghidrathon è stata consentire l'uso di moduli Python 3 di terze parti in Ghidra. Puoi installare un modulo e iniziare a usarlo all'interno di Ghidra proprio come faresti in una tipica configurazione Python. Questo vale anche per i moduli installati in precedenza. Ad esempio, possiamo installare e usare Unicorn per emulare codice ARM all'interno di Ghidra.

Ghidrathon offre un'esperienza di scripting che rispecchia fedelmente le estensioni Java e Jython di Ghidra, inclusa la messa a disposizione delle variabili di stato di GhidraScript, ad es. currentProgram, e dei metodi di FlatProgramAPI, ad es. findBytes, nello scope builtins di Python. Questo significa che tutti i moduli Python importati dal tuo codice hanno accesso a queste variabili e metodi. Ghidrathon si discosta leggermente dalle estensioni Java e Jython di Ghidra esponendo le variabili di stato di GhidraScript come chiamate di funzione Python anziché accessi diretti; ad es. il tuo codice Python 3 deve accedere a currentProgram usando la chiamata di funzione currentProgram(). Questa piccola modifica garantisce che al tuo codice Python 3 vengano fornite le corrette variabili di stato di GhidraScript durante l'esecuzione. Consulta il nostro esempio di script Python 3 per Ghidra qui per uno sguardo più approfondito sulla scrittura di script Python 3 per Ghidra.
Ghidrathon collega la tua installazione Python locale a Ghidra usando il progetto open-source Jep. In sostanza, il tuo interprete Python locale è in esecuzione all'interno di Ghidra con accesso a tutti i tuoi pacchetti Python e alla API di scripting standard di Ghidra. Ghidrathon funziona anche con ambienti virtuali Python, aiutandoti a creare, isolare e gestire pacchetti che potresti voler installare solo per l'uso in Ghidra. Poiché Ghidrathon usa la tua installazione Python locale, hai il controllo sulla versione di Python e sull'ambiente in esecuzione all'interno di Ghidra.
Per maggiori informazioni su come Jep incorpora Python in Java, consulta la sua documentazione qui.
Ghidrathon usa la libreria open-source Jep che utilizza la Java Native Interface (JNI) per incorporare Python nella JVM. Gli sviluppatori di Ghidra sconsigliano l'uso di JNI in Ghidra per i motivi discussi qui.
| Strumento | Versione | Fonte |
|---|
| 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 |