Claude-Reverser/IDA-instances-MCP
Custom build of ida-pro-mcp - stability-hardened MCP server for hosting headless IDA Pro instances
IDA-Instances-MCP – IDA Pro用の安定したマルチインスタンスMCPサーバー
何であるか
- ida-pro-mcp のカスタムフォークで、AIツール(Claude Code、Cursor、VS Code拡張など)がIDA Proをプログラム的に制御できるModel-Context-Protocol (MCP) サーバーを実行します。
- 「headless-instances」レイヤーを追加し、複数のIDAワーカーを並列で実行可能にし、それぞれが独自の隔離されたデータベースを持ち、単一のHTTP(またはstdio)エンドポイントの背後で動作します。
上流リポジトリとの主な改善点
| 分野 | 改善点 |
|---|---|
| データの安全性 | 他のライブセッションに属する .id0/.id1/.id2/.nam/.til ファイルを削除しない。 |
| 保存の信頼性 | idb_save に10分の予算を割り当て、保存失敗しても変更を破棄しない。 |
| 同時実行性 | サーバー全体がワーカーの起動やクリーンアップ中にブロックされなくなる。 |
| ロバスト性 | 不正なJSON-RPCはクラッシュせず、適切なエラーコードを返す。 |
| タイムアウト | プロキシタイムアウトを15分(設定可能)に引き上げ、長時間のデコンパイルを完了可能に。 |
| ネットワーク | ポート競合対策、ロックされたSSE書き込み、キャッシュされたCORS読み取り。 |
| リソース制限 | トレースログは64 MiBで上限、過大な引数/結果は切り捨て、失敗キューは上限付き。 |
| 認証 | すべてのHTTPリクエストに一時的に発行されたAPIキー(GET /key)が必要。 |
| 管理エンドポイント | /health、/sessions、/upload(バイナリアップロード、サイズ制限あり)。 |
| インアクティブな再回収 | IDA_MCP_IDLE_TIMEOUT分以上非アクティブなセッションは自動保存後に閉じられる。 |
| グレースフルシャットダウン | SIGTERM/SIGINT受信時にすべての開いているデータベースが保存される。 |
| セルフアップデート | 起動時にGitHubリリースをチェックし、キーストロークで自動更新可能。 |
| デフォルト設定 | 0.0.0.0:9999 でリッスン;GUIプラグインも 0.0.0.0 にバインドし、同じAPIキーを使用。 |
動作方法
- スーパーバイザー(
idalib-mcp)が軽量なHTTPサーバーとして実行され、開かれた各IDBに対して別個のワーカープロセスを生成します。各プロセスはヘッドレスモードでIDAのidalibをロードします。 - クライアントはHTTP(またはstdio)上でMCP(JSON-RPC)を用いて通信します。スーパーバイザーは呼び出しを適切なワーカーに転送し、タイムアウトを強制し、結果を返します。
- 開始時に生成されたAPIキーがすべてのエンドポイントを保護します。キーは
~/.idapro/mcp/api_keyに保存され、再起動後も保持されます。
一般的なワークフロー
# 1️⃣ IDAのPython環境をアクティブ化(uvが推奨されるパッケージマネージャ)
uv run "/opt/idapro-9.x/idalib/python/py-activate-idalib.py"
# 2️⃣ ヘッドレスMCPサーバーを起動(デフォルトで0.0.0.0:9999にバインド)
uv run idalib-mcp
# 3️⃣ 一時的なAPIキーを取得
KEY=$(curl -s http://host:9999/key | jq -r .key)
# 4️⃣ バイナリを分析用にアップロード
curl -H "Authorization: Bearer $KEY" \
--data-binary @sample.elf \
"http://host:9999/upload?filename=sample.elf"
# 5️⃣ MCP対応クライアント(例:Claude Code)を同じキーを使ってサーバーに接続。
インタラクティブGUIプロキシの実行
- IDA内に MCP プラグインをインストール(
Edit → Plugins → MCP)。 - ターミナルから:
uv run ida-pro-mcp(stdio)またはuv run ida-pro-mcp --transport http://127.0.0.1:9999で、フルIDA UIで作業しながら同じHTTP APIを公開。
設定(環境変数、コマンドラインフラグ)
IDA_MCP_MAX_WORKERS– 同時実行可能なIDAインスタンスの最大数(デフォルト4、0は無制限)。IDA_MCP_IDLE_TIMEOUT– セッションが自動クローズされる非アクティブ時間(分、デフォルト60)。IDA_MCP_PROXY_TIMEOUT– GUIプロキシからワーカーへの呼び出しのタイムアウト(デフォルト900秒)。IDA_MCP_API_KEY/IDA_MCP_API_KEY_FILE– 事前に生成されたキーを注入。- その他、オープン時間制限、アップロードサイズ制限、ヘルスプローブ予算などを制御する設定。
利用例
- AI支援リバースエンジニアリング:Claude Code、Cursor、または他のLLM駆動エージェントが、人間がUIに存在しない状態でIDA分析(デコンパイル、シンボル名変更、CFG抽出)を実行。
- バッチ分析ファーム:サーバー上で数十のヘッドレスIDAワーカーを起動し、それぞれが別々のバイナリを処理し、MCPで統合制御。
- CI/CDセキュリティスキャン:パイプラインにサーバーを統合し、バイナリを自動アップロードし、IDA内で静的解析ツールを実行し、結果を取得。
テスト
リポジトリには ida-mcp-test ヘルパーが同梱されており、サンプルELFバイナリに対してさまざまな分析カテゴリで実行する方法が例示されています。
ライセンス
- MIT(上流の
ida-pro-mcpから継承)。 - 有効な商用IDA Proライセンスが必要;無料版はサポート対象外。
この要約はリポジトリのREADMEに基づいています。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト