
GhidraにPython 3スクリプティングを追加するためのFLAREチームのオープンソース拡張機能。
Ghidrathon は、Ghidra に Python 3 スクリプト機能を追加する Ghidra 拡張機能です。なぜ必要なのでしょうか? Ghidra はネイティブで Java と Jython によるスクリプトをサポートしています。しかし、capa、Unicorn Engine、angr などの多くのオープンソース解析ツールは Python 3 で書かれているため、これらのツールを Ghidra で使用することは困難であり、場合によっては不可能です。さらに、セキュリティコミュニティは IDA Pro や Binary Ninja などの他の SRE フレームワーク向けに優れたプラグインを数多くリリースしていますが、これらのプラグインの多くも Python 3 を使用しているため、Ghidra に移植するのは困難です。Ghidrathon は、Ghidra 内で既存の Python 3 ツールを使用したり、新しい Python 3 ツールを開発したり、Ghidra の UI と緊密に統合する形でモダンな Python を使って Ghidra をスクリプト化したりするのに役立ちます。これは、Jython を介して実装された既存の Python 2.7 拡張機能を置き換えるものです。これには、対話型インタプリタウィンドウ、Ghidra スクリプトマネージャとの統合、Ghidra ヘッドレスモードでのスクリプト実行が含まれます。

Ghidra 向け Python 3 スクリプトの作成方法の詳細については、こちら の Ghidra Python 3 スクリプトの例を参照してください。
チェックしてみてください:
以下の手順で Ghidrathon を Ghidra 環境にインストールします:
$ python -m pip install -r requirements.txt
$ python ghidrathon_configure.py <absolute_path_to_ghidra_install_dir>
注: ghidrathon_configure.py はデフォルトで <absolute_path_to_ghidra_install_dir> に ghidrathon.save というファイルを書き込もうとします。ghidrathon_configure.py と Ghidra を実行する前に、GHIDRATHON_SAVE_PATH 環境変数を設定することで、このファイルの書き込み先パスを指定できます:
$ export GHIDRATHON_SAVE_PATH="/path/to/custom/dir" # Linux/MacOS
$ set GHIDRATHON_SAVE_PATH="C:\path\to\custom\dir" # Windows
注: JAVA_HOME という環境変数を設定するよう求められる場合があります。これは、Ghidra インストール用に構成した JDK の絶対パスを参照する必要があります。
.zip) を Ghidra にインストールします:
File > Install Extensions... に移動します+ ボタンをクリックします.zip) に移動しますOk をクリックしますExtension Version Mismatch ウィンドウが表示された場合は、Install Anyway を選択します.zip) を <absolute_path_to_ghidra_install_dir>\Ghidra\Extensions に解凍します新しい Python インタプリタを使用して手順 2 を実行することで、Ghidrathon を別の Python インタプリタに切り替えることができます。
仮想環境から手順 2 を実行することで、Ghidrathon で Python 仮想環境を使用できます。別の仮想環境に切り替えるには、新しい仮想環境から手順 2 を実行するだけです。
インタプリタウィンドウは、Python 3 インタプリタへの対話的なアクセスを提供します。Window をクリックして Ghidrathon を選択すると、インタプリタウィンドウが開きます。

Ghidrathon は Ghidra スクリプトマネージャと直接統合されており、Ghidra 内で Python 3 スクリプトの作成、編集、実行が可能です。Create New Script をクリックして Python 3 を選択すると、新しい Python 3 スクリプトを作成できます。Run Script または Run Editor's Script をクリックして Python 3 スクリプトを実行し、Ghidra コンソールウィンドウでスクリプトの出力を確認します。

Ghidrathon は、Ghidra ヘッドレスモードで Python 3 スクリプトを実行するのに役立ちます。Ghidra インストールフォルダにある analyzeHeadless スクリプトを実行し、Python 3 スクリプトを指定して、コンソールウィンドウでスクリプトの出力を確認します。
$ 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)
Ghidra をヘッドレスモードで実行する方法の詳細については、<absolute_path_to_ghidra_install_dir>/support/analyzeHeadlessREADME.html を参照してください。
Ghidrathon を開発した最大の動機の 1 つは、Ghidra でサードパーティの Python 3 モジュールを使用できるようにすることでした。モジュールをインストールすれば、通常の Python 環境と同じように Ghidra 内で使用を開始できます。これは、以前にインストールしたモジュールにも適用されます。たとえば、Unicorn をインストールして、Ghidra 内で ARM コードをエミュレートするために使用できます。

Ghidrathon は、Ghidra の Java および Jython 拡張機能と非常によく似たスクリプト体験を提供します。これには、currentProgram などの GhidraScript 状態インスタンス変数や、findBytes などの FlatProgramAPI メソッドを Python の builtins スコープで利用可能にすることが含まれます。つまり、コードによってインポートされた すべての Python モジュールがこれらの変数とメソッドにアクセスできます。Ghidrathon は、GhidraScript 状態変数を直接アクセスではなく Python 関数呼び出しとして公開する点で、Ghidra の Java および Jython 拡張機能とは少し異なります。たとえば、Python 3 コードは currentProgram にアクセスする際、関数呼び出し currentProgram() を使用する必要があります。この小さな変更により、実行中に Python 3 コードに正しい GhidraScript 状態変数が提供されることが保証されます。Ghidra 向け Python 3 スクリプトの作成方法の詳細については、こちら の Ghidra Python 3 スクリプトの例を参照してください。
Ghidrathon は、オープンソースプロジェクト Jep を使用して、ローカルの Python インストールを Ghidra にリンクします。基本的に、ローカルの Python インタプリタが Ghidra 内で実行され、すべての Python パッケージ および 標準の Ghidra スクリプト API にアクセスできます。Ghidrathon は Python 仮想環境でも動作し、Ghidra でのみ使用したいパッケージを作成、分離、管理するのに役立ちます。Ghidrathon はローカルの Python インストールを使用するため、Ghidra 内で実行される Python のバージョンと環境を制御できます。
Jep が Java に Python を埋め込む仕組みの詳細については、こちら のドキュメントを参照してください。
Ghidrathon は、JNI (Java Native Interface) を使用して JVM に Python を埋め込むオープンソースライブラリ Jep を使用します。Ghidra 開発者は、こちら で説明されている理由により、Ghidra での JNI の使用を推奨していません。
| ツール | バージョン | ソース |
|---|
| 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 |