Skip to main content
Glama

GhidraLens

Ghidra を AI クライアント内に表示。シンボルをクリックすると名前を変更でき、コールをクリックすると追跡できます。

MCP Apps Ghidra 11.3+ Local models MIT

The decompiler view

これまでの Ghidra MCP サーバーはどれもテキストを返すだけでした。モデルは読めますが、ユーザーは操作できません。GhidraLens は同じ解析結果を インタラクティブビュー として返します。これは MCP Appsio.modelcontextprotocol/ui)上に構築されています。この拡張機能により、サーバーは実際の HTML を会話に組み込めるようになります。

あなたとモデルは同じライブプログラムを見ています。変数をクリックして名前を変更すると、モデルが次にデコンパイルするときには新しい名前が反映されます。

これは実際のスクリーンショットです。where.exe を Ghidra でデコンパイルしたもので、すべての識別子に由来元のアドレスが付与されています。


できること

ビュー

説明

デコンパイラ

Ghidra の C 出力をライブなトークンストリームとして表示。すべての識別子にアドレスと種類が付与されます。ローカル変数をクリックすると名前を変更でき、コールをクリックすると追跡できます。サイドバーには呼び出し元、呼び出し先、変数が表示されます。

関数ブラウザ

バイナリ内のすべての関数を、アドレス・名前・サイズ・呼び出し元数でフィルタリング/ソートできます。行をクリックするとデコンパイルします。

コールグラフ

呼び出し元を左、呼び出し先を右、指定した関数を中央に表示。ノードをクリックすると中央に再配置します。

関数ブラウザ

The function browser

コールグラフ

The call graph

ツールは全部で10個。3つはビューを開き、残りは検索と書き込みです。その中にはモデルが決して見ることのない2つがあり、ビュー内のクリックが発火させるためだけに存在します。

Related MCP server: GhidraMCP

連携の仕組み

  MCP client  ──stdio──▶  server/  ──HTTP──▶  bridge/  ──JPype──▶  Ghidra (JVM)
  (Claude,                 TypeScript         PyGhidra            program stays
   Cursor, …)              MCP server         session             resident
       ▲
       │  ui:// HTML in a sandboxed iframe
       └──  ui/  three self-contained views

ブリッジは意図的に独立した常駐プロセスにしています。Ghidra の自動解析はコストの高い処理ですが、これは 一度だけ 実行されます。64 KB の Windows システムユーティリティ(198関数)で測定した結果は次のとおりです。

初回オープン(解析込み)

25 秒

同じバイナリを再度開く

0.3 秒

2 KB の関数を1つデコンパイル

0.4 秒

87ノードのコールグラフ

< 0.1 秒

MCP サーバーやクライアントを再起動しても、解析済みのプログラムはそのまま残ります。

セットアップ

前提条件: Ghidra 11.3+、JDK 21+、Python 3.9–3.13(3.14 は不可 — JPype にまだ wheel がないため)、Node 20+。bridge/setup.py.md を参照してください。Python 側は要求が厳しく、そのファイルに失敗するすべてのパターンが記載されています。JAVA_HOME が未設定の場合、GhidraLens が JDK を見つけてくれます。これにより「Java はインストール済みだがシェルを再起動していない」というよくあるケースにも対応できます。

git clone https://github.com/hellosverre/ghidralens
cd ghidralens
npm install
npm run build

次に、確認したいバイナリに対してブリッジを起動します:

python bridge/serve.py --binary /path/to/target.exe

トークンが出力されます。そのトークンとビルド済みサーバーへのパスを MCP クライアントの設定に記入します:

{
  "mcpServers": {
    "ghidralens": {
      "command": "node",
      "args": ["/absolute/path/to/ghidralens/server/dist/index.js"],
      "env": {
        "GHIDRALENS_BRIDGE_URL": "http://127.0.0.1:8799",
        "GHIDRALENS_TOKEN": "paste-the-printed-token-here"
      }
    }
  }
}

あとはクライアントに次のように依頼するだけです: 「ライセンス検証を処理する関数をデコンパイルして」

ツール

ツール

表示先

レンダリング

open_binary

モデル

program_info

モデル

decompile

モデル + ビュー

デコンパイラ

list_functions

モデル + ビュー

関数ブラウザ

call_graph

モデル + ビュー

コールグラフ

find_strings

モデル

xrefs_to

モデル + ビュー

rename_symbol

モデル + ビュー

add_comment

ビューのみ

save_program

モデル

add_comment は意図的にモデルから隠されています。可視性は、MCP Apps が「エージェントが実行してよい操作」と「クリックが実行してよい操作」を分離する仕組みです。書き込みツールをモデルの一覧から外すことで、一覧を短く保ち、モデルが自発的に名前を変更するのを防ぎます。

名前の変更とコメントは、save_program で Ghidra プロジェクトに書き込まれるまでメモリ上に保持されます。書き込んだ後は、他の編集と同様に Ghidra GUI に表示されます。

Ghidra なしでビューを開発する

npm run dev:ui
# open http://localhost:5173/dev/harness.html

ui/dev/harness.ts本物の MCP Apps ホスト です。iframe 内のビューに対して SDK の AppBridge を実行するため、ui/initialize ハンドシェイク、開始時の ui/notifications/tool-result、クリックによって発火するすべての tools/call は、実際の postMessage JSON-RPC を経由します。右側にはメッセージトレースとホストテーマの切り替えがあります。ビューは両方のテーマで正しく表示される必要があるためです。

ツールバーで切り替えられる2つのデータソース:

  • fixtures — Ghidra 不要、インストールも不要

  • live bridge — 実行中のブリッジにプロキシするため、実際に解析されたプログラムに対して開発できます

何かを信用する前に、live で確認してください。fixtures はきれいですが、実際の出力はローカル変数56個を伴う400行の関数と87ノードのコールグラフで、実際にレイアウトが崩れるのはこのようなケースです。

ローカルモデルで実行する

リバースエンジニアリングは、まさにホスト型モデルに送信したくない種類の作業です。そのため、agent/ollama-agent.mjs は GhidraLens を Ollama の背後に置く小さな MCP ホストです。API キーは不要で、データがマシンの外に出ることもありません。

OLLAMA_MODEL=qwen3:14b node agent/ollama-agent.mjs "what does this binary do?"

_meta.ui.visibility を尊重するため、アプリ専用ツールはモデルから見えないままになります。これはグラフィカルクライアントが強制するのと同じ分離です。~9B モデルでも find_stringslist_functions を使って方向を掴むには十分です。14B モデルなら、デコンパイルされた C を読む能力が著しく向上します。

テスト

スイート

Ghidra の要否

対象

node server/smoke.mjs

不要

MCP サーフェス: ツール、ui:// リソース、ツールの可視性、ブリッジなしでのグレースフルな失敗

python bridge/test_serve.py

不要

ブリッジの認証、CSRF 拒否、ルーティング、入力検証

python bridge/test_session.py

必要

すべての Ghidra 呼び出し: 解析、キャッシュ、デコンパイラトークン、インポート、名前変更、書き込み

node server/live.mjs

必要(ブリッジ実行中)

チェーン全体と、すべてのペイロードがビューの参照先の形状に一致すること

最初の2つは CI で実行できるものです。test_session.pybridge/session.py に手を加えた後に重要となるテストです。Ghidra API 呼び出しが正しいことを証明できる唯一のテストであり、書かれた当日に実際のバグを3件検出しました。

セキュリティ

ブリッジは 127.0.0.1 にのみバインドし、X-GhidraLens-Token に実行ごとのトークンを要求し、Origin または Referer ヘッダーを含むリクエストをすべて拒否します。そのため、ブラウザで開いているページがデコンパイラに到達することはできません。マルチユーザーモデルはなく、外部公開を想定していません。--host はループバック以外を拒否します。

バイナリの解析はそれを実行するわけではありませんが、Ghidra はマルウェアをためらいなく開きます。他のリバースエンジニアリング作業と同じ隔離策を使用してください。

ライセンス

MIT。

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
2Releases (12mo)
Commit activity

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to autonomously reverse engineer binaries using Ghidra's capabilities including decompilation, function analysis, automatic renaming, and BSim integration for function similarity matching.
    1
    AGPL 3.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Bridges Ghidra's reverse engineering capabilities with AI tools through 179 specialized tools for automated binary analysis and documentation. It supports full read/write access for function decompilation, renaming, and cross-binary documentation transfer in both GUI and headless modes.
    Apache 2.0

View all related MCP servers

Related MCP Connectors

  • Renders interactive Chart.js charts and dashboards inline in AI conversations.

  • Live browser debugging for AI assistants — DOM, console, network via MCP.

  • AI Agent with Architectural Memory. Impact analysis (free), tests and code from the graph (pro).

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hellosverre/ghidralens'

If you have feedback or need assistance with the MCP directory API, please join our Discord server