🔍 Ghidra MCP Server について
Ghidra を利用する MCP サーバーで、リバースエンジニアや LLM によるバイナリ解析を対象としています。逆コンパイルしたコードとプログラム情報を JSON に抽出し、その内容を照会するツールを公開します。
主な機能
- 01Ghidra のヘッドレスモードでバイナリを逆コンパイル
- 02疑似コード、名前、変数、文字列の抽出
- 03構造体、列挙型、関数定義の出力
- 04関数一覧の取得と疑似コードの参照
- 05構造体、列挙型、関数プロトタイプの確認
活用シーン
- 01未知のバイナリに含まれる関数の調査
- 02逆コンパイル結果とエントリーポイントの確認
- 03データ構造や列挙値の調査
- 04LLM にバイナリ解析のコンテキストを提供
MCP 対応
分析コンテキストの設定と、抽出した関数、疑似コード、構造体、列挙型、関数定義を照会するツールを MCP サーバーとして公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
🔍 Ghidra MCP サーバー
このプロジェクトでは、Ghidra をヘッドレスモードで使用して、豊富なバイナリ解析データ(関数、擬似コード、構造体、列挙型など)を JSON ファイルに抽出し、Model Context Protocol(MCP) を介して Claude などの LLM に公開できます。
Ghidra を、インタラクティブなリバースエンジニアリング用バックエンドに変えます。
🚀 機能
- Ghidra のヘッドレスモードでバイナリを逆コンパイルします
- 次の情報を抽出します。
- 関数の擬似コード、名前、パラメーター、変数、文字列、コメント
- データ構造(構造体)、列挙型、関数定義
ghidra_context.jsonに出力します- MCP サーバーは次のようなツールを公開します。
list_functions()、get_pseudocode(name)list_structures()、get_structure(name)list_enums()、get_enum(name)list_function_definitions()、get_function_definition(name)
⚙️ システム要件
- macOS(テスト済み)
- Python 3.10+
- Ghidra 11.3.1+
- Java 21(Temurin 推奨)
- MCP クライアント(例:Claude Desktop)
mcpCLI(pip install mcpでインストール)
🧪 インストールとセットアップ
✅ 1. Java 21 をインストール(Ghidra 11.3.1 で必須)
brew install --cask temurin@21
次に、設定します。
export JAVA_HOME=$(/usr/libexec/java_home -v 21)
echo 'export JAVA_HOME=$(/usr/libexec/java_home -v 21)' >> ~/.zshrc
source ~/.zshrc
確認します。
java -version
次のように表示されるはずです:openjdk version "21.0.x"...
✅ 2. Ghidra をインストール
Ghidra 11.3.1 をダウンロードして展開します。
✅ 3. プロジェクトをセットアップ
cd ghidra_mcp
gcc -Wall crackme.c -o crackme
✅ 4. MCP CLI でサーバーをインストール
mcp install main.py
これにより MCP サーバーが登録され、Claude などのクライアントからアクセスできるようになります。
✅ 5. 開発モードで実行(テスト用)
mcp dev main.py
これにより、ホットリロードと開発者ログが有効になります。
🛰️ 利用可能なツール
| ツール | 説明 |
|---|---|
setup_context(...) | バイナリに対して Ghidra を実行 |
list_functions() | すべての関数 |
get_pseudocode(name) | 逆コンパイルされた擬似コード |
list_structures() | すべての構造体 |
get_structure(name) | 構造体の詳細 |
list_enums() | すべての列挙型 |
get_enum(name) | 列挙型の値 |
list_function_definitions() | すべての関数プロトタイプ |
get_function_definition() | 戻り値の型と引数 |
サンプルプロンプト
<Ghidra_PATH> にインストールされた Ghidra を使用して、<BINARY_PATH> にあるバイナリファイルを解析してください。まず、両方のパスを使って解析コンテキストを設定し、次にバイナリ内のすべての関数を一覧表示してください。メインのエントリーポイント関数を調べ、プログラムの動作の概要を説明してください。
🧠 よくある問題と解決方法
❌ Ghidra が「unsupported Java version」で失敗する
➡️ 解決方法:17 や 24 ではなく、Java 21 をインストールします。
brew install --cask temurin@21
export JAVA_HOME=$(/usr/libexec/java_home -v 21)
❌ spawn uv ENOENT(Claude Desktop が UV バイナリを見つけられない)
➡️ Claude は名前で uv を見つけられません。解決するには、次の手順を実行します。
- ターミナルで実行します。
which uv
出力例:
/Users/yourname/.cargo/bin/uv
- Claude Desktop の設定ファイルを開きます。
open ~/Library/Application\ Support/Claude/claude_desktop_config.json
- 次のように更新します。
{
"mcpServers": {
"ghidra": {
"command": "/Users/yourname/.cargo/bin/uv",
"args": [
"--directory",
"/Users/yourname/Documents/ghidra_mcp",
"run",
"main.py"
]
}
}
}
- Claude Desktop を再起動します。カスタム MCP ツールが表示されるはずです。
❌ The operation couldn’t be completed. Unable to locate a Java Runtime.
➡️ 解決方法:Java がインストールされていないか、JAVA_HOME が設定されていません。上記のセットアップ手順に従ってください。
📂 プロジェクト構成
| ファイル | 用途 |
|---|---|
main.py | ツールを備えた MCP サーバー |
export_context.py | JSON を抽出する Ghidra スクリプト |
crackme.c | サンプル C バイナリ |
crackme | テスト用にコンパイルされたバイナリ |
👨💻 作者
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。