IDA Proと言語モデルをMCPを介して橋渡しする、AI搭載のリバースエンジニアリングアシスタント。
[!IMPORTANT] 代わりに公式 Hex-Rays IDA MCP Serverの使用を推奨します!
詳細については発表ブログ記事を参照してください。
IDA Pro で vibe reversing を可能にするシンプルな MCP Server。
https://github.com/user-attachments/assets/6ebeaa92-a9db-43fa-b756-eececce2aca0
動画で使用されているバイナリとプロンプトは mcp-reversing-dataset リポジトリで入手できます。
idapyswitch を使用して最新の Python バージョンに切り替えてくださいida-pro-mcp --config を実行して、お使いのクライアント用の JSON 設定を取得してください。注意: これには idalib がグローバルにアクティベートされていることと、uv がインストールされていることが必要です:```bash
uv run "C:\Program Files\IDA Professional 9.3\idalib\python\py-activate-idalib.py"
uv run "/Applications/IDA Professional 9.3.app/Contents/MacOS/idalib/python/py-activate-idalib.py"
uv run "/path/to/idapro-9.3/idalib/python/py-activate-idalib.py"
## インストール (Claude Code)
Claude Code に最新の IDA Pro MCP をインストールするには:```bash
claude plugin marketplace add mrexodia/claude-marketplace
claude plugin uninstall ida-pro-mcp@mrexodia
claude plugin install ida-pro-mcp@mrexodia
Codex に最新の IDA Pro MCP をインストールするには:```bash codex plugin marketplace add mrexodia/codex-marketplace codex plugin remove ida-pro-mcp@mrexodia codex plugin add ida-pro-mcp@mrexodia
## インストール (Kimi Code)
Kimi Code に最新の IDA Pro MCP をインストールするには、チャットで次のスラッシュコマンドを実行します:```
/plugins install https://github.com/mrexodia/ida-pro-mcp/tree/main
/reload
これにより idalib MCP サーバーと idapython スキルがインストールされます。プラグインは
$KIMI_CODE_HOME/plugins/managed/ にコピーされるため、uv が PATH 上にある必要があります。インストール後の
最初のセッションは、サーバーが応答する前に uv が依存関係を解決するため、遅くなります。
注: MCP プラグインはもはや推奨されておらず、いずれ非推奨になります。代わりに idalib-mcp を使用してください。
IDA GUI から MCP サーバーを手動で設定したい場合:```sh pip uninstall ida-pro-mcp pip install https://github.com/mrexodia/ida-pro-mcp/archive/refs/heads/main.zip
MCPサーバーを設定し、IDAプラグインをインストールします:```
ida-pro-mcp --install
重要: インストールを有効にするには、IDAとMCPクライアントを完全に再起動してください。一部のクライアント(Claudeなど)はバックグラウンドで動作しているため、トレイアイコンから終了する必要があります。
LLMはハルシネーションを起こしやすいため、プロンプトには具体的な指示が必要です。リバースエンジニアリングにおいては、整数とバイト間の変換が特に問題となります。以下は最小限のプロンプト例です。異なるプロンプトで良い結果が得られた場合は、ぜひディスカッションを開始するか、issueを開いてください:```md Your task is to analyze a crackme in IDA Pro. You can use the MCP tools to retrieve information. In general use the following strategy:
int_convert MCP tool if needed!これはあくまで最初の実験に過ぎません。出力を改善する方法を見つけたらぜひ共有してください!
[@can1357](https://github.com/can1357)による別のプロンプト:```md
Your task is to create a complete and comprehensive reverse engineering analysis. Reference AGENTS.md to understand the project goals and ensure the analysis serves our purposes.
Use the following systematic methodology:
1. **Decompilation Analysis**
- Thoroughly inspect the decompiler output
- Add detailed comments documenting your findings
- Focus on understanding the actual functionality and purpose of each component (do not rely on old, incorrect comments)
2. **Improve Readability in the Database**
- Rename variables to sensible, descriptive names
- Correct variable and argument types where necessary (especially pointers and array types)
- Update function names to be descriptive of their actual purpose
3. **Deep Dive When Needed**
- If more details are necessary, examine the disassembly and add comments with findings
- Document any low-level behaviors that aren't clear from the decompilation alone
- Use sub-agents to perform detailed analysis
4. **Important Constraints**
- NEVER convert number bases yourself - use the int_convert MCP tool if needed
- Use MCP tools to retrieve information as necessary
- Derive all conclusions from actual analysis, not assumptions
5. **Documentation**
- Produce comprehensive RE/*.md files with your findings
- Document the steps taken and methodology used
- When asked by the user, ensure accuracy over previous analysis file
- Organize findings in a way that serves the project goals outlined in AGENTS.md or CLAUDE.md
プロンプトについて議論し、実際のマルウェア分析をいくつか紹介するライブストリーム:
大規模言語モデル(LLM)は強力なツールですが、複雑な数学的計算を苦手としたり、「ハルシネーション」(事実をでっち上げる)を起こしたりすることがあります。LLMに int_convert MCPツールを使うよう必ず指示してください。また、特定の操作には math-mcp も必要になる場合があります。
もう一つ覚えておくべきことは、LLMは難読化されたコードでは十分な性能を発揮しないということです。LLMを使って問題を解決しようとする前に、バイナリを一通り見て、以下のものを(自動的に)除去する時間を取ってください:
また、LuminaやFLIRTのようなツールを使って、すべてのオープンソースライブラリのコードとC++ STLを解決しようと試みるべきです。これにより精度がさらに向上します。
次のようにして、ユーザーインターフェースに接続するためのSSEサーバーを実行できます:```sh uv run ida-pro-mcp --transport http://127.0.0.1:8744/sse
[`idalib`](https://docs.hex-rays.com/core/idalib/getting-started) をインストールすると、ヘッドレス MCP サーバーも実行できます。初期バイナリを指定して起動できます:```sh
uv run idalib-mcp --host 127.0.0.1 --port 8745 path/to/executable
またはバイナリなしで開始し、後で idb_open(...) で任意のファイルを開きます:```sh
uv run idalib-mcp --host 127.0.0.1 --port 8745
stdioベースのクライアントの場合は、次を使用します:```sh
uv run idalib-mcp --stdio
データベースワーカーは永続的です。各ワーカーは、それを起動したスーパーバイザーよりも長く存続するデタッチされたプロセスとして実行されます。新しいスーパーバイザー(stdio または HTTP 経由)が、このホスト上のワーカーですでに開かれているバイナリに対して idb_open を呼び出すと、スーパーバイザーはそのワーカーを透過的に採用します — 有効化すべき別個の「共有」モードはありません。ワーカーは、アイドル期間中にリクエストが届かなければ自己終了します。
注: idalib 機能は Willi Ballenthin によって提供されました。
idalib-mcp は、開かれた各データベースをそれぞれ独自の idalib ワーカープロセスに保持するスーパーバイザーです。ワーカーはホストローカルのディスカバリディレクトリに自身を登録し、それを起動したスーパーバイザーよりも長く存続します。同じパスを必要とする後続のスーパーバイザーは、実行中のワーカーを採用します。ワーカーは、アイドル TTL(デフォルト 1 時間)の間にリクエストが届かなければ自己終了します。idb_close を呼び出すと、ワーカーを即座に解放できます(--max-workers に向けてスロットを解放します)。採用された GUI/ワーカーインスタンスは、強制終了されるのではなくデタッチされます。