
L'extension open-source de l'équipe FLARE pour ajouter la prise en charge de scripts Python 3 à Ghidra.
Ghidrathon est une extension Ghidra qui ajoute des capacités de script Python 3 à Ghidra. Pourquoi ? Ghidra prend en charge nativement les scripts en Java et en Jython. Malheureusement, de nombreux outils d'analyse open-source, comme capa, Unicorn Engine, angr, etc., sont écrits en Python 3, ce qui rend difficile, et dans certains cas impossible, l'utilisation de ces outils dans Ghidra. De plus, la communauté de la sécurité a publié plusieurs excellents plugins pour d'autres frameworks de rétro-ingénierie logicielle comme IDA Pro et Binary Ninja, mais là encore, parce que beaucoup de ces plugins utilisent Python 3, il est difficile de les porter vers Ghidra. Ghidrathon vous aide à utiliser des outils Python 3 existants et à en développer de nouveaux dans Ghidra, ainsi qu'à scripter Ghidra avec du Python moderne d'une manière qui s'intègre étroitement à l'interface utilisateur de Ghidra. Il remplace l'extension Python 2.7 existante implémentée via Jython. Cela inclut la fenêtre d'interpréteur interactive, l'intégration avec le Ghidra Script Manager et l'exécution de scripts en mode headless de Ghidra.

Veuillez consulter notre exemple de script Ghidra Python 3 ici pour un aperçu plus détaillé de l'écriture de scripts Python 3 pour Ghidra.
À découvrir :
Suivez les étapes suivantes pour installer Ghidrathon dans votre environnement Ghidra :
$ python -m pip install -r requirements.txt
$ python ghidrathon_configure.py <absolute_path_to_ghidra_install_dir>
Remarque : ghidrathon_configure.py tente par défaut d'écrire un fichier nommé ghidrathon.save dans <absolute_path_to_ghidra_install_dir>. Vous pouvez spécifier le chemin où ce fichier est écrit en définissant la variable d'environnement GHIDRATHON_SAVE_PATH avant d'exécuter ghidrathon_configure.py et Ghidra :
$ export GHIDRATHON_SAVE_PATH="/path/to/custom/dir" # Linux/MacOS
$ set GHIDRATHON_SAVE_PATH="C:\path\to\custom\dir" # Windows
Remarque : il se peut que vous soyez invité à définir une variable d'environnement nommée JAVA_HOME. Celle-ci doit référencer le chemin absolu du JDK que vous avez configuré pour votre installation Ghidra.
.zip) dans Ghidra :
File > Install Extensions...+.zip)OkInstall Anyway si la fenêtre Extension Version Mismatch vous y invite.zip) vers <absolute_path_to_ghidra_install_dir>\Ghidra\ExtensionsVous pouvez faire passer Ghidrathon à un autre interpréteur Python en exécutant l'étape 2 avec le nouvel interpréteur Python.
Vous pouvez utiliser un environnement virtuel Python avec Ghidrathon en exécutant l'étape 2 depuis l'environnement virtuel. Pour passer à un autre environnement virtuel, exécutez simplement l'étape 2 depuis le nouvel environnement virtuel.
La fenêtre de l'interpréteur fournit un accès interactif à votre interpréteur Python 3. Cliquez sur "Window" et sélectionnez "Ghidrathon" pour ouvrir la fenêtre de l'interpréteur.

Ghidrathon s'intègre directement au Ghidra Script Manager, vous permettant de créer, modifier et exécuter des scripts Python 3 dans Ghidra. Cliquez sur "Create New Script" et sélectionnez "Python 3" pour créer un nouveau script Python 3. Cliquez sur "Run Script" ou "Run Editor's Script" pour exécuter votre script Python 3 et consultez la fenêtre Ghidra Console pour la sortie du script.

Ghidrathon vous aide à exécuter des scripts Python 3 en mode headless de Ghidra. Exécutez le script analyzeHeadless situé dans votre dossier d'installation Ghidra, spécifiez votre script Python 3 et consultez la fenêtre de console pour la sortie du 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)
Pour plus d'informations sur l'exécution de Ghidra en mode headless, consultez <absolute_path_to_ghidra_install_dir>/support/analyzeHeadlessREADME.html.
L'une de nos principales motivations pour développer Ghidrathon était de permettre l'utilisation de modules Python 3 tiers dans Ghidra. Vous pouvez installer un module et commencer à l'utiliser dans Ghidra comme vous le feriez avec une configuration Python typique. Cela s'applique également aux modules que vous avez précédemment installés. Par exemple, nous pouvons installer et utiliser Unicorn pour émuler du code ARM dans Ghidra.

Ghidrathon offre une expérience de script qui reflète étroitement les extensions Java et Jython de Ghidra, notamment en rendant les variables d'état d'instance de GhidraScript, par ex. currentProgram, et les méthodes de FlatProgramAPI, par ex. findBytes, disponibles à la portée builtins de Python. Cela signifie que tous les modules Python importés par votre code ont accès à ces variables et méthodes. Ghidrathon s'écarte légèrement des extensions Java et Jython de Ghidra en exposant les variables d'état de GhidraScript comme des appels de fonction Python plutôt que des accès directs, par ex. votre code Python 3 doit accéder à currentProgram en utilisant l'appel de fonction currentProgram(). Ce petit changement garantit que votre code Python 3 reçoit les bonnes variables d'état GhidraScript pendant l'exécution. Veuillez consulter notre exemple de script Ghidra Python 3 ici pour un aperçu plus détaillé de l'écriture de scripts Python 3 pour Ghidra.
Ghidrathon relie votre installation Python locale à Ghidra en utilisant le projet open-source Jep. Essentiellement, votre interpréteur Python local s'exécute à l'intérieur de Ghidra avec accès à tous vos packages Python et à l'API de script standard de Ghidra. Ghidrathon fonctionne également avec les environnements virtuels Python, vous aidant à créer, isoler et gérer des packages que vous pourriez ne vouloir installer que pour une utilisation dans Ghidra. Parce que Ghidrathon utilise votre installation Python locale, vous contrôlez la version de Python et l'environnement qui s'exécutent dans Ghidra.
Pour plus d'informations sur la façon dont Jep fonctionne pour intégrer Python dans Java, consultez sa documentation ici.
Ghidrathon utilise la bibliothèque open-source Jep qui utilise l'interface native Java (JNI) pour intégrer Python dans la JVM. Les développeurs de Ghidra déconseillent l'utilisation de JNI dans Ghidra pour les raisons discutées ici.
| Outil | Version | Source |
|---|
| 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 |