IDA Pro MCP

by mrexodia
Verified
MIT License
1,471
  • Linux
  • Apple

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) : ローカル変数の型を設定します。

前提条件

インストール

IDA Pro MCP パッケージをインストール (またはアップグレード) します。

pip install --upgrade git+https://github.com/mrexodia/ida-pro-mcp

MCP サーバーを構成し、IDA プラグインをインストールします。

ida-pro-mcp --install

重要:インストールを有効にするには、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 サーバーを自分でインストールするには、次の手順に従います。

  1. uvをグローバルにインストールします。
    • Windows: pip install uv
    • Linux/Mac: curl -LsSf https://astral.sh/uv/install.sh | sh
  2. このリポジトリをクローンします (この例ではC:\MCP\ida-pro-mcp
  3. Cline/Roo Code MCP サーバーの構成に移動します (スクリーンショットを参照)。
  4. *「インストール済み」*タブをクリックします。
  5. *「MCP サーバーの構成」*をクリックすると、 cline_mcp_settings.jsonが開きます。
  6. ida-pro-mcpサーバーを追加します。
{ "mcpServers": { "github.com/mrexodia/ida-pro-mcp": { "command": "uv", "args": [ "--directory", "c:\\MCP\\ida-pro-mcp", "run", "server.py", "--install-plugin" ], "timeout": 1800, "disabled": false, "autoApprove": [ "check_connection", "get_metadata", "get_function_by_name", "get_function_by_address", "get_current_address", "get_current_function", "convert_number", "list_functions", "list_strings", "search_strings", "decompile_function", "disassemble_function", "get_xrefs_to", "get_entry_points", "set_comment", "rename_local_variable", "rename_global_variable", "set_global_variable_type", "rename_function", "set_function_prototype", "declare_c_type", "set_local_variable_type" ], "alwaysAllow": [ "check_connection", "get_metadata", "get_function_by_name", "get_function_by_address", "get_current_address", "get_current_function", "convert_number", "list_functions", "list_strings", "search_strings", "decompile_function", "disassemble_function", "get_xrefs_to", "get_entry_points", "set_comment", "rename_local_variable", "rename_global_variable", "set_global_variable_type", "rename_function", "set_function_prototype", "declare_c_type", "set_local_variable_type" ] } } }

接続が機能するかどうかを確認するには、次のツール呼び出しを実行できます。

<use_mcp_tool> <server_name>github.com/mrexodia/ida-pro-mcp</server_name> <tool_name>check_connection</tool_name> <arguments></arguments> </use_mcp_tool>

IDAプラグインのインストール

IDA Proプラグインは、MCPサーバーの起動時に自動的にインストールされます。-- --install-pluginオプションを無効にした場合は、以下の手順に従ってください。

  1. src/ida_pro_mcp/mcp-plugin.pyをプラグイン フォルダー (Windows の場合は%appdata%\Hex-Rays\IDA Pro\plugins ) にコピーします (移動しないでください)。
  2. IDB を開き、 Edit -> Plugins -> MCPをクリックしてサーバーを起動します。

他のMCPサーバーとの比較

IDA Pro MCP サーバーはいくつか出回っていますが、私はいくつかの理由から独自のサーバーを作成しました。

  1. インストールは完全に自動化される必要があります。
  2. 他のプラグインのアーキテクチャでは、新しい機能をすぐに追加することが困難です (不要な依存関係の定型句が多すぎる)。
  3. 新しいテクノロジーを学ぶのは楽しいです!

確認したい場合は、次のリストをご覧ください (私が発見した順)。

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 サーバー自体をテストするには:

uv run mcp dev src/ida_pro_mcp/server.py

これにより、http://localhost:5173で Web インターフェイスが開き、テスト用の MCP ツールを操作できるようになります。

テストのために、IDAプラグインへのシンボリックリンクを作成し、JSON-RPCリクエストをhttp://localhost:13337/mcpに直接POSTします。 シンボリックリンクを有効にしたら、以下のコマンドを実行できます。

uv run ida-pro-mcp --install

mainへの直接コミットの変更ログを生成します。

git log --first-parent --no-merges 1.2.0..main "--pretty=- %s"
ID: 35q428b8zg