IDAプロMCP
IDA Pro でバイブ反転を可能にするシンプルなMCP サーバー。
https://github.com/user-attachments/assets/6ebeaa92-a9db-43fa-b756-eececce2aca0
ビデオのバイナリとプロンプトは、mcp-reversing-datasetリポジトリで入手できます。
利用可能な機能:
check_connection()
: IDA プラグインが実行されているかどうかを確認します。get_metadata()
: 現在の IDB に関するメタデータを取得します。get_function_by_name(name)
: 名前で関数を取得します。get_function_by_address(address)
: アドレスで関数を取得します。get_current_address()
: ユーザーが現在選択しているアドレスを取得します。get_current_function()
: ユーザーが現在選択している関数を取得します。convert_number(text, size)
: 数値 (10 進数、16 進数) をさまざまな表現に変換します。list_functions(offset, count)
: データベース内のすべての関数を一覧表示します (ページ区切り)。list_globals_filter(offset, count, filter)
: データベース内の一致するグローバルを一覧表示します (ページ区切り、フィルター処理)。list_globals(offset, count)
: データベース内のすべてのグローバルを一覧表示します (ページ区切り)。list_strings_filter(offset, count, filter)
: データベース内の一致する文字列を一覧表示します (ページ区切り、フィルタリング済み)。list_strings(offset, count)
: データベース内のすべての文字列を一覧表示します (ページ区切り)。decompile_function(address)
: 指定されたアドレスの関数を逆コンパイルします。disassemble_function(start_address)
: 関数のアセンブリコード (アドレス: 命令; コメント) を取得します。get_xrefs_to(address)
: 指定されたアドレスへのすべての相互参照を取得します。get_xrefs_to_field(struct_name, field_name)
: 名前付き構造体フィールド (メンバー) へのすべての相互参照を取得します。get_entry_points()
: データベース内のすべてのエントリポイントを取得します。set_comment(address, comment)
: 関数の逆アセンブリと疑似コード内の指定されたアドレスにコメントを設定します。rename_local_variable(function_address, old_name, new_name)
: 関数内のローカル変数の名前を変更します。rename_global_variable(old_name, new_name)
: グローバル変数の名前を変更します。set_global_variable_type(variable_name, new_type)
: グローバル変数の型を設定します。rename_function(function_address, new_name)
: 関数の名前を変更します。set_function_prototype(function_address, prototype)
: 関数のプロトタイプを設定します。declare_c_type(c_declaration)
: C 宣言からローカル型を作成または更新します。set_local_variable_type(function_address, variable_name, new_type)
: ローカル変数の型を設定します。
安全でない関数 ( --unsafe
フラグが必要):
dbg_get_call_stack()
: 現在の呼び出しスタックを取得します。dbg_get_registers()
: すべてのレジスタとその値を取得します。この関数はデバッグ時のみ使用できます。dbg_run_to(address)
: 指定されたアドレスまでデバッガーを実行します。dbg_exit_process()
: デバッガーを終了します。dbg_continue_process()
: デバッガーを続行します。dbg_enable_breakpoint(address, enable)
: 指定されたアドレスのブレークポイントを有効または無効にします。dbg_list_breakpoints()
: プログラム内のすべてのブレークポイントを一覧表示します。dbg_set_breakpoint(address)
: 指定されたアドレスにブレークポイントを設定します。dbg_delete_breakpoint(address)
: 指定されたアドレスのブレークポイントを削除します。dbg_start_process()
: デバッガーを起動します。
前提条件
- Python ( 3.11以上)
idapyswitch
を使用して最新のPythonバージョンに切り替える
- IDA Pro (8.3以上、9を推奨)
- サポートされている MCP クライアント (好きなものを選択してください)
- クライン
- ルーコード
- クロード
- カーソル
- VSCode エージェントモード
- ウィンドサーフィン
- その他の MCP クライアント:
ida-pro-mcp --config
を実行して、クライアントの JSON 構成を取得します。
インストール
IDA Pro MCP パッケージをインストール (またはアップグレード) します。
MCP サーバーを構成し、IDA プラグインをインストールします。
重要:インストールを有効にするには、IDA/Visual Studio Code/Claude を完全に再起動してください。Claude はバックグラウンドで実行されるため、トレイアイコンから終了する必要があります。
https://github.com/user-attachments/assets/65ed3373-a187-4dd5-a807-425dca1d8ee9
プロンプトエンジニアリング
LLMは幻覚を起こしやすいため、プロンプトは具体的に指定する必要があります。リバースエンジニアリングでは、整数とバイトの変換が特に問題となります。以下は最小限のプロンプトの例です。別のプロンプトで良い結果が得られた場合は、お気軽にディスカッションを開始したり、問題を報告してください。
あなたの仕事は、IDA Proでcrackmeを解析することです。MCPツールを使用して情報を取得できます。一般的には、以下の戦略を使用します。
- 逆コンパイルを検査し、発見した点をコメントに追加する
- 変数名をより分かりやすい名前に変更する
- 必要に応じて変数と引数の型を変更します(特にポインタと配列型)
- 関数名をよりわかりやすいものに変更する
- さらに詳細が必要な場合は、関数を逆アセンブルし、発見した内容をコメントに追加してください。
- 決して自分で基数を変換しないでください。必要な場合は、Convert_number MCPツールを使用してください。
- ブルートフォースを試みず、逆アセンブリと単純なPythonスクリプトからのみソリューションを導き出してください。
- 最後に、調査結果と実行した手順を記載したreport.mdを作成します。
- 解決策を見つけたら、見つけたパスワードをユーザーにフィードバックするよう促します。
このプロンプトは単なる最初の実験です。出力を改善する方法を見つけた場合は、ぜひ共有してください。
LLMの精度を高めるためのヒント
大規模言語モデル(LLM)は強力なツールですが、複雑な数学計算に苦労したり、「幻覚」(事実の捏造)を起こしたりすることがあります。LLMにconver_number
MCPを使用するように指示してください。また、特定の操作ではmath-mcpが必要になる場合もあります。
もう一つ覚えておくべきことは、LLMは難読化されたコードではうまく機能しないということです。LLMを使って問題を解決する前に、バイナリ全体を調べて、以下の項目を(自動的に)削除してみてください。
- 文字列の暗号化
- インポートハッシュ
- 制御フローの平坦化
- コード暗号化
- 逆コンパイル対策
また、Lumina や FLIRT などのツールを使用して、すべてのオープン ソース ライブラリ コードと C++ STL を解決してみると、精度がさらに向上します。
SSEトランスポートとヘッドレスMCP
次のように SSE サーバーを実行してユーザー インターフェイスに接続できます。
idalib
をインストールした後、ヘッドレス SSE サーバーを実行することもできます。
注: idalib
機能はWilli Ballenthinによって提供されました。
手動インストール
注: このセクションは、詳細なインストール手順を必要とする LLM およびパワー ユーザー向けです。
手動 MCP サーバーのインストール (Cline/Roo コード)
MCP サーバーを自分でインストールするには、次の手順に従います。
- uvをグローバルにインストールします。
- Windows:
pip install uv
- Linux/Mac:
curl -LsSf https://astral.sh/uv/install.sh | sh
- Windows:
- このリポジトリをクローンします (この例では
C:\MCP\ida-pro-mcp
。 - Cline/Roo Code MCP サーバーの構成に移動します (スクリーンショットを参照)。
- *「インストール済み」*タブをクリックします。
- *「MCP サーバーの構成」*をクリックすると、
cline_mcp_settings.json
が開きます。 ida-pro-mcp
サーバーを追加します。
接続が機能するかどうかを確認するには、次のツール呼び出しを実行できます。
IDAプラグインのインストール
IDA Proプラグインは、MCPサーバーの起動時に自動的にインストールされます。-- --install-plugin
オプションを無効にした場合は、以下の手順に従ってください。
src/ida_pro_mcp/mcp-plugin.py
をプラグイン フォルダー (Windows の場合は%appdata%\Hex-Rays\IDA Pro\plugins
) にコピ���します (移動しないでください)。- IDB を開き、
Edit -> Plugins -> MCP
をクリックしてサーバーを起動します。
他のMCPサーバーとの比較
IDA Pro MCP サーバーはいくつか出回っていますが、私はいくつかの理由から独自のサーバーを作成しました。
- インストールは完全に自動化される必要があります。
- 他のプラグインのアーキテクチャでは、新しい機能をすぐに追加することが困難です (不要な依存関係の定型句が多すぎる)。
- 新しいテクノロジーを学ぶのは楽しいです!
確認したい場合は、次のリストをご覧ください (私が発見した順)。
- https://github.com/taida957789/ida-mcp-server-plugin (SSE プロトコルのみ、IDAPython に依存関係をインストールする必要があります)。
- https://github.com/fdrechsler/mcp-server-idapro (TypeScript の MCP サーバー。新しい機能を追加するには過剰な定型句が必要です)。
- https://github.com/MxIris-Reverse-Engineering/ida-mcp-server (カスタム ソケット プロトコル、定型句)。
IDA Pro MCP サーバーをここに追加するための PR を自由に開いてください。
発達
新機能の追加は、非常に簡単で合理的なプロセスです。mcp mcp-plugin.py
に新しい@jsonrpc
関数を追加するだけで、追加の定型コードなしでMCPサーバーで関数を利用できるようになります。以下の動画では、2分以内(テスト時間も含む)でget_metadata
関数を追加しています。
https://github.com/user-attachments/assets/951de823-88ea-4235-adcb-9257e316ae64
MCP サーバー自体をテストするには:
これにより、http://localhost:5173で Web インターフェイスが開き、テスト用の MCP ツールを操作できるようになります。
テストのために、IDAプラグインへのシンボリックリンクを作成し、JSON-RPCリクエストをhttp://localhost:13337/mcp
に直接POSTします。 シンボリックリンクを有効にしたら、以下のコマンドを実行できます。
main
への直接コミットの変更ログを生成します。
local-only server
The server can only run on the client's local machine because it depends on local resources.
Tools
IDA Pro を使用した自動リバース エンジニアリング用の MCP サーバー。
Related MCP Servers
- AsecurityAlicenseAqualityAiDD MCP Server provides a secure interface for AI agents to perform file system operations and code analysis, enhancing AI-assisted development workflows across multiple programming languages.Last updated -2962PythonApache 2.0
- AsecurityAlicenseAqualityA Model Context Protocol server for IDA interaction and automation. This server provides tools to read IDA database via Large Language Models.Last updated -19443PythonMIT License
- AsecurityAlicenseAqualityA Model Context Protocol server that enables AI assistants to interact with IDA Pro for reverse engineering and binary analysis tasks.Last updated -814PythonMIT License
- AsecurityAlicenseAqualityMCP server for reverse engineering that enables interaction with IDA Pro for analysis tasks such as decompilation, disassembly, and memory engagement reports.Last updated -2428PythonMIT License