mcpField
🔍
🔍 Ghidra MCP Server

🔍 Ghidra MCP Server

ローカル
github.com/Bamimore-Tomiセキュリティ481 週間前に更新

🔍 Ghidra MCP Server について

Ghidra を利用する MCP サーバーで、リバースエンジニアや LLM によるバイナリ解析を対象としています。逆コンパイルしたコードとプログラム情報を JSON に抽出し、その内容を照会するツールを公開します。

主な機能

  1. 01Ghidra のヘッドレスモードでバイナリを逆コンパイル
  2. 02疑似コード、名前、変数、文字列の抽出
  3. 03構造体、列挙型、関数定義の出力
  4. 04関数一覧の取得と疑似コードの参照
  5. 05構造体、列挙型、関数プロトタイプの確認

活用シーン

  1. 01未知のバイナリに含まれる関数の調査
  2. 02逆コンパイル結果とエントリーポイントの確認
  3. 03データ構造や列挙値の調査
  4. 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)
  • mcp CLI(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 を見つけられません。解決するには、次の手順を実行します。

  1. ターミナルで実行します。
which uv

出力例:

/Users/yourname/.cargo/bin/uv
  1. Claude Desktop の設定ファイルを開きます。
open ~/Library/Application\ Support/Claude/claude_desktop_config.json
  1. 次のように更新します。
{
  "mcpServers": {
    "ghidra": {
      "command": "/Users/yourname/.cargo/bin/uv",
      "args": [
        "--directory",
        "/Users/yourname/Documents/ghidra_mcp",
        "run",
        "main.py"
      ]
    }
  }
}
  1. Claude Desktop を再起動します。カスタム MCP ツールが表示されるはずです。

❌ The operation couldn’t be completed. Unable to locate a Java Runtime.

➡️ 解決方法:Java がインストールされていないか、JAVA_HOME が設定されていません。上記のセットアップ手順に従ってください。


📂 プロジェクト構成

ファイル用途
main.pyツールを備えた MCP サーバー
export_context.pyJSON を抽出する Ghidra スクリプト
crackme.cサンプル C バイナリ
crackmeテスト用にコンパイルされたバイナリ

👨‍💻 作者

Tomi Bamimore
NSA による Ghidra
Anthropic による MCP

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。