リバースエンジニアリングツールのGhidraをJavaなしでPythonやRustから操作できる — そんな開発者向けSDK「libghidra」が公開されました。
この記事でわかること
- libghidraが解決する課題と概要
- Python/Rust/C++からGhidraを使う方法
- インストール手順と基本的なコード例
- AIエージェントとの連携方法
Ghidraとlibghidraについて
https://github.com/0xeb/libghidra
Ghidraは、米国国家安全保障局(NSA)がオープンソースで公開している逆アセンブラ・デコンパイラです。バイナリ解析やマルウェア調査、セキュリティ研究で広く使われており、IDA Proの代替としても知られています。
通常、GhidraはJavaで書かれており、自動化やスクリプト処理にはJava APIかJythonを使う必要があります。この「Javaを経由しなければならない」という制約が、PythonやRustを主力言語とする開発者にとって大きな障壁でした。
libghidraはその制約を取り除くSDKです。GhidraのプログラムデータベースをC++、Python、Rustから直接操作できる型付きAPIを提供し、「GhidraをGUIではなくインフラとして扱う」ことを目指して設計されています。バージョン0.0.2 alpha(2026年4月29日リリース)が最新版です。
libghidraが解決する課題
Ghidraを使った解析を自動化しようとすると、従来は次の課題が発生していました。
Ghidra内蔵のスクリプトエンジン(GhidraScript)はJava APIに依存しており、Jythonを使う場合もJavaのクラス体系を理解する必要があります。また、ヘッドレスで実行する際もJVM起動が必要で、CI/CDパイプラインへの組み込みが煩雑でした。
libghidraはこれをHTTP/RPCサーバー方式で解決します。GhidraにホストExtensionをインストールしてサーバーを起動すると、Python・C++・RustのクライアントからローカルのHTTP APIを通じてGhidraのデータにアクセスできます。Javaの知識がなくても、慣れた言語でバイナリ解析処理を記述できます。
主な機能
libghidraで実行できる主な操作は次のとおりです。
- 関数の一覧取得・検索
- デコンパイラ出力の取得
- シンボル・型情報・クロスリファレンスの参照
- 関数やデータのリネーム・アノテーション追加
- プロジェクトのライフサイクル管理
オフラインモードも用意されており、Python向けのwheelにはGhidraのSleighデコンパイラエンジンが組み込まれています。ELF・PE・Mach-Oを対象にするなら、Ghidraをインストールせずにローカルで解析できます。
インストール方法
GhidraホストExtensionのインストール
GhidraにlibghidraのExtensionをインストールします。Ghidra 12.0.4以上、JDK 21、Gradleが前提です。
cd ghidra-extension
gradle installExtension -PGHIDRA_INSTALL_DIR=/path/to/ghidra_dist
インストール後、Ghidraを起動してプログラムを開き、Tools > libghidra Host > Start Server... からサーバーを起動します。デフォルトは http://127.0.0.1:18080 です。
PythonクライアントのインストールAPI
Python 3.12以上に対応したビルド済みwheelが各プラットフォーム向けに用意されています。
# Linux x86_64
pip install https://github.com/0xeb/libghidra/releases/download/v0.0.2/libghidra-0.0.2-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
# macOS Apple Silicon
pip install https://github.com/0xeb/libghidra/releases/download/v0.0.2/libghidra-0.0.2-cp312-abi3-macosx_15_0_arm64.whl
# Windows x64
pip install https://github.com/0xeb/libghidra/releases/download/v0.0.2/libghidra-0.0.2-cp312-abi3-win_amd64.whl
Linux aarch64(Raspberry PiやARM64 Ubuntu)向けのwheelもGitHubのリリースページで配布しています。
Pythonからの操作例
サーバー起動後、Pythonからは次のように接続して関数一覧を取得できます。
import libghidra as ghidra
client = ghidra.connect("http://127.0.0.1:18080")
status = client.get_status()
print(f"接続済み: {status.service_name}")
funcs = client.list_functions()
for f in funcs.functions[:10]:
print(f" 0x{f.entry_address:x} {f.name}")
CLIコマンドも用意されており、インストール後すぐに状態確認やデコンパイルを試せます。
libghidra status --url http://127.0.0.1:18080
libghidra decompile --url http://127.0.0.1:18080 0x140001000
RustとC++向けのクライアントも同一のHTTP APIに接続する設計で、言語をまたいだ解析パイプラインを構築できます。
AIエージェントとの連携
libghidraのREADMEには、Claude Code・Cursor・Codex・Aiderといったコーディングエージェントを使ったインストール手順が掲載されています。リポジトリに含まれる install-prompt.md をエージェントに渡すと、プレフライトチェックからGhidraのインストール、Extensionのセットアップ、Pythonクライアントの確認まで自動で進めてもらえます。
セットアップをエージェントに委ねて、解析ロジックの実装に集中できるのは実用的なアプローチです。
まとめ
libghidraはGhidraの操作をJavaなしで実現するSDKで、Python・Rust・C++から型付きAPIとして利用できます。バイナリ解析の自動化やCI/CDへの組み込み、AIエージェントとの連携など、Ghidraの使い方の幅が広がります。現在はv0.0.2 alpha段階でAPIは変化中ですが、コアとなる機能は使用可能な状態です。セキュリティ研究やリバースエンジニアリングをコードで自動化したい開発者にとって、注目の選択肢です。