リバースエンジニアリングツールの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は変化中ですが、コアとなる機能は使用可能な状態です。セキュリティ研究やリバースエンジニアリングをコードで自動化したい開発者にとって、注目の選択肢です。