local-only server
The server can only run on the client’s local machine because it depends on local resources.
Integrations
Integrates with GitHub for repository management, as the MCP server itself is hosted on GitHub and references GitHub resources.
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_strings(offset, count)
: データベース内のすべての文字列を一覧表示します (ページ区切り)。search_strings(pattern, offset, count)
: 指定されたパターンを含む文字列を検索します (大文字と小文字は区別されません)。decompile_function(address)
: 指定されたアドレスの関数を逆コンパイルします。disassemble_function(start_address)
: 関数のアセンブリコード (アドレス: 命令; コメント) を取得します。get_xrefs_to(address)
: 指定されたアドレスへのすべての相互参照を取得します。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)
: ローカル変数の型を設定します。
前提条件
- Python ( 3.11以上)
idapyswitch
を使用して最新のPythonバージョンに切り替える
- IDA Pro (8.3以上、9を推奨)
- サポートされている MCP クライアント (好きなものを選択してください)
インストール
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 を解決してみると、精度がさらに向上します。
手動インストール
注: このセクションは、詳細なインストール手順を必要とする 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
への直接コミットの変更ログを生成します。