🚀 BinAssistMCP
BinAssistMCPは、Binary NinjaとClaudeなどの大規模言語モデル(LLM)を強力に結びつけ、モデルコンテキストプロトコル(MCP)を通じて包括的な逆アセンブリツールを提供します。これにより、Server-Sent Events(SSE)とSTDIOの両方のトランスポートを通じてBinary Ninjaの高度な機能を活用したAI支援型のバイナリ解析が可能になります。
🚀 クイックスタート
BinAssistMCPは、Binary Ninjaと大規模言語モデル(LLM)の間の強力な橋渡し役として機能します。これは、Model Context Protocol (MCP) を通じて包括的な逆エンジニアリングツールを提供し、Server-Sent Events (SSE) とSTDIOの両方のトランスポートを介してBinary Ninjaの高度な機能を公開することで、AI支援型のバイナリ解析を可能にします。
✨ 主な機能
- 二重トランスポートサポート:SSE(Webベース)とSTDIO(コマンドライン)の両方のトランスポートをサポート
- 40以上の解析ツール:高度な機能を備えた完全なBinary Ninja APIラッパー
- マルチバイナリセッション:複数のバイナリを同時に解析し、インテリジェントなコンテキスト管理を行う
- スマートシンボル管理:高度な関数検索、名前変更、および型管理
- 自動統合:自動起動機能を備えたシームレスなBinary Ninjaプラグイン
- 柔軟な設定:Binary Ninjaのインターフェースを通じた包括的な設定管理
- AI対応:構造化されたツール応答でLLM統合に最適化
📦 インストール
前提条件
- Binary Ninja:バージョン4000以上
- Python:3.8以上(通常はBinary Ninjaに同梱されています)
- プラットフォーム:Windows、macOS、またはLinux
オプション1:Binary Ninjaプラグインマネージャー(推奨)
- Binary Ninjaを開きます。
- Tools → Manage Pluginsに移動します。
- "BinAssistMCP"を検索します。
- Installをクリックします。
- Binary Ninjaを再起動します。
オプション2:手動インストール
ステップ1:ダウンロードと抽出
git clone https://github.com/jtang613/BinAssistMCP.git
cd BinAssistMCP
ステップ2:依存関係のインストール
pip install -r requirements.txt
pip install anyio>=4.0.0 hypercorn>=0.16.0 mcp>=1.0.0 trio>=0.27.0 pydantic>=2.0.0 pydantic-settings>=2.0.0 click>=8.0.0
ステップ3:プラグインディレクトリにコピー
Windows:
copy BinAssistMCP "%APPDATA%\Binary Ninja\plugins\"
macOS:
cp -r BinAssistMCP ~/Library/Application\ Support/Binary\ Ninja/plugins/
Linux:
cp -r BinAssistMCP ~/.binaryninja/plugins/
ステップ4:インストールの確認
- Binary Ninjaを再起動します。
- 任意のバイナリファイルを開きます。
- Toolsメニューに"BinAssistMCP"サブメニューがあることを確認します。
- ログパネルで起動メッセージを確認します。
設定
基本設定
- Binary Ninjaの設定(Edit → Preferences)を開きます。
- binassistmcpセクションに移動します。
- サーバー設定を構成します。
- Host:
localhost(デフォルト)
- Port:
9090(デフォルト)
- Transport:
both(SSE + STDIO)
高度な設定
export BINASSISTMCP_SERVER__HOST=localhost
export BINASSISTMCP_SERVER__PORT=9090
export BINASSISTMCP_SERVER__TRANSPORT=both
export BINASSISTMCP_BINARY__MAX_BINARIES=10
💻 使用例
基本的な使用法
サーバーの起動
Binary Ninjaメニューを介して:
- Tools → BinAssistMCP → Start Serverを選択します。
- ログパネルで起動確認メッセージを確認します。
- サーバーURL(例:
http://localhost:9090)をメモします。
自動起動(デフォルト):
- Binary Ninjaがファイルを読み込むと、サーバーが自動的に起動します。
- 設定
binassistmcp.plugin.auto_startupを介して構成可能です。
Claude Desktopとの接続
Claude DesktopのMCP設定に追加します。
{
"mcpServers": {
"binassist": {
"command": "python",
"args": ["/path/to/BinAssistMCP"],
"env": {
"BINASSISTMCP_SERVER__TRANSPORT": "stdio"
}
}
}
}
SSEトランスポートでの使用
WebベースのMCPクライアントを次のURLに接続します。
http://localhost:9090/sse
高度な使用法
基本的な関数解析
Claudeに問いかける: "読み込まれたバイナリのmain関数を解析し、その機能を説明してください"
Claudeは以下のツールを使用します:
- get_functions() でmain関数を検索
- decompile_function() で読みやすいコードを取得
- get_function_pseudo_c() で擬似C表現を取得
- analyze_function() で包括的な解析を行う
脆弱性研究
Claudeに問いかける: "ユーザー入力を処理するすべての関数を見つけ、バッファオーバーフローをチェックしてください"
Claudeは以下を使用します:
- search_functions_advanced() で入力ハンドラーを検索
- get_cross_references() でデータフローを追跡
- get_variables() でバッファの使用状況を分析
- set_comment() で調査結果を文書化
📚 ドキュメント
ツール詳細
BinAssistMCPは、機能カテゴリに分類された40以上の特殊ツールを提供します。
バイナリ管理
list_binaries - すべての読み込まれたバイナリファイルをリストする
get_binary_status - 解析ステータスとメタデータを確認する
update_analysis_and_wait - 解析の更新を強制し、完了を待つ
コード解析と逆コンパイル
decompile_function - 高レベルの逆コンパイルコードを生成する
get_function_pseudo_c - 擬似C表現を抽出する
get_function_high_level_il - 高レベル中間言語にアクセスする
get_function_medium_level_il - 中レベル中間言語にアクセスする
get_disassembly - 注釈付きのアセンブリコードを取得する
情報検索
get_functions - メタデータ付きのすべての関数をリストする
search_functions_by_name - 名前パターンで関数を検索する
get_functions_advanced - 高度なフィルタリング(サイズ、複雑さ、パラメータ)
search_functions_advanced - マルチターゲット検索(名前、コメント、呼び出し、変数)
get_function_statistics - 包括的なバイナリ統計情報
get_imports - モジュール別にグループ化されたインポートテーブル分析
get_exports - シンボル情報付きのエクスポートテーブル
get_strings - コンテキスト付きの文字列抽出
get_segments - メモリレイアウト分析
get_sections - バイナリセクション情報
シンボルと名前管理
rename_symbol - 関数とデータ変数の名前を変更する
get_cross_references - シンボルへのすべての参照を検索する
analyze_function - 包括的な関数分析
get_call_graph - 呼び出し関係のマッピング
ドキュメントとコメント
set_comment - 特定のアドレスにコメントを追加する
get_comment - アドレスのコメントを取得する
get_all_comments - コンテキスト付きのすべてのコメントをエクスポートする
remove_comment - 既存のコメントを削除する
set_function_comment - 関数レベルのドキュメントを追加する
変数管理
create_variable - 関数内にローカル変数を定義する
get_variables - 関数パラメータとローカル変数をリストする
rename_variable - 変数名を明確にするために変更する
set_variable_type - 変数の型情報を更新する
型システム管理
create_type - カスタム型と構造体を定義する
get_types - すべてのユーザー定義型をリストする
create_enum - 列挙型を作成する
create_typedef - 型エイリアスを作成する
get_type_info - 詳細な型情報
get_classes - クラスと構造体をリストする
create_class - 新しいクラス/構造体を定義する
add_class_member - 既存の型にメンバーを追加する
データ分析
create_data_var - アドレスにデータ変数を定義する
get_data_vars - すべての定義されたデータ変数をリストする
get_data_at_address - 型推論を伴う生データの分析
ナビゲーションとコンテキスト
get_current_address - 現在のカーソル位置を取得する
get_current_function - 現在のアドレスの関数を特定する
get_namespaces - 名前空間とシンボルの組織化
高度な分析
get_triage_summary - 完全なバイナリ概要
get_function_statistics - すべての関数の統計分析
各ツールは、AIワークフローとのシームレスな統合を目的として設計されており、LLMが容易に解釈して操作できる構造化された応答を提供します。
トラブルシューティング
一般的な問題
サーバーが起動しない場合:
- Binary Ninjaのログパネルでエラーメッセージを確認します。
- すべての依存関係がインストールされていることを確認します。
- ポート9090が使用されていないことを確認します。
Binary Ninjaがクラッシュする場合:
- Python環境の互換性を確認します。
max_binaries設定を減らしてみます。
- 単一のバイナリファイルで再起動します。
ツールがエラーを返す場合:
- バイナリ解析が完了していることを確認します。
- Binary Ninjaのファイルがまだ開いていることを確認します。
- 関数/アドレスが存在することを確認します。
サポート
- 問題報告:GitHub Issuesでバグを報告してください。
- Binary Ninja:公式のBinary Ninjaドキュメントを確認してください。
コントリビューション
- リポジトリをフォークします。
- 機能ブランチを作成します。
- 既存のコードスタイルに従って変更を加えます。
- 複数のバイナリタイプでテストします。
- プルリクエストを送信します。
📄 ライセンス
このプロジェクトはMITライセンスの下でライセンスされています。詳細についてはLICENSEファイルを参照してください。