mcpField
A
Another™ MCP Server for Binary Ninja

Another™ MCP Server for Binary Ninja

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

Another™ MCP Server for Binary Ninja について

Another MCP Server for Binary Ninja は、Binary Ninja で開いたバイナリを AI クライアントから解析できるようにする MCP サーバーです。UI プラグインとしても、コマンドラインからのヘッドレス実行としても動作します。リバースエンジニアリングや セキュリティ研究を行う利用者向けです。

主な機能

  1. 01関数名・データ変数名の変更
  2. 02擬似 C・擬似 Rust・中間言語の取得
  3. 03逆アセンブル、インポート、エクスポートの確認
  4. 04文字列・関数・データ変数の一覧取得
  5. 05SSE と stdio による接続

活用シーン

  1. 01AI クライアントに逆コンパイル結果の説明を依頼する
  2. 02ヘッドレス環境でバイナリ解析サービスを提供する
  3. 03Claude Desktop や Cherry Studio からバイナリ構造を照会する

MCP 対応

本プロジェクトは MCP サーバーであり、Binary Ninja で開いた各ファイルを binaryninja:// URI のリソースとして公開し、pseudo_c や disassembly などのツールを MCP クライアントに提供します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"binaryninja": {
"command": "uvx",
"args": [
"binaryninja-mcp"
]
}
}
}
起動コマンドuvx binaryninja-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypibinaryninja-mcp

ツール

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

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

詳細

Binary Ninja 用 Another™ MCP サーバー

Binary Ninja 用 MCP(Model Context Protocol)サーバー

PyPI Apache licensed Python Version GitHub Discussions

英語 | 中文

デモ

tests/binary/beleaf.elf は CSAW'19: Beleaf - Nightmare から取得したものです。 上記リンクから完全な解説もご覧いただけます!

デモ

…それでも Another なのはなぜ?

こちらをご覧ください: 既存のプラグインとの主な違い

インストール

サーバーのセットアップ

MCP サーバーの実行方法は 2 通りあります。

  1. Binary Ninja UI プラグイン:

    • Binary Ninja のプラグインマネージャーからプラグインをインストールします
    • 最初のファイルが読み込まれると、MCP サーバーが自動的に起動します。
      • 自動起動は Settings - MCP Server - Auto Start から設定できます
      • リッスンポートは Settings - MCP Server - Server port number から設定できます
    • 開いているファイルはそれぞれ別のリソースとして公開されます。詳しくは以下の 利用可能なリソース セクションをご覧ください
  2. Binary Ninja ヘッドレスモード:

    uvx binaryninja-mcp install-api  # only run once
    uvx binaryninja-mcp server <filename> [filename]...
    
    • filename には任意のバイナリファイルまたは BNDB を指定できます。UI モードと同様に、開いているファイルはすべて MCP クライアントから利用できます。
    • サーバーはデフォルトのポート 7000 で実行されます
    • 別のポートを指定するには --port フラグを使用します

MCP クライアントのセットアップ

  1. Claude Desktop(stdio リレー クライアント):組み込みのリレーを使用して stdio トランスポート経由で接続するよう、クライアントを設定します。

    {
      "mcpServers": {
        "binaryninja": {
          "command": "uvx",
          "args": ["binaryninja-mcp", "client"]
        }
      }
    }
    
  2. Cherry Studio:

    • SSE エンドポイント(推奨):URL:http://localhost:7000/sse
    • stdio クライアント:
      • コマンド:uvx
      • 引数:
        binaryninja-mcp
        client
        

デフォルト以外のポートで MCP サーバーを実行する場合は、サーバーとクライアントの両方のコマンドラインに --port 12345 を追加してください。

MCP クライアントで利用できるツール

MCP サーバーでは、以下のツールを利用できます。

  • rename_symbol:関数またはデータ変数の名前を変更します
  • pseudo_c:指定した関数の擬似 C コードを取得します
  • pseudo_rust:指定した関数の擬似 Rust コードを取得します
  • high_level_il:指定した関数の高レベル IL を取得します
  • medium_level_il:指定した関数の中レベル IL を取得します
  • disassembly:関数または指定した範囲の逆アセンブリを取得します
  • update_analysis_and_wait:バイナリの解析を更新し、完了まで待機します
  • get_triage_summary:BinaryNinja の Triage ビューから基本情報を取得します
  • get_imports:インポートされたシンボルの辞書を取得します
  • get_exports:エクスポートされたシンボルの辞書を取得します
  • get_segments:メモリセグメントの一覧を取得します
  • get_sections:バイナリセクションの一覧を取得します
  • get_strings:バイナリ内で見つかった文字列の一覧を取得します
  • get_functions:関数の一覧を取得します
  • get_data_variables:データ変数の一覧を取得します

MCP クライアントで利用できるリソース

MCP リソースには、次の形式の URI でアクセスできます。 binaryninja://{filename}/{resource_type}

サーバーは各バイナリについて、次の種類のリソースを提供します。

  • triage_summary:BinaryNinja のトリアージビューの基本情報
  • imports:インポートされたシンボル/関数の辞書
  • exports:エクスポートされたシンボル/関数の辞書
  • segments:メモリセグメントの一覧
  • sections:バイナリセクションの一覧
  • strings:バイナリ内で見つかった文字列の一覧
  • functions:関数の一覧
  • data_variables:データ変数の一覧

開発

uv は、このプロジェクトで推奨されるパッケージ管理ツールです。

ディレクトリを Binary Ninja のプラグインディレクトリにクローンする

git clone https://github.com/MCPPhalanx/binaryninja-mcp.git "${env:APPDATA}\Binary Ninja\plugins\MCPPhalanx_binaryninja_mcp"

Python 環境をセットアップする

Binary Ninja API は、手動で仮想環境にインストールする必要があります。

uv venv
uv sync --dev
# install binaryninja API
binaryninja-mcp install-api
# check API is correctly installed
uv run python -c 'import binaryninja as bn; assert bn._init_plugins() is None; assert bn.core_ui_enabled() is not None; print("BN API check PASSED!!")'

開発用に MCP クライアントをセットアップする

Claude Desktop のような stdio トランスポートを使用する MCP クライアントでは、作業ディレクトリを開発フォルダーに変更してください。

{
  "mcpServers": {
    "binaryninja": {
      "command": "uv",
      "args": [
        "--directory",
        "C:/path/to/binaryninja-mcp",
        "run",
        "binaryninja-mcp",
        "client"
      ]
    }
  }
}

SSE 対応の MCP クライアントは、次の URL を使用して接続できます:http://localhost:7000/sse

ビルド

uv build

テスト

pytest
# To update test snapshots:
pytest --snapshot-update

バージョンの更新

PyPI パッケージのバージョンは、Binary Ninja の plugin.json(package.json 形式)から自動的に取得されるため、BN プラグインと PyPI パッケージのバージョンの一貫性が保たれます。

# bump alpha version
uvx hatch version a

# bump release version
uvx hatch version minor,rc
uvx hatch version release

参照:バージョン管理 - Hatch

リリース

uv publish

ライセンス

Apache 2.0

コメント

MCP は初めてですか?

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

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