mcpField
G
GhidraMCP

GhidraMCP

ローカル
github.com/13bmセキュリティ1498 週間前に更新

GhidraMCP について

GhidraMCP は、MCP を通じて 70 のリバースエンジニアリング用ツールを AI アシスタントに公開する Ghidra 拡張機能です。逆コンパイル、シンボルの名前変更、注釈付け、脆弱性の検索に対応します。Java プラグインと Go ブリッジで構成され、複数の Ghidra インスタンスを同時に扱えます。

主な機能

  1. 01リバースエンジニアリング向け MCP ツール 70 種
  2. 02Ghidra プラグインと Go ブリッジ間の TCP 接続
  3. 03非同期逆コンパイルと後からの結果取得
  4. 04API キー認証とローカルホストへの限定バインド
  5. 05target_port による複数インスタンスへのルーティング

活用シーン

  1. 01AI アシスタントによるバイナリ関数の逆コンパイルと解説
  2. 02解析中のシンボル一括リネームとコメント追加
  3. 03バイナリのセキュリティ緩和策や ROP ガジェットの検出

MCP 対応

MCP サーバーとして、Ghidra の解析・編集機能を MCP ツールとして Claude などの MCP クライアントに公開します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

GhidraMCP

ビルド ライセンス

Ghidra の拡張機能です。70 種類のリバースエンジニアリングツールを Model Context Protocol (MCP) を通じて AI アシスタントに公開します。Ghidra でバイナリを開いてプラグインを有効にすると、Claude(または任意の MCP クライアント)が関数の逆コンパイル、シンボルの名前変更、コードへの注釈付け、脆弱性の検索などを行えるようになります。

アーキテクチャ

 AI Client (Claude Desktop / CLI)
        |  stdio + MCP JSON-RPC
        v
   Go MCP Bridge  (mcp_bridge)
        |  TCP, length-prefixed JSON-RPC
        v
   Ghidra Plugin  (MCPServerPlugin)
        |
        v
   Ghidra Program API

Ghidra プラグイン(Java)は Ghidra 内で TCP サーバーを起動し、Go ブリッジバイナリを自動的に起動します。ブリッジは stdio 経由で AI クライアントと MCP 通信を行い、4 バイトの長さプレフィックス付き JSON-RPC フレーミングを使用して、ローカル TCP ソケット経由で Java プラグインに呼び出しを転送します。オプションの API キー認証により TCP チャネルを保護できます。

機能

  • 70 種類の MCP ツールを搭載。クエリ、変更、分析、マルウェアのトリアージ、IoT/組み込みセキュリティ、構造体管理、非同期逆コンパイル、複数インスタンス対応を網羅
  • 簡単なセットアップ -- プラグインがブリッジを自動起動します。MCP > Settings > Write to Claude Config を使って MCP クライアントを設定できます
  • クロスプラットフォーム -- Linux x86_64、Windows x86_64、macOS x86_64、macOS ARM64 向けのビルド済みブリッジバイナリを提供
  • 設定可能 -- ポート、localhost のみへのバインド、API キー認証、自動起動、GhidraMCP.properties によるブリッジの有効化/無効化
  • 複数インスタンス対応 -- target_port を使ってツールの呼び出し先を指定することで、複数の Ghidra ウィンドウを同時に操作
  • 非同期逆コンパイル -- 大きな関数をブロックせずに逆コンパイルし、後から結果を取得できます
  • 接続の再試行 -- Ghidra の再起動時や接続が切れた場合、ブリッジが自動的に再接続します
  • ページネーション -- 大きな結果セット(関数、文字列、インポートなど)では、offset/limit を使って安全に段階的に取得できます
  • CI/CD -- ビルド、Go と Java のテスト、Ghidra 統合テストを自動化し、新しい Ghidra バージョンのリリース時には自動リリースします

クイックスタート

前提条件
インストール
  1. リリースから最新のリリース ZIP をダウンロードします
  2. Ghidra で、File > Install Extensions > "+" > ZIP を選択します
  3. Ghidra を再起動します
有効化
  1. プロジェクトとプログラム(バイナリ)を開きます
  2. File > Configure > GhidraMCP -- MCPServerPlugin にチェックを入れます
  3. プラグインが TCP サーバー(デフォルトは localhost:8765)を自動的に起動し、ブリッジを起動します

Claude Desktop を設定するには、MCP > Settings を開き、Write to Claude Config をクリックします。他の MCP クライアントの場合は、Copy to Clipboard をクリックし、以下をクライアントの設定に追加します。

{
  "mcpServers": {
    "ghidra": {
      "command": "/path/to/mcp_bridge",
      "args": ["--host", "localhost", "--port", "8765"]
    }
  }
}

API キーを設定している場合は、env ブロックに追加します(プラグインが自動的に追加します)。

{
  "mcpServers": {
    "ghidra": {
      "command": "/path/to/mcp_bridge",
      "args": ["--host", "localhost", "--port", "8765"],
      "env": {
        "GHIDRA_API_KEY": "your-key-here"
      }
    }
  }
}

Ghidra から設定スニペットを取得することもできます。MCP > Copy MCP Config を選択すると、クリップボードにコピーされます。

ツール

パラメーター、型、使用例を含む完全なリファレンス: TOOLS.md

以下の表は概要を示しています。パラメーターの詳細については、TOOLS.md を参照してください。

クエリ(1-21)
ツール説明
list_functionsエントリーポイント、サイズ、戻り値の型とともに、すべての関数を一覧表示します
list_classesすべてのクラス/名前空間を一覧表示します
list_importsインポートされたシンボルと外部依存関係を一覧表示します
list_exportsエクスポートされたシンボルを一覧表示します
list_namespacesすべての名前空間を一覧表示します
list_data_items定義済みデータ(グローバル変数、定数、配列、構造体)を一覧表示します
list_strings任意の部分文字列で絞り込んで、文字列を一覧表示します
search_functions_by_name名前の部分文字列で関数を検索します
get_function_by_address指定したアドレスの関数の詳細情報を取得します
get_current_addressGhidra で現在選択されているアドレスを取得します
get_current_function現在のカーソル位置にある関数を取得します
decompile_function名前を指定して C 擬似コードに逆コンパイルします
decompile_function_by_addressアドレスを指定して C 擬似コードに逆コンパイルします
disassemble_function関数の未加工の逆アセンブル一覧を取得します
get_xrefs_to指定したアドレスへのクロスリファレンスを取得します
get_xrefs_from指定したアドレスからのクロスリファレンスを取得します
get_function_xrefs関数のすべてのクロスリファレンス(呼び出し元と呼び出し先)を取得します
get_program_infoプログラムのメタデータ(アーキテクチャ、コンパイラー、形式など)を取得します
get_memory_mapセグメントのアクセス許可を含むメモリレイアウトを取得します
get_variables関数のパラメーターとローカル変数を取得します
変更(22-38)
ツール説明
rename_function名前を指定して関数の名前を変更します
rename_function_by_addressアドレスを指定して関数の名前を変更します
rename_dataデータラベルの名前を変更します
rename_variableローカル変数の名前を変更します
set_decompiler_commentデコンパイラービューのコメントを設定します
set_disassembly_comment逆アセンブルビューのコメントを設定します
set_function_prototype関数のプロトタイプ全体を設定します
set_local_variable_type変数のデータ型を変更します
set_bookmarkブックマークを追加します
remove_bookmarkブックマークを削除します
set_equateスカラーオペランドに名前付き定数を設定します
create_structure構造体のデータ型を作成します
create_enum列挙型のデータ型を作成します
apply_data_typeアドレスにデータ型を適用します
set_namespace関数の名前空間またはクラスを設定します
set_calling_convention関数の呼び出し規約を設定します
set_image_baseイメージベースアドレスを設定します
set_memory_permissionsメモリブロックのアクセス許可を変更します
高度な解析(39-45)
ツール説明
patch_bytesアドレスの未加工バイトをパッチします
get_basic_blocks関数の基本ブロックを取得します
extract_api_call_sequencesセキュリティ解析用に API 呼び出しシーケンスを抽出します
identify_user_input_sourcesユーザー入力のエントリーポイントを特定します
generate_call_graph階層的な呼び出しグラフを生成します
identify_crypto_patterns暗号処理の実装を検出します
find_obfuscated_strings難読化された文字列を特定します
マルウェア解析(46-53)
ツール説明
search_bytesバイトパターンを検索します
emulate_function関数をエミュレートします
extract_iocs侵害の痕跡(IOC)を抽出します
find_dynamic_api_resolution動的 API 解決を検出します
detect_anti_analysis解析妨害技術を検出します
add_external_function外部関数参照を追加します
get_pe_infoPE ヘッダーの詳細情報を取得します
get_elf_infoELF ヘッダーの詳細情報を取得します
IoT/組み込みセキュリティ(54-59)
ツール説明
create_memory_blockメモリブロックを作成します
detect_security_mitigationsバイナリのセキュリティ緩和策を検出します
find_format_string_vulnsフォーマット文字列の脆弱性を特定します
find_rop_gadgetsROP ガジェットを特定します
detect_control_flow_flattening制御フローの平坦化を検出します
mark_code_coverageコードカバレッジ領域をマークします
ユーティリティ(60-62)
ツール説明
get_bookmarksブックマークを一覧表示します(アドレスで絞り込むこともできます)
list_equatesすべての等価定義を一覧表示します
ping接続のヘルスチェックを行います
複数インスタンス(63)
ツール説明
list_ghidra_instances実行中の Ghidra インスタンスをポート 8765-8774 でスキャンします

すべてのツールは、呼び出しを特定の Ghidra インスタンスにルーティングするための省略可能な target_port パラメーターを受け付けます。これにより、別々の Ghidra ウィンドウで複数のバイナリを同時に開いて作業できます。

構造体の管理(64-68)
ツール説明
get_structure構造体の詳細(フィールド、オフセット、型)をすべて取得します
list_structures定義済みの構造体をすべてページネーション付きで一覧表示します
edit_structure構造体のフィールドを追加、挿入、削除、置換、またはクリアします
rename_structure既存の構造体の名前を変更します
delete_structure構造体のデータ型を削除します
非同期デコンパイル(69-70)
ツール説明
decompile_function_async大きな関数の非同期デコンパイルを開始します(タスク ID を返します)
get_decompile_resultタスク ID を指定して、非同期デコンパイルの結果をポーリングします

非同期デコンパイルは、デコンパイルに 30 秒以上かかる可能性のある大きな関数で便利です。クライアントはデコンパイルを開始した後、ほかの作業を続け、後で結果をポーリングできます。

設定

プラグインは、Ghidra のユーザー設定ディレクトリにある GhidraMCP.properties に設定を保存します。

プロパティデフォルト説明
port8765Java サーバーの TCP ポート
localhost_onlytruelocalhost のみでバインドします
api_key(空)ブリッジ認証用の共有シークレット
auto_starttrueプラグインの読み込み時にサーバーを起動します
bridge_enabledtrueGo ブリッジバイナリを自動起動します
設定ダイアログ

Ghidra メニューから MCP > Settings を開くと、GUI で各プロパティを設定できます。ダイアログには次の項目があります。

  • ポート、localhost バインド、API キー、自動起動、ブリッジの有効化を編集できるフィールド
  • 暗号学的に安全なランダムな 32 文字の API キーを生成する Generate ボタン
  • GhidraMCP を Claude Desktop の claude_desktop_config.json にマージする Write to Claude Config ボタン
  • 手動設定用の MCP 設定 JSON スニペットをコピーする Copy to Clipboard ボタン
  • API キーを設定せずにリモートアクセスを有効にした場合のセキュリティ警告
  • 保存時にサーバーが実行中の場合に表示される自動再起動の確認

OK をクリックすると、変更がディスクに保存されます。ダイアログに表示されているパスにあるプロパティファイルを直接編集することもできます。

auto_start が false の場合は、Ghidra メニューから MCP > Toggle Server を選択して、サーバーを手動で起動してください。

Note: bridge_enabled 設定は、高度な用途向けです。ブリッジバイナリをデバッグする開発者や、Java サーバーと TCP で直接通信するカスタム MCP クライアントを使用するユーザー向けです。ほとんどのユーザーは有効のままにしてください。

セキュリティ

デフォルトでは、TCP サーバーは localhost のみでバインドされ、API キーは設定されていません。ローカルで単一ユーザーが使用する場合はこれで問題ありません。より厳格な設定にする場合は、次の手順に従ってください。

API キー認証
  1. MCP > Settings を開き、Generate をクリックしてランダムなキーを生成します(または独自のキーを入力します)
  2. OK をクリックして保存します。次回の起動時にブリッジがキーを自動的に取得します
  3. 接続時、ブリッジはほかの呼び出しを行う前に、キーを含む authenticate リクエストを送信します
  4. 認証が成功するまで、サーバーは認証以外のすべてのリクエストを拒否します
  5. 3 回失敗すると、サーバーは接続を終了します

API キーは、プロセスの引数リストから漏えいするのを防ぐため、CLI フラグではなく GHIDRA_API_KEY 環境変数を介してブリッジに渡されます。ブリッジを手動で実行する場合は、環境変数を設定してください。

# Linux/macOS
export GHIDRA_API_KEY="your-key-here"
./mcp_bridge --host localhost --port 8765

# Windows (PowerShell)
$env:GHIDRA_API_KEY = "your-key-here"
.\mcp_bridge.exe --host localhost --port 8765

API キーが設定されている場合、設定ダイアログの Write to Claude Config ボタンと Copy to Clipboard ボタンは、キーを env ブロックに自動的に含めます。

ローカルホストへのバインド

localhost_only=true(デフォルト)の場合、サーバーは 127.0.0.1 からの接続のみを受け付けます。リモートアクセスが必要な場合(例:ヘッドレスサーバー上の Ghidra)は false に設定します。ただし、ポートをローカルホスト以外に公開する場合は、必ず API キーを使用してください。

リモート/ヘッドレス環境のセットアップ

GhidraMCP は、別のマシンで実行されている AI クライアントにサービスを提供できます。これは、Ghidra をヘッドレス分析サーバーで実行し、AI クライアントを別の場所で実行する場合に便利です。

  1. MCP > Settings を開きます
  2. リモート接続を受け付けるには、Localhost Only のチェックを外します
  3. API キーを作成するには、Generate をクリックします(リモートアクセスでは必ず使用してください)
  4. OK をクリックし、サーバーを再起動します

リモートマシンで、Ghidra ホストを指定するように MCP クライアントを設定します。

{
  "mcpServers": {
    "ghidra": {
      "command": "/path/to/mcp_bridge",
      "args": ["--host", "ghidra-server.local", "--port", "8765"],
      "env": {
        "GHIDRA_API_KEY": "your-key-here"
      }
    }
  }
}

Warning: サーバーをローカルホスト以外に公開する場合は、必ず API キーを使用してください。認証がない場合、ポートに接続できる人は誰でも Ghidra API に完全にアクセスできます。

ソースからのビルド

git clone https://github.com/13bm/GhidraMCP.git
cd GhidraMCP
Go ブリッジのビルド
cd mcp-bridge
go build -o mcp_bridge .
cd ..
Ghidra 拡張機能のビルド
export GHIDRA_INSTALL_DIR=/path/to/ghidra
gradle buildExtension

拡張機能の ZIP は dist/ に作成されます。

テストの実行
# Go tests
cd mcp-bridge && go test ./... -v && cd ..

# Java unit + integration tests (requires Xvfb on headless Linux)
xvfb-run gradle test -PGHIDRA_INSTALL_DIR=$GHIDRA_INSTALL_DIR

CI/CD

このプロジェクトでは、自動ビルドとリリースに GitHub Actions を使用しています。

  • build.yml -- master へのプッシュ/PR、およびタグ作成時に実行されます。Go テストを実行し、4 つのプラットフォーム向けにブリッジをクロスコンパイルし、Xvfb 上で Java のユニットテストと Ghidra の統合テストを実行し、拡張機能の ZIP をビルドします。また、v* タグで GitHub Releases を作成します。
  • check-ghidra-release.yml -- 毎日実行されます。Ghidra の新しいリリースを検出し、バージョン更新の PR を作成して、GitHub App 経由で自動承認し、すべてのテストが成功した場合に自動マージします。

コントリビューション

コントリビューションを歓迎します。イシューを作成するか、プルリクエストを送信してください。

  1. リポジトリをフォークします
  2. 機能ブランチを作成します:git checkout -b feature/my-feature
  3. 変更をコミットします
  4. プッシュしてプルリクエストを作成します

ライセンス

Apache License 2.0

謝辞


GhidraMCP は NSA または Ghidra プロジェクトとは関係がなく、いずれからも承認されていません。

コメント

MCP は初めてですか?

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

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