IDA Pro MCP Server について
IDA Pro MCP Server は、AI アシスタントが MCP を通じて IDA Pro を操作し、リバースエンジニアリングとバイナリ解析を行えるようにするプロジェクトです。HTTP API を持つ IDA プラグイン、TypeScript クライアント、MCP サーバーの3つで構成されています。バイナリの調査を自動化したいセキュリティ研究者に向いています。
主な機能
- 01IDA Pro 内での Python スクリプト実行
- 02文字列、インポート、エクスポート、関数の一覧取得
- 03即値、テキスト、バイト列の検索
- 04アドレス範囲の逆アセンブル結果の取得
- 05プラグインのデフォルトのローカルホスト限定待ち受け
活用シーン
- 01AI アシスタントによるバイナリサンプルの解析支援
- 02バイナリ内の文字列やバイトパターンの検索
- 03スクリプトによる IDA Pro の解析手順の自動化
MCP 対応
MCP サーバーは run_ida_command や get_functions などのツールとして IDA Pro の機能を提供し、MCP クライアントから呼び出せるようにします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
IDA Pro MCP サーバー
AI アシスタントがリバースエンジニアリングやバイナリ解析のタスクで IDA Pro を操作できるようにする、Model Context Protocol(MCP)サーバーです。
概要
このプロジェクトは、リバースエンジニアリングに使用される人気の逆アセンブラーおよびデバッガーである IDA Pro と、AI アシスタントをつなぐブリッジを提供します。主に次の3つのコンポーネントで構成されています。
- IDA Pro リモート制御プラグイン(
ida_remote_server.py):IDA Pro の関数をリモートで制御するための HTTP サーバーを作成する IDA Pro プラグインです。 - IDA リモートクライアント(
idaremoteclient.ts):IDA Pro リモート制御サーバーとやり取りするための TypeScript クライアントです。 - MCP サーバー(
index.ts):IDA Pro の機能を AI アシスタントに公開する Model Context Protocol サーバーです。
機能
- AI アシスタントから IDA Pro で Python スクリプトを実行
- バイナリに関する情報を取得:
- 文字列
- インポート
- エクスポート
- 関数
- 高度なバイナリ解析機能:
- 命令内の即値を検索
- バイナリ内のテキスト文字列を検索
- 特定のバイト列を検索
- アドレス範囲の逆アセンブル結果を取得
- 標準化されたインターフェースを通じて IDA Pro の操作を自動化
- コンポーネント間の安全な通信
前提条件
- IDA Pro 8.3 以降
- Node.js 18 以降
- TypeScript
ida_remote_server.py の使用例
curl -X POST -H "Content-Type: application/json" -d '{"script":"print(\"Script initialization...\")"}' http://127.0.0.1:9045/api/execute
{"success": true, "output": "Script initialization...\n"}
MCP サーバーの使用例

インストール
1. IDA Pro リモート制御プラグインをインストールする
-
ida_remote_server.pyを IDA Pro のプラグインディレクトリにコピーします:- Windows:
%PROGRAMFILES%\IDA Pro\plugins - macOS:
/Applications/IDA Pro.app/Contents/MacOS/plugins - Linux:
/opt/idapro/plugins
- Windows:
-
IDA Pro を起動し、バイナリファイルを開きます。
-
プラグインによって、
127.0.0.1:9045で HTTP サーバーが自動的に起動します。
2. MCP サーバーをインストールする
-
このリポジトリをクローンします:
git clone <repository-url> cd ida-server -
依存関係をインストールします:
npm install -
プロジェクトをビルドします:
npm run build -
AI アシスタントの MCP 設定ファイルで MCP サーバーを設定します:
{ "mcpServers": { "ida-pro": { "command": "node", "args": ["path/to/ida-server/dist/index.js"], "env": {} } } }
使用方法
インストールと設定が完了すると、MCP サーバーは AI アシスタントに次のツールを提供します:
run_ida_command
IDA Pro の Python スクリプトを実行します。
パラメーター:
scriptPath(必須):実行するスクリプトファイルの絶対パスoutputPath(任意):スクリプトの出力を保存する絶対パス
例:
# Example IDA Pro script (save as /path/to/script.py)
import idautils
# Count functions
function_count = len(list(idautils.Functions()))
print(f"Binary has {function_count} functions")
# Get the first 5 function names
functions = list(idautils.Functions())[:5]
for func_ea in functions:
print(f"Function: {ida_name.get_ea_name(func_ea)} at {hex(func_ea)}")
# Return data
return_value = function_count
AI アシスタントは、次のようにこのスクリプトを使用できます:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>run_ida_command</tool_name>
<arguments>
{
"scriptPath": "/path/to/script.py"
}
</arguments>
</use_mcp_tool>
search_immediate_value
バイナリの命令内にある即値を検索します。
パラメーター:
value(必須):検索する値(数値または文字列)radix(任意):数値変換の基数(デフォルト:16)startAddress(任意):検索の開始アドレスendAddress(任意):検索の終了アドレス
例:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_immediate_value</tool_name>
<arguments>
{
"value": "42",
"radix": 10
}
</arguments>
</use_mcp_tool>
search_text
バイナリ内のテキスト文字列を検索します。
パラメーター:
text(必須):検索するテキストcaseSensitive(任意):大文字と小文字を区別するかどうか(デフォルト:false)startAddress(任意):検索の開始アドレスendAddress(任意):検索の終了アドレス
例:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_text</tool_name>
<arguments>
{
"text": "password",
"caseSensitive": false
}
</arguments>
</use_mcp_tool>
search_byte_sequence
バイナリ内の特定のバイト列を検索します。
パラメーター:
bytes(必須):検索するバイト列(例:3つの NOP を表す"90 90 90")startAddress(任意):検索の開始アドレスendAddress(任意):検索の終了アドレス
例:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_byte_sequence</tool_name>
<arguments>
{
"bytes": "90 90 90"
}
</arguments>
</use_mcp_tool>
get_disassembly
アドレス範囲の逆アセンブル結果を取得します。
パラメーター:
startAddress(必須):逆アセンブルの開始アドレスendAddress(任意):逆アセンブルの終了アドレスcount(任意):逆アセンブルする命令数
例:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_disassembly</tool_name>
<arguments>
{
"startAddress": "0x401000",
"count": 10
}
</arguments>
</use_mcp_tool>
get_functions
バイナリ内の関数一覧を取得します。
パラメーター:
- 必須のパラメーターはありません
例:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_functions</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>
get_exports
バイナリ内のエクスポート一覧を取得します。
パラメーター:
- 必須のパラメーターはありません
例:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_exports</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>
get_strings
バイナリ内の文字列一覧を取得します。
パラメーター:
- 必須のパラメーターはありません
例:
<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_strings</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>
IDA Pro リモートコントロール API
IDA Pro リモートコントロールプラグインは、次の HTTP エンドポイントを公開します。
GET /api/info:プラグイン情報を取得しますGET /api/strings:バイナリ内の文字列を取得しますGET /api/exports:バイナリ内のエクスポートを取得しますGET /api/imports:バイナリ内のインポートを取得しますGET /api/functions:関数一覧を取得しますGET /api/search/immediate:命令内の即値を検索しますGET /api/search/text:バイナリ内のテキストを検索しますGET /api/search/bytes:バイト列を検索しますGET /api/disassembly:アドレス範囲の逆アセンブル結果を取得しますPOST /api/execute:Python スクリプトを実行します(JSON/Form)POST /api/executebypath:ファイルパスから Python スクリプトを実行しますPOST /api/executebody:生のボディから Python スクリプトを実行します
セキュリティに関する考慮事項
デフォルトでは、セキュリティ上の理由から、IDA Pro リモートコントロールプラグインは 127.0.0.1(localhost)のみでリッスンします。これにより、IDA Pro インスタンスへのリモートアクセスを防止します。
リモートアクセスを許可する必要がある場合は、ida_remote_server.py の DEFAULT_HOST 変数を変更できますが、セキュリティへの影響に注意してください。
開発
ソースからのビルド
npm run build
テストの実行
npm test
ライセンス
このプロジェクトは MIT License の下でライセンスされています。詳細については、LICENSE ファイルを参照してください。
作成者
Florian Drechsler (@fdrechsler) [email protected]
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。