世界を動かす技術を、日本語で。

Show HN: Ghidra MCPサーバー – AI支援のリバースエンジニアリングのための110ツール

概要

Ghidra MCP Server は、Ghidraのリバースエンジニアリング機能とAIツール・自動化フレームワークを連携するための 生産環境対応MCPサーバ110以上のMCPツール を提供し、バイナリ解析・自動化・スクリプト管理など多彩なAPIを実装。 Java 21 LTS、Maven 3.9+、Ghidra 12.0.2、Python 3.8+ が必要。 バッチ処理・原子トランザクション・リアルタイム解析 など高信頼性と効率性を実現。 APIリファレンス・導入手順・開発ガイド・貢献方法 も充実。

Ghidra MCP Server 概要

  • Ghidra の強力なリバースエンジニアリング機能と AIツール・自動化基盤 の橋渡し役
  • Model Context Protocol (MCP) 110種以上のAPIをフル実装
  • 生産環境対応 :バッチ処理・原子トランザクション・高信頼性
  • リアルタイム解析 :Ghidraの解析エンジンとライブ連携
  • クロスバイナリドキュメント化 :関数ハッシュによるバージョン横断的なドキュメント同期

主な機能

  • 関数解析 :デコンパイル、コールグラフ、クロスリファレンス
  • データ構造抽出 :構造体・共用体・列挙体の自動生成
  • ストリング抽出 :詳細な文字列解析・分類
  • インポート/エクスポート解析 :シンボルテーブル・依存ライブラリ可視化
  • メモリマッピング :バイナリ全体のメモリレイアウト記録
  • 自動化開発サイクル :ビルド・テスト・デプロイ・検証のパイプライン
  • Ghidraスクリプト管理 :作成・実行・管理のMCP経由自動化
  • マルチプログラム対応 :複数バイナリの切替・比較
  • バッチ操作 :一括リネーム・コメント・型付け

導入手順

  • 前提条件

    • Java 21 LTS (OpenJDK推奨)
    • Apache Maven 3.9+
    • Ghidra 12.0.2 (または互換バージョン)
    • Python 3.8+ (pip必須)
  • インストール手順

    • リポジトリをクローン git clone https://github.com/bethington/ghidra-mcp.git
    • ディレクトリ移動 cd ghidra-mcp
    • Python依存パッケージのインストール pip install -r requirements.txt
    • Ghidraライブラリのコピー
      • Windows: copy-ghidra-libs.bat "C:\path\to\ghidra_12.0.2_PUBLIC"
      • Linux/Mac: 手動コピー(必要なJARは14個)
    • プラグインのビルド mvn clean package assembly:single -DskipTests
    • Ghidraへのデプロイ
      • Windows: .\deploy-to-ghidra.ps1
      • 手動: target\GhidraMCP-2.0.0.zipをGhidraのExtensionsフォルダへコピー
  • 基本的な使い方

    • Stdioトランスポート(AIツール推奨) python bridge_mcp_ghidra.py
    • SSEトランスポート(Web/HTTPクライアント向け) python bridge_mcp_ghidra.py --transport sse --mcp-host 127.0.0.1 --mcp-port 8081
    • Ghidra起動後、バイナリをロードし Tools > GhidraMCP > Start MCP Server デフォルトでhttp://127.0.0.1:8080/でサーバ起動

パフォーマンス・運用実績

  • MCPツール数 :110種フル実装
  • 速度 :ほとんどの操作がサブ秒応答
  • 効率性 :バッチ処理でAPIコールを93%削減
  • 信頼性 :全処理が原子トランザクションで実施
  • デプロイ :バージョン管理対応の自動デプロイスクリプト

主なAPIリファレンス抜粋

  • コア操作

    • check_connection:接続確認
    • get_metadata:プログラムメタデータ取得
    • get_version:サーババージョン情報
    • get_entry_points:エントリポイント一覧
  • 関数解析

    • list_functions:関数一覧(ページネート)
    • decompile_function:関数デコンパイル(C擬似コード)
    • get_function_callers:呼び出し元取得
    • get_function_call_graph:関数関係グラフ
  • メモリ・データ

    • list_segments:メモリセグメント一覧
    • disassemble_function:関数の逆アセンブル
    • get_xrefs_to/from:クロスリファレンス取得
  • クロスバイナリドキュメント

    • get_function_hash:関数ハッシュ取得
    • apply_function_documentation:ドキュメント一括適用
  • データ型・構造体

    • list_data_types:利用可能なデータ型一覧
    • create_struct:構造体作成・フィールド追加/修正/削除
  • シンボル・ラベル

    • list_imports/exports:インポート/エクスポートシンボル一覧
    • create_label/batch_create_labels:ラベル作成・一括作成
  • リネーム・ドキュメント

    • rename_function/rename_function_by_address:関数リネーム
    • set_decompiler_comment/set_disassembly_comment:コメント設定
  • 型システム

    • set_function_prototype:関数シグネチャ設定
    • set_local_variable_type:ローカル変数型設定
  • Ghidraスクリプト管理

    • list_scripts/run_script:スクリプト一覧・実行
    • save_ghidra_script/update_ghidra_script:スクリプト保存・更新
  • マルチプログラム管理

    • list_open_programs:開いているプログラム一覧
    • switch_program:アクティブプログラム切替
    • compare_programs_documentation:ドキュメント比較
  • 解析ツール

    • find_next_undefined_function:未定義関数検索
    • batch_string_anchor_report:文字列アンカー解析
    • search_byte_patterns:バイトパターン検索

アーキテクチャ

  • bridge_mcp_ghidra.py :MCPプロトコルをHTTPコールに変換するPythonサーバ

  • GhidraMCP.jar :Ghidra解析機能をHTTP経由で公開するプラグイン

  • ghidra_scripts/ :70種以上の自動化スクリプト

  • 標準構成

    • AI/Automation Tools(Claude等) ⇔ MCP Bridge(bridge_mcp_ghidra.py) ⇔ Ghidra Plugin(GhidraMCP.jar)
    • 通信:MCPプロトコル(stdio/SSE)、HTTP REST、Ghidra API(localhost:8080)

開発・ビルド・構成

  • ビルド

    • mvn clean package assembly:single -DskipTests
    • デプロイ:.\deploy-to-ghidra.ps1
  • プロジェクト構成

    • bridge_mcp_ghidra.py:MCPサーバ(Python)
    • src/main/java/:Ghidraプラグイン(Java)
    • lib/:Ghidraライブラリ依存(14JAR/約37MB)
    • ghidra_scripts/:自動化スクリプト
    • docs/:ドキュメント・AIプロンプト
    • examples/:使用例
    • scripts/:ビルド/ユーティリティスクリプト
  • Ghidraライブラリ依存

    • Windows:copy-ghidra-libs.bat "C:\path\to\ghidra_12.0.2_PUBLIC"
    • 必須JAR例:Base.jar、Decompiler.jar、PDB.jar、FunctionID.jar、他10種

ドキュメント・貢献

  • コアドキュメント

    • Documentation Index、プロジェクト構成、命名規則、AIワークフロープロンプト
    • リリース履歴(CHANGELOG.md、releases/)
  • 貢献方法

    • リポジトリをフォーク
    • フィーチャーブランチ作成
    • ビルド・テスト
    • ドキュメント更新
    • プルリクエスト作成

ライセンス・運用状況

  • ライセンス :Apache License 2.0(詳細はLICENSE参照)
  • 運用実績
    • バージョン:2.0.0
    • MCPツール:110種フル実装
    • コンパイル成功率:100%
    • バッチ効率:APIコール93%削減
    • Ghidraスクリプト:70種以上
    • ドキュメント:AIプロンプト含む包括的内容
    • リリースノート:CHANGELOG.md参照

謝辞

  • Ghidra Team :優れたリバースエンジニアリングプラットフォームの提供
  • Model Context Protocolコミュニティ :MCP実装・標準化推進

Hackerたちの意見

こんにちはHN、複数のバージョンにわたるソフトウェアのリバースエンジニアリングは本当に面倒だから、これを作ったんだ。バージョン1.07で関数に注釈を付けるのに何時間もかけたのに、1.08が出たらすべてのアドレスがずれて、せっかくの努力が無駄になる。核心的なアイデアは、正規化された関数ハッシュシステムだよ。関数を論理構造—ニーモニック、オペランドのカテゴリ、制御フロー—でハッシュ化するんだ。生のバイトや絶対アドレスじゃなくてね。バイナリが再コンパイルされたり、リベースされたりしても、同じ関数は同じハッシュを生成する。だから、すべてのドキュメント(名前、型、コメント)が自動的に転送されるんだ。それに、110のツールを備えた完全なMCPブリッジもあるよ。デコンパイル、逆アセンブル、クロスリファレンス、注釈、バッチ分析、ヘッドレス/Dockerデプロイメントができる。ClaudeやClaude Code、またはMCP準拠のクライアントとも統合できる。参考までに、最も人気のあるGhidra MCPサーバー(LaurieWiredの、7K以上のスター)は約15のツールしかない。このプロジェクトのフォークとして始まったけど、28,600行のかなり異なるコードに成長したんだ。アーキテクチャは、Java Ghidraプラグイン(22K LOC)→ Ghidra内にHTTPサーバーを埋め込む、Python MCPブリッジ(6.5K LOC)→ バッチ最適化のある110のツール、任意のMCPクライアント→ Claude、スクリプト、CIパイプライン。ハッシングはDiablo IIで検証したよ—数十のパッチバージョンがあって、それぞれ異なるベースアドレスでDLLを再構築する。ハッシュレジストリには154K以上のエントリーがあって、1,300以上の関数注釈を自動的に次のバージョンに伝播できる。ヘッドレスモードはDocker(docker compose up)でバッチ処理とCI統合のために動作するから、GUIは不要だよ。v2.0.0では、ローカルホスト専用のバインディング(セキュリティ)、設定可能なタイムアウト、ラベル削除ツール、.envベースの設定が追加された。ハッシングアプローチやMCPプロトコルの設計決定、これが現代のREワークフローにどうフィットするかについて話すのは大歓迎だよ。

共有してくれてありがとう!すぐに試してみるね。Androidバイナリのデコンパイルには対応してる?

これ、ReVaと比べてどうなの?https://github.com/cyberkaida/reverse-engineering-assistant インストール手順が不完全だと思う。指示に従ってプロジェクトビューでファイル -> インストールでインストールしたんだけど、再起動してもバイナリを開いた後にGhidraMCPがツールに表示されない。

あなたの関数ハッシュシステムは、ghidraの組み込みFunctionIDやbindiffプラグイン[0]と比べて何を提供するの? [0] https://github.com/google/bindiff

MCPインターフェースがたくさんのツールと連携すると、少ないツールと連携するよりもパフォーマンスが悪くなると思ってたんだけど、これってあまり良いデザインじゃない気がする。これもただの雰囲気だけのゴミに見える。

その通り。ただ、vibecodedのスキルベースのツールは、これよりもずっと効率的に動くと思う。

アプリ自体は見てないけど、MCPツールの問題は今はレイジーローディングでかなり解決されてる。完璧ではないけど、即時コンテキストウィンドウのオーバーロード問題は解消されたよ(対応してるクライアントではね)。あとはほとんどのMCPツールがAPIコールを変換するだけで、その機能や返り値のデータ構造がLLMには合わないってことだね。

Ghidraがここにあるのは面白いね!職場の友達が最近(Claudeと一緒に)River Rideゲームをハックするのに使ったんだ(https://quesma.com/blog/ghidra-mcp-unlimited-lives/)。それに触発されて、私も挑戦してみた。リバースエンジニアリングの経験は全くなかったけど、古いゲームをPowerPCからApple Siliconに移植したよ。まず、Claude Codeと一緒にいくつかのMCPを含めた(LaurieWired/GhidraMCPからフォークしたやつや、https://github.com/jtang613/GhidrAssistMCP)。でも、エージェントがたくさんのコードを作り上げちゃって、ソースから翻訳する代わりになっちゃった。結局、Cursor + GPT 5.2 Codexでヘッドレスモードを直接使ったら、結果は最高だったよ。時間ができたら、まとめを共有するね。

逆アセンブルにも挑戦してみたけど、すごく感心してる。GPT-5.2のCodexはClaudeよりも逆アセンブルが得意みたい。例えば、Codexはこの1,300行のC64-SIDファイルの例を、30分で完全に逆アセンブルできちゃうんだ。人間の手を借りずにね。今、C64ゲームを完全に逆アセンブルできるマルチエージェントシステムを作ってるところ。古いMS-DOSゲームは、予算の関係でまだ分析するには大きすぎるけど。[0] https://gist.github.com/s-macke/595982d46d6699b69e1f0e051e7b...

もう数ヶ月、元の15ツール版を使ってるけど、すごくいいよ。どんなアプリの内部動作も突然透明になる。バグを追跡できるし、どんなツールについても深く理解できるし、プラグインやプリロードシムを作ってアプリを改造することもできる。まるで、数年前に買ったソフトウェアをやっと本当に「所有」した気分だよ。Objective-Cが多いコードには、Hopper Disassemblerも使ってる(今は内蔵のMCPサーバーがある)。関連する学術的な作業(LLMsとGhidraでの完全再コンパイル):https://dl.acm.org/doi/10.1145/3728958

アプリケーションのリバースエンジニアリングについて話して、OSSと同じにするのは、GitHubで働いてるときにはあまり良くない印象だね…。

シンプルな質問なんだけど、CLIにしないのはなぜ?最近、LLMやエージェントツールは膨れ上がったMCPよりもCLIを使う方が良いみたいだし。

トレーニングデータにあるCLIツールには確かに効果的だと思うけど、新しいツールの場合は、結局フルドキュメントをコンテキストに入れないといけないよね。

そう考えてた、もしくはもっと汎用的なツールが少ない方がいいね。110個のツールの説明が常にコンテキストウィンドウにあるのはただのノイズだよ。

明らかになる前に始まったから、MCPはリソースを食い尽くす存在だったんだよね。 https://github.com/LaurieWired/GhidraMCP

Claude Codeみたいなツールはここが改善されてる。全てのツールを読み込むんじゃなくて、ツール検索に頼るようになった。MCPサーバーのコンテキストの膨張は、クライアントが下手に書かれているときに問題だったけど、確実に良くなってきてるね。

私は逆アセンブラじゃないんだ。実際、自分では中級者のコーダー(正直、スクリプターに近い)だと思ってるけど、一般的な技術経験は数十年あるんだ。Claudeのコードと別のGhidra MCPを使って、ランサムウェアの暗号化ツールと復号化ツール(両方持ってた)を逆アセンブルして、より信頼性の高い復号化ツールを作ったよ。テラバイトのデータを救った感じ!スーパーパワーを手に入れたみたいだった!

最近、別のGhidra MCPサーバー(LaurieWiredの)を使って、ソフトウェアを解放してみたんだ。バイナリを分析してキー生成するのがどれだけ簡単だったか、言葉にできないくらい楽しかった。進める中でたくさん学んだよ。他の人にもぜひやってみてほしい、すごく楽しい夜の過ごし方だと思う。このMCPサーバーも試してみるつもり!

昔書いたソフトがあって、存在しないサーバーに接続して認証チェックをするんだけど、そのチェックは絶対に通らないんだ。自分でGhidraのツールやスキル、エージェント、MCPを作ろうとしたけど、全然うまくいかない。これは「人間のスキル」の問題だと思うけど、ほんと…諦めた次の週にこれが出てくるなんて皮肉だよね。

MCPサーバーは見てないけど、一般的にAIを使ったリバースエンジニアリングはかなり過小評価されてると思う。特定のアプリを使わないとファイルが開けないように、暗号化でユーザーをロックするAndroidアプリから暗号鍵を抽出するのに成功したことがあるよ。ちなみに、このアプリはシェーダーに鍵を埋め込んでいて、その鍵を取得するには実際にAndroidデバイスでそのシェーダーを実行する必要があったんだ。

友達と一緒に、(もう更新されてない)UnityのアーケードゲームをClaudeに渡してみたんだ。それをデコンパイルして、ブラウザで動くように1対1のTypeScriptポートを作ってくれた。今はマルチプレイヤーサポートを追加してるところ(個人用だから、安心してHN - 配布はしないよ)。AIがレガシーソフトウェアに何ができるか、すごく楽しみだよ。

同意するよ。MCPに接続した複数のツールとエージェントを使ってリバースエンジニアリングを試みたんだけど、それはバイナリからソースコードがどう見えたか、どんな脆弱性があるかを再現するように指示されてた。実際のソースと比べたら、驚くほど良い仕事をしてくれたよ。

ところで、このアプリはキーをシェーダーに埋め込んでいて、そのキーを取得するには実際にAndroidデバイスでそのシェーダーを実行する必要があったんだ。おお、賢いね。これがどうやって行われたのか、もっと詳しく教えてくれない?

ハードウェア要件がどこにも書いてないんだけど、シンプルなCPUで動くの?それとも decentなGPUが必要なの?

LLMはデコンパイルされたコードを理解するのがすごく得意だよね。ほとんどすべてが実質的にオープンソースになってるってことに、みんなが気づいてないと思う!