
Die Open-Source-Erweiterung des FLARE-Teams, um Python-3-Skripting zu Ghidra hinzuzufügen.
# Ghidrathon
[](https://github.com/mandiant/Ghidrathon/releases)
[](https://github.com/mandiant/Ghidrathon/releases)
[](https://github.com/mandiant/ghidrathon/actions/workflows/tests.yml)
[](LICENSE.txt)
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](https://github.com/mandiant/capa), [Unicorn Engine](https://github.com/unicorn-engine/unicorn), [angr](https://github.com/angr/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](https://github.com/mandiant/ghidrathon/blob/main/ghidra_scripts/ghidrathon_example.py).
Siehe auch:
- Die Übersicht in unserem ersten [Ghidrathon-Blogbeitrag](https://www.mandiant.com/resources/blog/ghidrathon-snaking-ghidra-python-3-scripting)
## Ghidrathon installieren
### Voraussetzungen
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 |
Führen Sie die folgenden Schritte aus, um Ghidrathon in Ihrer Ghidra-Umgebung zu installieren:
1. Laden Sie das neueste Ghidrathon-[Release](https://github.com/mandiant/Ghidrathon/releases) herunter und entpacken Sie es.
2. Führen Sie die folgenden Befehle mit dem Python-Interpreter aus, den Sie mit Ghidrathon verwenden möchten ([requirements.txt](https://github.com/mandiant/Ghidrathon/blob/main/util/requirements.txt) und [ghidrathon_configure.py](https://github.com/mandiant/Ghidrathon/blob/main/util/ghidrathon_configure.py) sind im Release enthalten):
```
$ 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.
3. Installieren Sie die Ghidrathon-Erweiterung (`.zip`) in Ghidra:
* Verwenden der Ghidra-Benutzeroberfläche:
* Navigieren Sie zu `File > Install Extensions...`
* Klicken Sie auf die grüne Schaltfläche `+`
* Navigieren Sie zur Ghidrathon-Erweiterung (`.zip`)
* Klicken Sie auf `Ok`
* Optional
* Wählen Sie `Install Anyway`, wenn das Fenster `Extension Version Mismatch` angezeigt wird
* Verwenden einer eingeschränkten Umgebung:
* Entpacken Sie die Ghidrathon-Erweiterung (`.zip`) nach `<absolute_path_to_ghidra_install_dir>\Ghidra\Extensions`
### Wechseln zwischen Python-Interpretern
Sie können Ghidrathon auf einen anderen Python-Interpreter umstellen, indem Sie Schritt `2` mit dem neuen Python-Interpreter ausführen.
### Verwenden von Python-Virtual-Environments
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.
## Verwenden von Ghidrathon
### Python-3-Interpreterfenster
Das Interpreterfenster bietet interaktiven Zugriff auf Ihren Python-3-Interpreter. Klicken Sie auf "Window" und wählen Sie "Ghidrathon", um das Interpreterfenster zu öffnen.

### Integration in den Ghidra Script Manager
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.

### Ghidra-Headless-Modus
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`.
## Python-Module von Drittanbietern
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.

## Schreiben von Ghidra-Python-3-Skripten
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](https://github.com/mandiant/ghidrathon/blob/main/ghidra_scripts/ghidrathon_example.py).
## Wie funktioniert das?
Ghidrathon verbindet Ihre lokale Python-Installation mithilfe des Open-Source-Projekts [Jep](https://github.com/ninia/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](https://github.com/ninia/jep/wiki/How-Jep-Works).
## Überlegungen
Ghidrathon verwendet die Open-Source-Bibliothek [Jep](https://github.com/ninia/jep), die das Java Native Interface (JNI) verwendet, um Python in die JVM einzubetten. Die Ghidra-Entwickler raten aus Gründen, die [hier](https://github.com/NationalSecurityAgency/ghidra/issues/175) erörtert werden, von der Verwendung von JNI in Ghidra ab.