
Die Open-Source-Erweiterung des FLARE-Teams, um Python-3-Skripting zu Ghidra hinzuzufügen.
Ghidrathon ist eine Ghidra-Erweiterung, die Ghidra um Python-3-Skriptfähigkeiten erweitert. Warum? Ghidra unterstützt nativ Skripting in Java und Jython. Leider sind viele Open-Source-Analysetools wie capa, Unicorn Engine, angr usw. in Python 3 geschrieben, was es schwierig und in manchen Fällen unmöglich macht, diese Tools in Ghidra zu verwenden. Darüber hinaus hat die Sicherheitscommunity mehrere großartige Plugins für andere SRE-Frameworks wie IDA Pro und Binary Ninja veröffentlicht, aber auch hier ist es schwierig, sie auf Ghidra zu portieren, da viele dieser Plugins Python 3 verwenden. Ghidrathon hilft Ihnen, vorhandene Python-3-Tools in Ghidra zu verwenden und neue zu entwickeln sowie Ghidra mit modernem Python zu scripten, und zwar in einer Weise, die eng in die Benutzeroberfläche von Ghidra integriert ist. Es ersetzt die vorhandene, über Jython implementierte Python-2.7-Erweiterung. Dies umfasst das interaktive Interpreterfenster, die Integration in den Ghidra Script Manager und die Skriptausführung im Headless-Modus von Ghidra.

Einblicke in das Schreiben von Python-3-Skripten für Ghidra erhalten Sie in unserem Ghidra-Python-3-Skriptbeispiel hier.
Siehe auch:
Führen Sie die folgenden Schritte aus, um Ghidrathon in Ihrer Ghidra-Umgebung zu installieren:
$ python -m pip install -r requirements.txt
$ python ghidrathon_configure.py <absolute_path_to_ghidra_install_dir>
Hinweis: ghidrathon_configure.py versucht standardmäßig, eine Datei namens ghidrathon.save in <absolute_path_to_ghidra_install_dir> zu schreiben. Sie können den Pfad, an dem diese Datei geschrieben wird, festlegen, indem Sie die Umgebungsvariable GHIDRATHON_SAVE_PATH setzen, bevor Sie ghidrathon_configure.py und Ghidra ausführen:
$ export GHIDRATHON_SAVE_PATH="/path/to/custom/dir" # Linux/MacOS
$ set GHIDRATHON_SAVE_PATH="C:\path\to\custom\dir" # Windows
Hinweis: Möglicherweise werden Sie aufgefordert, eine Umgebungsvariable namens JAVA_HOME zu setzen. Diese sollte den absoluten Pfad des JDK referenzieren, das Sie für Ihre Ghidra-Installation konfiguriert haben.
.zip) in Ghidra:
File > Install Extensions...+.zip)OkInstall Anyway, wenn das Fenster Extension Version Mismatch angezeigt wird.zip) nach <absolute_path_to_ghidra_install_dir>\Ghidra\ExtensionsSie können Ghidrathon auf einen anderen Python-Interpreter umstellen, indem Sie Schritt 2 mit dem neuen Python-Interpreter ausführen.
Sie können eine Python-Virtual-Environment mit Ghidrathon verwenden, indem Sie Schritt 2 aus der Virtual-Environment heraus ausführen. Um zu einer anderen Virtual-Environment zu wechseln, führen Sie einfach Schritt 2 aus der neuen Virtual-Environment aus.
Das Interpreterfenster bietet interaktiven Zugriff auf Ihren Python-3-Interpreter. Klicken Sie auf "Window" und wählen Sie "Ghidrathon", um das Interpreterfenster zu öffnen.

Ghidrathon integriert sich direkt in den Ghidra Script Manager und ermöglicht es Ihnen, Python-3-Skripte innerhalb von Ghidra zu erstellen, zu bearbeiten und auszuführen. Klicken Sie auf "Create New Script" und wählen Sie "Python 3", um ein neues Python-3-Skript zu erstellen. Klicken Sie auf "Run Script" oder "Run Editors's Script", um Ihr Python-3-Skript auszuführen, und prüfen Sie das Ghidra-Konsolenfenster auf die Skriptausgabe.

Ghidrathon hilft Ihnen, Python-3-Skripte im Headless-Modus von Ghidra auszuführen. Führen Sie das Skript analyzeHeadless in Ihrem Ghidra-Installationsordner aus, geben Sie Ihr Python-3-Skript an und prüfen Sie das Konsolenfenster auf die Skriptausgabe.
$ 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)
Weitere Informationen zum Ausführen von Ghidra im Headless-Modus finden Sie in <absolute_path_to_ghidra_install_dir>/support/analyzeHeadlessREADME.html.
Eine unserer größten Motivationen bei der Entwicklung von Ghidrathon war es, die Verwendung von Python-3-Modulen von Drittanbietern in Ghidra zu ermöglichen. Sie können ein Modul installieren und es in Ghidra verwenden, genau wie in einer typischen Python-Umgebung. Dies gilt auch für Module, die Sie bereits installiert haben. Beispielsweise können wir Unicorn installieren und verwenden, um ARM-Code in Ghidra zu emulieren.

Ghidrathon bietet eine Skripterfahrung, die eng an die Java- und Jython-Erweiterungen von Ghidra angelehnt ist, einschließlich der Bereitstellung von GhidraScript-Zustandsvariablen, z. B. currentProgram, und von FlatProgramAPI-Methoden, z. B. findBytes
im Python-builtins-Bereich. Das bedeutet, dass alle Python-Module, die von Ihrem Code importiert werden, Zugriff auf diese Variablen und Methoden haben. Ghidrathon weicht leicht von den Java- und Jython-Erweiterungen von Ghidra ab, indem es GhidraScript-Zustandsvariablen
als Python-Funktionsaufrufe statt als direkte Zugriffe bereitstellt, z. B. muss Ihr Python-3-Code auf currentProgram über den Funktionsaufruf currentProgram() zugreifen. Diese kleine Änderung stellt sicher, dass Ihrem Python-3-Code während der Ausführung die korrekten GhidraScript-Zustandsvariablen zur Verfügung gestellt werden. Einblicke in das Schreiben von Python-3-Skripten für Ghidra erhalten Sie in unserem Ghidra-Python-3-Skriptbeispiel hier.
Ghidrathon verbindet Ihre lokale Python-Installation mithilfe des Open-Source-Projekts Jep mit Ghidra. Im Wesentlichen läuft Ihr lokaler Python-Interpreter in Ghidra und hat Zugriff auf alle Ihre Python-Pakete und die standardmäßige Ghidra-Skripting-API. Ghidrathon funktioniert auch mit Python-Virtual-Environments und hilft Ihnen, Pakete zu erstellen, zu isolieren und zu verwalten, die Sie möglicherweise nur für die Verwendung in Ghidra installiert haben möchten. Da Ghidrathon Ihre lokale Python-Installation verwendet, haben Sie die Kontrolle über die Python-Version und die Umgebung, die in Ghidra läuft.
Weitere Informationen darüber, wie Jep funktioniert, um Python in Java einzubetten, finden Sie in der Dokumentation hier.
Ghidrathon verwendet die Open-Source-Bibliothek Jep, die das Java Native Interface (JNI) verwendet, um Python in die JVM einzubetten. Die Ghidra-Entwickler raten aus Gründen, die hier erörtert werden, von der Verwendung von JNI in Ghidra ab.
| Werkzeug | Version | Quelle |
|---|
| 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 |