
セキュリティファーストのMCPサーバーであり、AIエージェントによる自動リバースエンジニアリング、マルウェア解析、フォレンジック、脆弱性調査、SASTを実現します。Radare2、YARA、LIEF、Capstone などによって動作します。
Model Context ProtocolによるAI駆動のリバースエンジニアリング&セキュリティ分析
ClaudeやCursorなどのAIアシスタントに、自然言語によるリバースエンジニアリング、マルウェア解析、脆弱性調査、デジタルフォレンジック、ソースコード監査を可能にするMCPサーバー。
Reversecore MCPは、Model Context Protocolサーバーであり、120の解析ツールを単一のインターフェースに統合し、AIアシスタントが自然言語で呼び出せるようにします。
多数のツールのコマンドライン構文を覚える代わりに、あなたが望むことを記述するだけです:``` "Decompile the main function of this malware sample, extract all network IOCs, map the behavior to MITRE ATT&CK, and generate a triage report."
The AI assistant breaks this into tool calls:```
r2_decompile("sample.exe", "main")
→ extract_iocs("sample.exe")
→ add_mitre_technique(technique_id="T1071.001", ...)
→ create_analysis_report(template_type="quick_triage")
各ツールは構造化されたToolResult(ToolSuccessまたはToolError)を返します。この型付きデータをAIが推論し、後続のクエリに連鎖させたり、ユーザーにレンダリングしたりできます。
AI Client (Claude / Cursor / any MCP-compatible client) │ MCP Protocol (stdio or HTTP/SSE) ▼ ┌──────────────────────────────────────────────────────┐ │ FastMCP 3.4.4 Server │ │ 120 registered tools · Fully async │ │ Python 3.10–3.12 │ ├────────────────────┬─────────────────────────────────┤ │ Guided Prompts │ Dynamic Resources │ │ (22 analysis │ (11 URI-based: per-binary │ │ modes) │ strings, IOCs, ASM, CFG, …) │ ├────────────────────┴─────────────────────────────────┤ │ Core Infrastructure │ │ Config · Security · Validators · Exceptions (17) │ │ R2 Pool · Metrics · Memory (SQLite) · Task Queue │ │ MITRE Mapper · Evidence Engine · Resilience Layer │ │ Arch Registry (x86/ARM/MIPS/RISC-V/PPC) │ │ Result Cache (SHA256) · Analysis Cache (Redis+SQL) │ │ SAST (Python AST + C/C++ Regex) · Plugin System │ ├──────────────────────────────────────────────────────┤ │ Analysis Engines │ │ Radare2 6.0.4 │ YARA 4.3.1 · LIEF · Capstone │ │ r2ghidra │ CAPA · angr · Qiling │ │ Volatility3 · Scapy│ DIE · Binwalk · Sleuth Kit │ │ pwntools · ROPgadget│ Keystone (assembler) │ └──────────────────────────────────────────────────────┘
### コア基盤(37モジュール)
`reversecore_mcp/core/` ディレクトリには、すべてのツールが依存する共有インフラストラクチャが含まれています:
| モジュール | 目的 |
|---|---|
| `config.py` | 34以上の環境変数を備えたPydantic BaseSettings |
| `security.py` | 入力サニタイズ、コマンド引数の検証 |
| `validators.py` | TOCTOU対策、シンボリックリンク解決を備えたファイル・バイナリパス検証 |
| `r2_pool.py` | 設定可能なサイズのスレッドセーフなRadare2接続プール |
| `r2_helpers.py` | 構造化されたRadare2出力の解析 |
| `metrics.py` | ツールごとの実行時間、呼び出し回数、エラー率、キャッシュ統計 |
| `memory.py` | セッション間で分析結果を永続化する非同期SQLiteベースのAIメモリストア |
| `mitre_mapper.py` | MITRE ATT&CKテクニックIDマッピングエンジン |
| `evidence.py` | 証拠分類システム:`OBSERVED`、`INFERRED`、`POSSIBLE` |
| `resilience.py` | リトライ、サーキットブレーカー、タイムアウトのデコレータパターン |
| `task_queue.py` | Redis + arqによるバックグラウンドタスクキュー |
| `extension_registry.py` | プラグイン登録とライフサイクル管理 |
| `arch_registry.py` | マルチアーキテクチャマッピング(x86、x86_64、ARM32、ARM64、MIPS、RISC-V、PPC → r2のarch/bits/registers) |
| `result_cache.py` | SHA256ベースのツール結果キャッシュデコレータ(`@cache_tool_result`) |
| `analysis_cache.py` | 多層逆コンパイルキャッシュ(L1:Redis、L2:SQLite) |
| `result.py` | `ToolSuccess` / `ToolError` Pydanticモデル |
| `exceptions.py` | `RCMCP-E*`エラーコードを持つ17の例外クラス |
| `decorators.py` | `@log_execution`、`@track_metrics` |
| `error_handling.py` | `@handle_tool_errors`デコレータ |
| `error_formatting.py` | 構造化されたエラーレスポンスのフォーマット |
| `execution.py` | タイムアウトと出力制限付きの安全なサブプロセス実行 |
| `command_spec.py` | サブプロセス呼び出しのコマンド仕様 |
| `loader.py` | 動的ツールモジュールローダー |
| `plugin.py` | プラグイン基底クラス |
| `extension.py` | 拡張機能基底クラス |
| `container.py` | コンテナ/サンドボックス実行サポート |
| `audit.py` | 監査ログ |
| `binary_cache.py` | バイナリファイルキャッシュ |
| `json_utils.py` | orjsonによるJSONシリアライゼーション(標準ライブラリのjsonより3〜5倍高速) |
| `logging_config.py` | Loguruベースの構造化ロギング |
| `report_generator.py` | レポートレンダリングエンジン(Markdown、xhtml2pdfによるPDF) |
| `resource_manager.py` | MCPリソースライフサイクル管理 |
| `sast/python_ast_scanner.py` | Python ASTベースの脆弱性スキャナー |
| `sast/regex_scanner.py` | C/C++正規表現ベースの脆弱性スキャナー |
| `sast/rule_manager.py` | SASTルールの読み込みと管理 |
---
## ツールカタログ(120ツール)
すべてのツールは構造化された`ToolResult`を返します — 型付き`data`を持つ`ToolSuccess`か、`RCMCP-E*`エラーコードを持つ`ToolError`のいずれかです。ツールは8つのプラグインに編成されています。
---
### 🔍 静的解析プラグイン(24ツール)
| # | ツール | バックエンド | 説明 |
|---|---|---|---|
| 1 | `run_strings` | `strings` CLI | 設定可能な最小長でのASCII/Unicode文字列抽出 |
| 2 | `run_binwalk` | Binwalk | 組み込みシグネチャとファイルシステムのファームウェア深層スキャン |
| 3 | `run_binwalk_extract` | Binwalk | binwalkで検出された埋め込みファイルの抽出 |
| 4 | `parse_binary_with_lief` | LIEF | PE/ELF/Mach-Oヘッダー、セクション、インポート/エクスポート、TLSの完全解析 |
| 5 | `detect_packer` | DIE | クイックパッカー/コンパイラ検出 |
| 6 | `detect_packer_deep` | DIE(`diec`) | Detect It Easyによる深層パッカー/プロテクター解析 |
| 7 | `run_capa` | CAPA(Mandiant FLARE) | 機能検出 — 「データを暗号化」「永続化を作成」など |
| 8 | `run_capa_quick` | CAPA | ルールサブセットによるクイック機能スキャン |
| 9 | `generate_signature` | Radare2 | 識別用のバイナリシグネチャ生成 |
| 10 | `generate_yara_rule` | Radare2 + YARA | バイナリパターンからのYARA検出ルール生成 |
| 11 | `generate_advanced_yara_rule` | Radare2 + YARA | 行動指標を含む高度なYARAルール |
| 12 | `scan_for_versions` | LIEF + strings | バイナリ内の埋め込みバージョン文字列のスキャン |
| 13 | `extract_rtti_info` | Radare2 | C++ RTTI(実行時型情報)の抽出 |
| 14 | `diff_binaries` | Radare2 | 2つのファイルバージョン間の意味的バイナリ差分 |
| 15 | `analyze_variant_changes` | Radare2 | バイナリバリアント間の変更分析 |
| 16 | `match_libraries` | Radare2 | 関数フィンガープリントによる静的リンクライブラリの識別 |
| 17 | `patch_diff_1day` | Radare2 + ヒューリスティクス | 1-day脆弱性研究のための自動パッチ差分解析 |
| 18 | `analyze_patch_diff_auto` | Radare2 + 推論 | 自動パッチ脆弱性推論 |
| 19 | `emulate_binary` | Radare2 ESIL | レジスタ/メモリ追跡コードエミュレーション |
| 20 | `generate_fuzzing_harness` | Qiling + AFL++ | 特定の関数をターゲットにしたファジングハーネスの生成 |
| 21 | `run_fuzzing_campaign` | AFL++ | クラッシュ収集付きの完全なファジングキャンペーンの実行 |
| 22 | `triage_crash` | GDB | クラッシュ解析と悪用可能性評価 |
| 23 | `verify_path_and_get_args` | angr | シンボリック実行 — パスの到達可能性を証明し、具体的な入力を計算 |
| 24 | `taint_trace` | Radare2 + angr | ソースからシンクへのデータフローテイント解析 |
---
### 🔐 ソースコード監査プラグイン(1ツール)
| # | ツール | バックエンド | 説明 |
|---|---|---|---|
| 25 | `audit_source_code` | AST + Regex | 危険なパターンに対するPython ASTスキャン + C/C++正規表現スキャン |
---
### 🛠️ 共通ユーティリティプラグイン(20ツール)
**ファイル操作(5ツール)**
| # | ツール | 説明 |
|---|---|---|
| 26 | `run_file` | ファイルタイプ、アーキテクチャ、コンパイラのフィンガープリンティング |
| 27 | `copy_to_workspace` | 解析ワークスペースへのファイルコピー |
| 28 | `create_directory` | ワークスペース内のディレクトリ作成 |
| 29 | `list_workspace` | ワークスペース内の全ファイルの一覧表示 |
| 30 | `scan_workspace` | ファイルメタデータ付きの完全なワークスペーススキャン |
**パッチ説明(1ツール)**
| # | ツール | 説明 |
|---|---|---|
| 31 | `explain_patch` | バイナリパッチを自然言語で説明 |
**アセンブラ(1ツール)**
| # | ツール | バックエンド | 説明 |
|---|---|---|---|
| 32 | `assemble_instructions` | Keystone | 命令をマシンコードにアセンブル(x86、ARM、MIPSなど) |
**AIメモリ管理(11ツール)**
これらのツールにより、AIは非同期SQLiteデータベースを使用して解析セッション間で結果を永続化・再呼び出しできます:
| # | ツール | 説明 |
|---|---|---|
| 33 | `create_memory_session` | 解析用の新しいメモリセッションの開始 |
| 34 | `store_analysis_finding` | タグ付きの解析結果の永続化 |
| 35 | `query_analysis_memories` | クエリによる過去の結果の検索 |
| 36 | `get_binary_analysis_context` | 特定のバイナリの全コンテキストの取得 |
| 37 | `tag_analysis_session` | 整理用にセッションへタグを追加 |
| 38 | `search_memories_by_tag` | タグによるセッション/結果の検索 |
| 39 | `delete_analysis_session` | セッションとその結果の削除 |
| 40 | `cleanup_expired_sessions` | しきい値より古いセッションの削除 |
| 41 | `list_analysis_sessions` | すべてのアクティブなセッションの一覧表示 |
| 42 | `export_memory_store` | すべてのメモリをポータブル形式にエクスポート |
| 43 | `import_memory_store` | エクスポートファイルからメモリをインポート |
**サーバーモニタリング(2ツール)**
| # | ツール | 説明 |
|---|---|---|
| 44 | `get_server_health` | 稼働時間、メモリ使用量、読み込まれたツール、Pythonバージョン |
| 45 | `get_tool_metrics` | ツールごとの呼び出し回数、平均実行時間、エラー率、キャッシュヒット/ミス |
---
### ⚙️ Radare2 & r2ghidraプラグイン(30ツール)
すべてのRadare2ツールは、r2pipeセッションを自動管理するスレッドセーフな接続プール(`r2_pool.py`)を使用します。
| # | ツール | 説明 |
|---|---|---|
| 46 | `Radare2_open_file` | Radare2でバイナリファイルを開く |
| 47 | `Radare2_close_file` | Radare2セッションを閉じる |
| 48 | `Radare2_list_open_files` | 現在開いているファイルの一覧表示 |
| 49 | `Radare2_analyze_binary` | 完全な自動解析(`aaa`)の実行 |
| 50 | `Radare2_list_functions` | 検出されたすべての関数の一覧表示 |
| 51 | `Radare2_disassemble_function` | 特定の関数の逆アセンブル |
| 52 | `Radare2_disassemble_address` | 特定のアドレスでの逆アセンブル |
| 53 | `Radare2_decompile_function` | r2ghidraによる逆コンパイル(r2に組み込まれたGhidraエンジン、JVM不要) |
| 54 | `Radare2_list_exports` | エクスポートされたシンボルの一覧表示 |
| 55 | `Radare2_list_imports` | インポートされた関数の一覧表示 |
| 56 | `Radare2_list_sections` | エントロピー付きのバイナリセクションの一覧表示 |
| 57 | `Radare2_list_strings` | バイナリ内で見つかった文字列の一覧表示 |
| 58 | `Radare2_find_cross_references` | 関数呼び出しとデータ参照の追跡 |
| 59 | `Radare2_search_bytes` | バイナリ内のバイトパターンの検索 |
| 60 | `Radare2_get_binary_info` | バイナリメタデータの取得(arch、format、エンディアン) |
| 61 | `Radare2_execute_command` | 生のRadare2コマンドの実行 |
| 62 | `Radare2_esil_emulate` | 特定のアドレスでのESILエミュレーション |
| 63 | `Radare2_get_hexdump` | 仮想アドレスでの16進ダンプ |
| 64 | `Radare2_get_cfg_data` | 制御フローグラフデータの抽出 |
| 65 | `Radare2_generate_cfg_png` | CFGをPNG画像として生成 |
| 66 | `Radare2_generate_callgraph` | 関数呼び出しグラフの生成 |
| 67 | `Radare2_recover_structures` | C構造体の自動復元と注釈データベースへの永続化 |
| 68 | `Radare2_decompile_with_r2ghidra` | キャッシュ付きの高品質C逆コンパイル |
| 69 | `Radare2_annotate_binary` | バイナリへの注釈の追加 |
| 70 | `Radare2_get_annotations` | 注釈の取得 |
| 71 | `Radare2_export_annotations` | 注釈のファイルへのエクスポート |
| 72 | `Radare2_import_annotations` | ファイルからの注釈のインポート |
| 73 | `Radare2_detect_crypto_constants` | 暗号定数の検出(AES S-boxなど) |
| 74 | `Radare2_find_gadgets` | ROP/JOPガジェットの検索 |
| 75 | `Radare2_calculate_entropy` | セクションごとのエントロピー計算 |
---
### 🦠 マルウェア解析プラグイン(9ツール)
| # | ツール | バックエンド | 説明 |
|---|---|---|---|
| 76 | `dormant_detector` | Radare2 + ヒューリスティクス | 隠れたバックドア、孤立関数、タイムボム、ロジックボムの発見 |
| 77 | `adaptive_vaccine` | YARA + Radare2 | 検出用YARAルール + 脅威を無力化するバイナリパッチの生成 |
| 78 | `vulnerability_hunter` | Radare2 + 解析 | 危険なAPIパターン(strcpy、sprintf)とROPガジェットチェーンの検出 |
| 79 | `extract_iocs` | Regex + LIEF | IP、URL、ドメイン、ハッシュ、レジストリキー、暗号アドレスの抽出 |
| 80 | `run_yara` | YARA | カスタムルールファイルと組み込みルールセットでのスキャン |
| 81 | `generate_poc_exploit` | pwntools | 概念実証エクスプロイトコードの生成 |
| 82 | `build_rop_chain` | ROPgadget + pwntools | 自動ROPチェーン構築 |
| 83 | `autonomous_vuln_hunt` | Radare2 + angr | 自律型脆弱性ハンティングパイプライン |
| 84 | `analyze_heap_exploit` | Radare2 + ヒューリスティクス | ヒープ悪用解析(UAF、ダブルフリー、オーバーフロー) |
---
### 🕵️ デジタルフォレンジックプラグイン(22ツール)
**メモリフォレンジック(6ツール)**
| # | ツール | バックエンド | 説明 |
|---|---|---|---|
| 85 | `memory_analyze` | Volatility3 | 完全なメモリダンプ解析 |
| 86 | `memory_list_processes` | Volatility3 | メモリダンプから実行中プロセスの一覧表示 |
| 87 | `memory_detect_injections` | Volatility3 | プロセスメモリ内のコードインジェクションの検出 |
| 88 | `memory_extract_strings` | Volatility3 | プロセスメモリからの文字列抽出 |
| 89 | `memory_dump_module` | Volatility3 | メモリから読み込まれたモジュールのダンプ |
| 90 | `memory_list_symbols` | Volatility3 | メモリからのシンボルの一覧表示 |
**ディスクフォレンジック(6ツール)**
| # | ツール | バックエンド | 説明 |
|---|---|---|---|
| 91 | `disk_list_partition` | Sleuth Kit | ディスクパーティションの一覧表示 |
| 92 | `disk_list_files` | Sleuth Kit | ディスクイメージ内のファイルの一覧表示 |
| 93 | `disk_recover_deleted` | Sleuth Kit | 削除されたファイルの復元 |
| 94 | `disk_analyze_mft` | Sleuth Kit | NTFSマスターファイルテーブルの解析 |
| 95 | `disk_extract_file` | Sleuth Kit | ディスクイメージからのファイル抽出 |
| 96 | `disk_hash_verify` | Sleuth Kit | ハッシュによるファイル整合性の検証 |
**ネットワークフォレンジック(5ツール)**
| # | ツール | バックエンド | 説明 |
|---|---|---|---|
| 97 | `pcap_analyze` | Scapy | PCAP解析:プロトコル内訳、異常検出 |
| 98 | `pcap_list_connections` | Scapy | すべてのネットワーク接続の一覧表示 |
| 99 | `pcap_extract_dns` | Scapy | DNSクエリとレスポンスの抽出 |
| 100 | `pcap_extract_c2` | Scapy | 潜在的なC2通信の識別 |
| 101 | `pcap_reconstruct_stream` | Scapy | TCPストリームの再構築 |
**アーティファクト解析(5ツール)**
| # | ツール | バックエンド | 説明 |
|---|---|---|---|
| 102 | `artifact_collect` | カスタムパーサー | ブラウザ履歴、レジストリハイブ、イベントログ、プリフェッチの収集 |
| 103 | `artifact_correlate_ioc` | カスタムパーサー | 既知のIOCとのアーティファクト相関 |
| 104 | `artifact_generate_yara` | YARA | アーティファクトパターンからのYARAルール生成 |
| 105 | `artifact_timeline` | カスタムパーサー | 複数のアーティファクトソースからのタイムライン構築 |
| 106 | `artifact_report` | カスタムパーサー | アーティファクト解析レポートの生成 |
---
### 📝 レポート生成プラグイン(14ツール)
| # | ツール | 説明 |
|---|---|---|
| 107 | `get_system_time` | サーバータイムスタンプの取得(AIによる日付の捏造を防止) |
| 108 | `set_timezone` | レポート用タイムゾーンの設定 |
| 109 | `get_timezone_info` | 現在のタイムゾーン情報の取得 |
| 110 | `start_report_session` | 一意のIDを持つ計時解析セッションの開始 |
| 111 | `end_report_session` | セッションの確定:期間の計算、IOC/ATT&CKリストのロック |
| 112 | `get_report_session_status` | セッションステータスの確認 |
| 113 | `list_report_sessions` | すべてのアクティブ/完了セッションの一覧表示 |
| 114 | `add_ioc` | ライブセッション中のIOCの収集とタグ付け |
| 115 | `add_analysis_note` | 分類されたメモの追加(finding、warning、behavior) |
| 116 | `add_mitre_technique` | MITRE ATT&CKテクニックIDの記録 |
| 117 | `set_severity` | セッションの重大度の設定(low/medium/high/critical) |
| 118 | `create_analysis_report` | 4モードでのレポートレンダリング:`full_analysis`、`quick_triage`、`ioc_summary`、`executive_brief` |
| 119 | `generate_vex_report` | VEX(Vulnerability Exploitability eXchange)レポートの生成 |
| 120 | `generate_sigma_rule` | SIGMA検出ルールの生成 |
---
## ガイド付き解析プロンプト(22モード)
プロンプトは、構造化されたペルソナ、ステップバイステップのツール使用シーケンス、証拠分類ルールでAIを準備する事前構築済みの解析ワークフローです。AIクライアントでプロンプト名を参照することでアクティブ化します。
### マルウェア解析(9プロンプト)
| プロンプト | ユースケース |
|---|---|
| `full_analysis_mode` | 6フェーズの包括的解析:トリアージ → 逆アセンブル → 動作 → ネットワーク → 永続化 → レポート |
| `malware_analysis_mode` | 脅威分類付きの焦点を絞ったマルウェア解析 |
| `basic_analysis_mode` | 初期評価と迅速な判定のための高速トリアージ |
| `apt_hunting_mode` | APT固有のハンティング:横移動、永続化、データ窃取 |
| `malware_defense_mode` | 防御指向:検出ルールと緩和策の生成 |
| `unpacking_mode` | パッキング/難読化の解析と回避(Themida、VMProtect、UPX) |
| `c2_extraction_mode` | C2通信インフラストラクチャの抽出と解析 |
| `ransomware_triage_mode` | ランサムウェア固有のトリアージ:暗号化解析、鍵回復評価 |
| `code_similarity_mode` | コード類似性と共通系統のためのバイナリ比較 |
### セキュリティ研究(6プロンプト)
| プロンプト | ユースケース |
|---|---|
| `vulnerability_research_mode` | バグハンティング:バッファオーバーフロー、UAF、コマンドインジェクション |
| `crypto_analysis_mode` | 暗号実装の解析と弱点検出 |
| `firmware_analysis_mode` | IoT/組み込みファームウェア:binwalk抽出、UART文字列、ハードコードされた認証情報 |
| `patch_analysis_mode` | セキュリティパッチ解析と回帰テスト |
| `source_code_audit_mode` | ソースコードセキュリティ監査(Python、C、C++) |
| `autonomous_vuln_hunt_mode` | 自律型脆弱性ハンティングパイプライン |
### CVE研究 & エクスプロイト開発(5プロンプト)
| プロンプト | ユースケース |
|---|---|
| `taint_analysis_mode` | データフローテイント解析:自動ソース→シンクパス発見 |
| `heap_exploit_mode` | ヒープ悪用解析とPoC生成 |
| `fuzzing_mode` | ファジングキャンペーン設定とクラッシュトリアージ |
| `patch_diff_auto_mode` | 1-day脆弱性研究のための自動パッチ差分 |
| `cve_discovery_pipeline_mode` | 完全なCVE発見パイプライン:パッチ差分から動作するエクスプロイトまで |
### その他(2プロンプト)
| プロンプト | ユースケース |
|---|---|
| `game_analysis_mode` | ゲームクライアント解析:アンチチート検出、プロトコルリバースエンジニアリング、メモリ検査 |
| `report_generation_mode` | MITRE ATT&CKテクニックマッピング付きの構造化セッションワークフロー |
> **プロンプトの仕組み:** 各プロンプトは、構造化された解析ペルソナでAIを準備します。Chain-of-Thought推論チェックポイント(AIが先に進む前に停止して評価する必要がある箇所)と、AIが推測を事実として述べることを防ぐ証拠分類ルールが含まれています。すべての結果は`OBSERVED`(直接検証済み)、`INFERRED`(静的解析から論理的に導出)、`POSSIBLE`(さらなる検証が必要)のいずれかにラベル付けする必要があります。
---
## MCPリソース(11 URI)
リソースは、AIクライアントがURIテンプレートを通じてアクセスできる読み取り専用のデータエンドポイントです。明示的なツール呼び出しを必要とせずに構造化データを提供することでツールを補完します。
### 静的リソース
| URI | 説明 |
|---|---|
| `reversecore://guide` | ファイルパスルールとベストプラクティスを含むツール使用ガイド |
| `reversecore://guide/structures` | 構造体復元とクロスリファレンス解析の技術ガイド |
| `reversecore://tools` | 登録済みの全120ツールの完全なドキュメント |
| `reversecore://logs` | アプリケーションログ(最後の100行) |
### 動的リソース(バイナリごとの仮想ファイルシステム)
これらのURIはバイナリごとに解決され、対応する解析ツールをオンデマンドで呼び出します:
| URIテンプレート | 説明 |
|---|---|
| `reversecore://{filename}/strings` | バイナリからすべての文字列を抽出 |
| `reversecore://{filename}/iocs` | IOCの抽出(IP、URL、メール、ハッシュ) |
| `reversecore://{filename}/func/{address}/code` | 関数の逆コンパイルされた疑似Cコード |
| `reversecore://{filename}/func/{address}/asm` | 関数の逆アセンブル |
| `reversecore://{filename}/func/{address}/cfg` | Mermaid形式の制御フローグラフ |
| `reversecore://{filename}/functions` | バイナリ内の全関数の一覧 |
| `reversecore://{filename}/dormant_detector` | 潜伏検出器の解析結果 |
---
## クイックスタート
### オプション1 — PyPI(最も簡単)```bash
pip install reversecore-mcp
reversecore-mcp
前提条件: システムにRadare2がインストールされている必要があります(
r2 --version)。YARAはyara-pythonを介して自動的にインストールされます。
すべての解析エンジン(Radare2、r2ghidra、YARA、Binwalk、Sleuth Kit、GDBなど)がプリインストールされています:```bash
docker run -i --rm
-v /path/to/your/samples:/app/workspace
-e REVERSECORE_WORKSPACE=/app/workspace
-e MCP_TRANSPORT=stdio
ghcr.io/sjkim1127/reversecore_mcp:latest
### オプション3 — ソースからビルド(Docker Compose)```bash
git clone https://github.com/sjkim1127/Reversecore_MCP.git
cd Reversecore_MCP
./scripts/run-docker.sh # auto-detects Intel / Apple Silicon
または手動で:```bash docker compose --profile x86 up -d # Intel/AMD docker compose --profile arm64 up -d # Apple Silicon (M1/M2/M3)
### オプション4 — Python(ローカル開発)```bash
git clone https://github.com/sjkim1127/Reversecore_MCP.git
cd Reversecore_MCP
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
python -m reversecore_mcp.server
ローカルモードの前提条件: システムにRadare2がインストールされている必要があります(
r2 --version)。個々のツールバックエンド(YARA、LIEF、Capstoneなど)はpipでインストールされます。完全なフォレンジックサポートには、Volatility3、Scapy、Sleuth Kitも必要です。
サーバー設定をIDEクライアント設定(例:~/.cursor/mcp.json または claude_desktop_config.json)に追加します。
Docker Composeでコンテナを実行している場合、このモードはstdioを実行中のコンテナに直接接続します。起動レイテンシゼロ、永続メモリ、全ツールの利用が可能です。```json { "mcpServers": { "Reversecore_MCP": { "command": "docker", "args": [ "exec", "-i", "-e", "MCP_TRANSPORT=stdio", "reversecore-mcp-arm64", "python", "-m", "reversecore_mcp.server" ] } } }
> Intel/AMD を使用している場合は、`reversecore-mcp-arm64` を `reversecore-mcp` に置き換えてください。
---
### 🌐 オプション 2: SSE HTTP モード
ネットワークベースのストリーミング(Server-Sent Events)の場合:```json
{
"mcpServers": {
"Reversecore_MCP": {
"url": "http://localhost:8000/mcp/sse"
}
}
}
セッションごとに新しい隔離されたコンテナを実行します:
⚠️ 重要 — Docker 内のファイルパス
ローカルフォルダはコンテナ内の
/app/workspaceにマウントされます。 ファイルは常にファイル名のみで参照し、ローカルの絶対パスは使用しないでください。
❌ 誤り ✅ 正しい r2_decompile("/Users/john/samples/mal.exe")r2_decompile("mal.exe")
すべての設定は環境変数または .env ファイル(.env.example を参照)で指定できます。設定は Pydantic BaseSettings で管理され、REVERSECORE_ プレフィックスが付きます。
| 変数 | デフォルト | 説明 |
|---|---|---|
REVERSECORE_PLUGIN_DIRS | "" | 拡張プラグインをスキャンするディレクトリのカンマ区切りリスト |
REVERSECORE_SAST_RULES_PATH | "" | カスタム YAML SAST ルールファイルのパス |
セキュリティは多層防御として実装されており、複数のレイヤーで保護されています:
| 制御 | 実装 |
|---|---|
| 非 root 実行 | 最小限のケーパビリティを持つ appuser(UID 1000)として実行 |
| リソース制限 | Docker Compose が CPU(2.0)とメモリ(4 GB)の制限を強制 |
| サンドボックス分離 | 動的解析ツール用のオプションのコンテナベースサンドボックス |
17 個すべての例外クラスは、プログラムによる処理のために RCMCP-E* エラーコードを保持します。完全な階層については エラーハンドリング を参照してください。
git clone https://github.com/sjkim1127/Reversecore_MCP.git cd Reversecore_MCP python -m venv venv && source venv/bin/activate pip install -r requirements.txt pip install -r requirements-dev.txt pre-commit install # installs Ruff, Bandit, Gitleaks hooks
### テスト```bash
# Full test suite with coverage report
pytest tests/ -v
# Unit tests only (fast, no external dependencies)
pytest tests/unit/ -v
# Integration tests (requires Docker)
pytest tests/integration/ -v
# Run with coverage threshold enforcement
pytest tests/unit/ --cov=reversecore_mcp --cov-fail-under=80
# Run a specific test
pytest tests/unit/test_cli_tools.py::TestRunFile::test_success -v
# Security boundary tests
pytest tests/ -m security -v
# Benchmarks
pytest tests/ -m benchmark -v
テストステータス:
pytest-asyncioによる完全非同期テストスイートテストマーカー:
ruff check reversecore_mcp/ # Lint (E, W, F, I, B, C4, UP rules) ruff format reversecore_mcp/ # Format mypy reversecore_mcp/ # Type check (0 errors across 108 files) bandit -r reversecore_mcp/ # Security scan (all severities) pip-audit # Dependency CVE scan
### Pre-commit フック
以下のフックは、コミットのたびに自動的に実行されます:
1. **Ruff** — 自動修正付きのリント + フォーマットチェック
2. **trailing-whitespace** — 末尾の空白を削除
3. **end-of-file-fixer** — ファイルが改行で終わることを保証
4. **check-yaml / check-json** — YAML/JSON 構文の検証
5. **check-added-large-files** — 1 MB を超えるファイルをブロック
6. **check-merge-conflict** — 未解決のマージマーカーを検出
7. **detect-private-key** — 誤ったキーのコミットを防止
8. **Bandit** — Python セキュリティスキャン
---
## CI/CD パイプライン
`main` へのプッシュのたびに、11 のパイプラインジョブがトリガーされます。デプロイ前にすべてが成功する必要があります。```
Lint & Security Gate Unit Tests (Python Matrix)
├─ Gitleaks (secret scan) ├─ pytest 3.10 --cov-fail-under=80
├─ Hadolint (Dockerfile lint) ├─ pytest 3.11 --cov-fail-under=80
├─ Ruff check + format └─ pytest 3.12 --cov-fail-under=80
├─ Mypy type check (108 files)
├─ Bandit (all severities) Wheel Smoke Test
├─ pip-audit (no CVEs) └─ Build wheel → install in /tmp
└─ Security boundary tests → verify plugin discovery
→ assert __file__ under sys.prefix
CodeQL Analysis
└─ Python SAST Docker Verification
├─ Build reversecore-mcp:ci
Exploit Safety Gate ├─ Trivy container scan
├─ Bandit on POC templates ├─ Image size check (< 5 GB)
├─ Hypothesis DAST fuzzing ├─ CLI tool verification
├─ Performance benchmarks ├─ Integration tests in container
└─ Container isolation test └─ E2E tool invocation
In-Container Smoke Test Build Base Image (amd64 + arm64)
├─ Copy test ELF into container ├─ Compile YARA 4.3.1
└─ Run scripts/smoke_test.py ├─ Compile Radare2 6.0.4
├─ Compile r2ghidra
Deploy (amd64 + arm64) └─ Push to GHCR
├─ Build app image
├─ Push to GHCR Merge Manifests
└─ Trivy rescan on published └─ Multi-arch manifest → :latest
ゼロバイパスポリシー: CI/CDの失敗は、パイプライン設定を変更することで解決されることはありません。根本原因は常に、ソースコードまたは依存関係で直接修正されます。
Dockerビルドでは、ビルド時間を管理可能に保つために2層アプローチを採用しています。
Dockerfile.base)ビルドに時間がかかり、めったに変更されない依存関係をソースからすべてコンパイルするマルチステージビルドです。``` compiler-toolchain (python:3.12-slim-bookworm + build tools) ├── compiler-yara (YARA 4.3.1 from source) [parallel] ├── compiler-r2 (Radare2 6.0.4 from source) [parallel] │ └── compiler-r2ghidra (r2ghidra plugin) [sequential] └── compiler-pip (pip install into /opt/venv) [parallel]
base (final runtime: python:3.12-slim-bookworm) ├── Runtime packages: file, binutils, gdb, binwalk, graphviz, nasm, sleuthkit ├── /opt/yara (compiled YARA) ├── /opt/radare2 (compiled r2 + r2ghidra) ├── /opt/venv (Python packages) └── Non-root user: appuser (UID 1000)
このイメージは、ツールのバージョンが変更された場合にのみ再ビルドされます。ビルド時間: 約12分。
### レイヤー2: アプリケーションイメージ (`Dockerfile`)
ベースイメージを継承し、アプリケーションコードをコピーします:```
FROM base image
├── COPY reversecore_mcp/ (application code)
├── COPY scripts/ (smoke test, benchmarks)
├── pip install any new requirements
├── Security package upgrades
└── CMD ["python", "-m", "reversecore_mcp.server"]
ビルド時間: 約60秒。
アーキテクチャ固有のプロファイルを持つ3つのサービス:
リソース制限: コンテナあたりCPU 2.0コア、メモリ4 GB。
reversecore_mcp/ ├── core/ # Infrastructure layer (37 modules) │ ├── config.py # Pydantic BaseSettings (34+ env vars) │ ├── exceptions.py # Exception hierarchy (17 classes, RCMCP-E* codes) │ ├── security.py # Input sanitization & command arg validation │ ├── validators.py # Path validators (TOCTOU-hardened, symlink-safe) │ ├── r2_pool.py # Thread-safe Radare2 connection pool │ ├── r2_helpers.py # Structured Radare2 output parsing │ ├── metrics.py # Per-tool timing, counts, error rates, cache stats │ ├── decorators.py # @log_execution, @track_metrics │ ├── error_handling.py # @handle_tool_errors decorator │ ├── error_formatting.py # Structured error formatting │ ├── execution.py # Safe subprocess with timeout/output limits │ ├── command_spec.py # Command specifications │ ├── memory.py # Async SQLite AI memory store │ ├── mitre_mapper.py # MITRE ATT&CK mapping engine │ ├── evidence.py # Evidence classification (OBSERVED/INFERRED/POSSIBLE) │ ├── resilience.py # Retry, circuit-breaker, timeout patterns │ ├── task_queue.py # Background task queue (Redis + arq) │ ├── extension_registry.py # Plugin registration system │ ├── arch_registry.py # Multi-arch mapping (x86/ARM/MIPS/RISC-V/PPC) │ ├── result_cache.py # SHA256-based tool result caching │ ├── analysis_cache.py # Multi-level decompilation cache (Redis + SQLite) │ ├── result.py # ToolSuccess / ToolError Pydantic models │ ├── loader.py # Dynamic tool module loader │ ├── plugin.py # Plugin base class │ ├── extension.py # Extension base class │ ├── container.py # Container/sandbox execution │ ├── audit.py # Audit logging │ ├── binary_cache.py # Binary file caching │ ├── json_utils.py # orjson-backed JSON (3-5x faster) │ ├── logging_config.py # Loguru logging configuration │ ├── report_generator.py # Report rendering (Markdown, PDF) │ ├── resource_manager.py # MCP resource lifecycle │ └── sast/ # Source code scanners │ ├── python_ast_scanner.py # Python AST vulnerability scanner │ ├── regex_scanner.py # C/C++ regex vulnerability scanner │ ├── rule_manager.py # SAST rule loader │ └── default_rules.yaml # Default scanning rules │ ├── tools/ # MCP tool implementations (120 tools) │ ├── analysis/ # Static analysis (24 tools) │ │ ├── static_analysis.py # file, strings, binwalk │ │ ├── lief_tools.py # LIEF binary parser │ │ ├── capa_tools.py # CAPA capability detection │ │ ├── die_tools.py # Detect It Easy packer detection │ │ ├── diff_tools.py # Binary diffing │ │ ├── emulation_tools.py # ESIL emulation │ │ ├── fuzz_tools.py # Fuzzing harness generator │ │ ├── fuzzing_campaign.py # Full fuzzing campaign runner │ │ ├── symbolic_analysis.py # angr symbolic execution │ │ ├── signature_tools.py # Library signature matching │ │ ├── source_auditor.py # SAST (Python + C/C++) │ │ ├── crash_triage.py # GDB crash triage │ │ ├── taint_analysis.py # Source→sink taint tracing │ │ ├── advanced_yara.py # Advanced YARA generation │ │ ├── patch_vuln_inference.py # Patch vulnerability inference │ │ └── cache_tools.py # Analysis cache management │ │ │ ├── radare2/ # Disassembly & decompilation (30 tools) │ │ ├── radare2_mcp_tools.py # Core Radare2 tool set │ │ ├── r2ghidra_tools.py # r2ghidra decompiler (cached) │ │ ├── r2_analysis.py # Deep function analysis │ │ ├── r2_db.py # SQLite annotation + cache DB │ │ ├── r2_esil_simulator.py # Multi-arch ESIL simulator │ │ └── r2_session.py # Stateful analysis sessions │ │ │ ├── malware/ # Threat detection (9 tools) │ │ ├── dormant_detector.py # Backdoor/logic bomb detection │ │ ├── ioc_tools.py # IOC extraction │ │ ├── yara_tools.py # YARA scanning │ │ ├── adaptive_vaccine.py # YARA rule + patch generation │ │ ├── vulnerability_hunter.py # Dangerous API detection │ │ ├── autonomous_hunter.py # Autonomous vuln hunting pipeline │ │ ├── heap_exploit.py # Heap exploitation analysis │ │ ├── poc_generator.py # PoC exploit generation │ │ └── rop_builder.py # ROP chain construction │ │ │ ├── forensics/ # Digital forensics (22 tools) │ │ ├── memory.py # Volatility3 memory forensics │ │ ├── network.py # Scapy PCAP analysis │ │ ├── disk.py # Sleuth Kit disk forensics │ │ └── artifact.py # Browser/registry/event log analysis │ │ │ ├── report/ # Report generation (14 tools) │ │ ├── report_mcp_tools.py # MCP-registered report tools │ │ ├── report_tools.py # Report rendering logic │ │ ├── session.py # Session state management │ │ ├── converter.py # Format conversion (Markdown → PDF/HTML) │ │ ├── email.py # SMTP report delivery │ │ ├── sigma_generator.py # SIGMA rule generation │ │ └── vex_generator.py # VEX report generation │ │ │ └── common/ # Shared utilities (20 tools) │ ├── file_operations.py # File ops, workspace management │ ├── server_tools.py # Server health, tool metrics │ ├── memory_tools.py # AI memory management (11 tools) │ ├── patch_explainer.py # Binary patch explanation │ └── assembler.py # Keystone assembler │ ├── prompts/ # AI reasoning prompts (22 modes) │ ├── malware.py # 9 malware analysis prompts │ ├── security.py # 6 security research prompts │ ├── cve_research.py # 5 CVE/exploit research prompts │ ├── game.py # Game client analysis prompt │ ├── report.py # Report generation prompt │ ├── server_health.py # Server inspection prompts │ └── common.py # Shared constants (DOCKER_PATH_RULE, LANGUAGE_RULE) │ ├── dashboard/ # Web dashboard (FastAPI + HTMX) │ ├── templates/ # Jinja2 templates with HTMX fragments │ └── static/ # htmx.min.js (local, CSP-compliant) │ ├── web/ # HTTP transport layer │ ├── auth.py # API key authentication middleware │ ├── middleware.py # Security headers, loopback restriction │ └── endpoints.py # /health, file upload, dashboard routes │ ├── resources.py # 11 MCP resources (static + dynamic per-binary) └── server.py # FastMCP server entry point
**その他のディレクトリ:**```
tests/
├── unit/ # 1,957 unit tests
├── integration/ # Docker-based integration tests
├── fixtures/ # Test binaries, YARA rules, sample data
└── conftest.py # Shared pytest fixtures
scripts/
├── smoke_test.py # Multi-layer in-container smoke test
├── check_release_metadata.py # Version consistency validation
├── fetch_test_binaries.py # Download test fixtures
├── run-docker.sh # Auto-detect architecture and start
└── ... # Benchmarks, analysis scripts
docs/
├── getting-started/ # Installation guide
├── development/ # Architecture, contributing, testing guides
├── api/ # Tool and module reference
└── user-guide/ # Analysis workflows
すべてのカスタム例外は ReversecoreError を継承し、構造化されたエラーコードを保持します:
AIクライアントは error_code フィールドを使用して、失敗をプログラム的に処理し、再試行するか、代替ツールを試すか、エラーをユーザーに報告するかを決定できます。
新しいMCPツールを追加するには、次のパターンに従ってください:```python
from reversecore_mcp.core.decorators import log_execution from reversecore_mcp.core.result import ToolResult, success, failure from reversecore_mcp.core.security import validate_file_path
@log_execution() async def my_analysis_tool( file_path: str, option: str | None = None, ) -> ToolResult: """Analyze a binary for X.
Args:
file_path: Path to the binary file (relative to workspace).
option: Optional analysis option.
Returns:
ToolResult with status='success' and structured content.
"""
try:
safe_path = validate_file_path(file_path)
result = await perform_analysis(safe_path)
return success({"result": result})
except Exception as e:
return failure(
error_code="RCMCP-E100",
message=str(e),
hint="Check that the file exists and is a valid binary.",
)
適切なプラグインの `__init__.py` に登録し、`tests/unit/` にテストを追加します。
---
## コントリビューション
1. リポジトリをフォークします
2. 機能ブランチを作成します: `git checkout -b feat/my-feature`
3. コードと並行してテストを作成します — カバレッジは80%を下回らないようにしてください
4. すべてのゲートを通過させます: `pytest`、`ruff check`、`mypy`、`bandit`
5. 明確な説明を添えてプルリクエストを開きます
コード標準、docstring規約(Googleスタイル)、プルリクエストのチェックリストについては、[コントリビューションガイド](https://github.com/sjkim1127/reversecore_mcp/blob/main/docs/development/contributing.md)をお読みください。
---
## ドキュメント
| ドキュメント | 説明 |
|---|---|
| [インストールガイド](https://github.com/sjkim1127/reversecore_mcp/blob/main/docs/getting-started/installation.md) | すべての環境向けの詳細なセットアップ |
| [アーキテクチャガイド](https://github.com/sjkim1127/reversecore_mcp/blob/main/docs/development/architecture.md) | システム設計とコンポーネントの詳細 |
| [コントリビューションガイド](https://github.com/sjkim1127/reversecore_mcp/blob/main/docs/development/contributing.md) | コード標準、docstring、PRワークフロー |
| [テストガイド](https://github.com/sjkim1127/reversecore_mcp/blob/main/docs/development/testing.md) | テストパターン、フィクスチャ、カバレッジ |
| [APIリファレンス](https://github.com/sjkim1127/reversecore_mcp/blob/main/docs/api) | ツールとモジュールのリファレンス |
| [ユーザーガイド](https://github.com/sjkim1127/reversecore_mcp/blob/main/docs/user-guide) | 分析ワークフロー |
---
## 使用例
### 例1: 基本的なマルウェアトリアージ```
User: "Analyze this suspicious file sample.exe"
AI calls:
1. run_file("sample.exe") → PE32 executable, x86, MSVC
2. detect_packer("sample.exe") → Not packed
3. extract_iocs("sample.exe") → 3 IPs, 2 URLs, 1 mutex
4. run_capa("sample.exe") → "creates persistence", "encrypts data"
5. dormant_detector("sample.exe") → 2 orphan functions with network calls
6. generate_yara_rule("sample.exe") → Detection rule generated
AI response: "This PE32 binary shows ransomware-like behavior. CAPA detected
encryption and persistence capabilities. I found 2 hidden network functions
that may serve as a backup C2 channel. Here's a YARA rule for detection..."
User: "Find exploitable bugs in this network daemon"
AI activates: taint_analysis_mode
AI calls:
taint_trace("daemon", verify_with_angr=True) → Found 3 source→sink paths: recv() → strcpy() [CWE-120, CONFIRMED by angr] read() → sprintf() [CWE-134, LIKELY] getenv() → system() [CWE-78, POSSIBLE]
vulnerability_hunter("daemon") → 12 dangerous API calls, 4 exploitable patterns
generate_poc_exploit(target="daemon", vuln_type="bof", offset=128) → Python exploit script generated
AI response: "I found a confirmed stack buffer overflow where recv() data flows directly into strcpy() at 0x40123C. angr proved the path is reachable. Here's a working PoC..."
### 例3:デジタルフォレンジック調査```
User: "Analyze this memory dump from a compromised server"
AI calls:
1. memory_list_processes("memdump.raw")
→ 47 processes, 2 with suspicious names
2. memory_detect_injections("memdump.raw")
→ Code injection detected in PID 1842 (svchost.exe)
3. memory_extract_strings("memdump.raw", pid=1842)
→ C2 domain strings extracted
4. artifact_correlate_ioc(artifacts={"domains": ["evil-c2.com"]})
→ Matches known APT group IOCs
5. create_analysis_report(template_type="full_analysis")
→ PDF report with timeline and MITRE ATT&CK mapping
User: "Compare the patched and unpatched versions to find what was fixed"
AI activates: patch_diff_auto_mode
AI calls:
diff_binaries("libfoo-1.0.so", "libfoo-1.1.so") → 3 functions changed, 1 new function
patch_diff_1day("libfoo-1.0.so", "libfoo-1.1.so") → Automated analysis: bounds check added at parse_header()
r2_decompile("libfoo-1.0.so", "parse_header") → Decompiled vulnerable version (no bounds check)
r2_decompile("libfoo-1.1.so", "parse_header") → Decompiled patched version (memcpy size limited)
AI response: "The patch adds a bounds check in parse_header() at 0x12340. The old version copies user-controlled length bytes via memcpy without validation, creating a heap buffer overflow (CWE-122)."
---
## マルチアーキテクチャ対応
`arch_registry.py` モジュールは、アーキテクチャ名をRadare2の設定パラメータにマッピングし、手動設定なしで様々なCPUアーキテクチャを横断してツールを動作させることができます:
| アーキテクチャ | キー | r2 Arch | ビット幅 | PCレジスタ | SPレジスタ |
|---|---|---|---|---|---|
| Intel 32ビット | `x86` | `x86` | 32 | `eip` | `esp` |
| Intel/AMD 64ビット | `x86_64` | `x86` | 64 | `rip` | `rsp` |
| ARM 32ビット / Thumb | `arm32` | `arm` | 16, 32 | `r15` | `r13` |
| ARM 64ビット (AArch64) | `arm64` | `arm` | 64 | `pc` | `sp` |
| MIPS | `mips` | `mips` | 32, 64 | `pc` | `sp` |
| RISC-V | `riscv` | `riscv` | 32, 64 | `pc` | `sp` |
| PowerPC | `ppc` | `ppc` | 32, 64 | `pc` | `r1` |
**エイリアス解決**は自動的に処理されます:
- `amd64` → `x86_64`
- `aarch64` → `arm64`
- `bits=64` の `arm` → `arm64`
- `bits=16` または `bits=32` の `arm` → `arm32`
`Radare2_esil_emulate`、`assemble_instructions`、`r2_simulate_patch` などのツールは、このレジストリを使用して、任意のターゲットバイナリに対して解析環境を正しく設定します。
---
## 結果キャッシュシステム
2つのキャッシュ層により、冗長な計算を最小限に抑えます:
### ツール結果キャッシュ (`result_cache.py`)
`@cache_tool_result` デコレータは、バイナリファイルのSHA256ハッシュとツールのキーワード引数に基づいて、任意のツールの出力をキャッシュします:```
Cache key = SHA256( "<tool_name>::{sorted_json_kwargs}" )
ストレージバックエンド: r2_db.py を介したSQLiteデータベース。get_cached_result() および set_cached_result() ツールからアクセス可能。
メトリクス: キャッシュヒットとミスは metrics_collector.record_cache_hit() と record_cache_miss() を介して追跡され、get_tool_metrics ツールで確認できます。
analysis_cache.py)逆コンパイル結果(計算コストが高い)専用のマルチレベルキャッシュ:
インポート/エクスポート: export_analysis_cache および import_analysis_cache ツールを使用すると、キャッシュ状態を rcpack ファイルに保存/読み込みし、環境間で共有できます。
AIメモリシステム (memory_tools.py + core/memory.py) は、セッションをまたいだ解析結果の永続的かつ検索可能なストレージを提供します。これにより、AIは以下が可能になります:
create_memory_session("analysis of ransomware sample") │ ├── store_analysis_finding("Found AES-256 encryption at 0x401000", tags=["crypto", "ransomware"]) ├── store_analysis_finding("C2 beacon interval: 30 seconds", tags=["c2", "network"]) └── tag_analysis_session(tags=["ransomware", "financial-sector"])
query_analysis_memories("ransomware encryption") → Returns previous findings about ransomware encryption patterns
get_binary_analysis_context("sample.exe") → Returns all findings ever recorded for this binary
**ストレージ:** `MEMORY_DB_PATH` で設定されたパスにある非同期SQLiteデータベース(デフォルト: `~/.reversecore_mcp/memory.db`)。
**移植性:** `export_memory_store` と `import_memory_store` を使用して、メモリデータベース全体を環境間で転送します。
---
## Webダッシュボード
HTTPモード(`MCP_TRANSPORT=http`)で実行すると、`http://localhost:8000/dashboard` でWebダッシュボードを利用できます。以下を提供します:
- ドラッグ&ドロップによるバイナリのアップロード
- リアルタイムの解析ステータス
- 対話型の関数リストと逆アセンブリビュー
- IOC抽出結果
- サーバーヘルスモニタリング
**技術スタック:** FastAPI + Jinja2テンプレート + HTMX(`dashboard/static/` からローカルに読み込まれ、CSP準拠のためのCDN依存なし)。
**セキュリティ機能:**
- すべての状態変更フォームに対するCSRFトークン
- Jinja2の自動エスケープ有効
- 表示前に `html.escape()` でサニタイズされるすべてのユーザー入力
- `validate_file_path()` によるパストラバーサル保護
---
## デプロイメント
### 本番環境チェックリスト
本番環境にデプロイする前に:
| 項目 | 方法 |
|---|---|
| APIキーの設定 | `MCP_API_KEY=<強力なランダムキー>` |
| 非rootユーザーの使用 | 組み込み: コンテナは `appuser`(UID 1000)として実行 |
| リソース制限の設定 | デフォルト: `docker-compose.yml` でCPU 2 / RAM 4 GB |
| 構造化ログの有効化 | ログ集約用に `LOG_FORMAT=json` |
| Redisの設定 | タスクキューとキャッシュ用に `REDIS_URL=redis://<host>:6379/0` |
| ワークスペースパスの設定 | `REVERSECORE_WORKSPACE=/path/to/isolated/directory` |
| レート制限の確認 | `REVERSECORE_RATE_LIMIT=60`(リクエスト/分、必要に応じて調整) |
| サンドボックスの有効化 | 動的解析の分離用に `REVERSECORE_SANDBOX_ENABLED=true` |
### ヘルスチェック
サーバーはオーケストレーション用のHTTPヘルスチェックエンドポイントを提供します:```bash
# Liveness (always 200 if process is running)
curl http://localhost:8000/health/live
# Readiness (checks tool availability)
curl http://localhost:8000/health/ready
# Full health (requires API key if configured)
curl -H "X-API-Key: <key>" http://localhost:8000/health
これらのエンドポイントはAPIキー認証の対象外となっており、ロードバランサーやコンテナオーケストレーターがプローブできるようになっています。
Dockerイメージには、ポート8000へのTCP接続を30秒ごとに検証する組み込みのHEALTHCHECK命令が含まれています。DockerとKubernetesは、異常なコンテナを自動的に再起動します。
必要なCLIツールが環境にインストールされていません。
解決策: Dockerを使用している場合は、ツールがベースイメージに含まれているか確認してください:```bash docker exec reversecore-mcp-arm64 which r2 yara binwalk tsk_recover gdb
Python のローカルインストールを使用している場合は、不足しているツールをインストールしてください。```bash
# macOS
brew install radare2 yara binwalk sleuthkit
# Ubuntu/Debian
apt install radare2 yara binwalk sleuthkit
分析が設定されたタイムアウトを超えました。
解決策: タイムアウトを増やしてください:```bash export REVERSECORE_DEFAULT_TOOL_TIMEOUT=300 # 5 minutes
大きなバイナリ(>100 MB)の場合、クイックスキャン版の使用を検討してください:
- `run_capa_quick` を `run_capa` の代わりに使用
- `detect_packer` を `detect_packer_deep` の代わりに使用
</details>
<details>
<summary><b>パストラバーサルエラー(RCMCP-E302)</b></summary>
ワークスペースディレクトリの外部にあるファイルを参照しました。
**解決策:** まずファイルをワークスペースにコピーしてください:```
copy_to_workspace("/path/to/file.exe")
読み取り専用で追加のディレクトリをマウントすることもできます:```bash export REVERSECORE_READ_DIRS=/opt/samples,/mnt/evidence
</details>
<details>
<summary><b>Apple SiliconでDockerコンテナが起動しない</b></summary>
ARM64プロファイルを使用していることを確認してください:```bash
docker compose --profile arm64 up -d
Or use the auto-detection script:```bash ./scripts/run-docker.sh
</details>
<details>
<summary><b>Redis接続拒否</b></summary>
タスクキューには実行中のRedisインスタンスが必要です。
**解決策:** メインサービスと一緒にRedisを起動します。```bash
docker compose --profile arm64 up -d # Starts both reversecore and redis
Or disable Redis-dependent features by not setting REDIS_URL.
これは通常、関数が最初に解析されていないことを意味します。
解決策: 逆コンパイルの前に解析を実行してください:``` Radare2_analyze_binary("sample.exe") Radare2_decompile_function("sample.exe", "main")
</details>
---
## FAQ
<details>
<summary><b>これはGhidraやIDA Proの代替になりますか?</b></summary>
いいえ。このプロジェクトは代替ではなく補完です。逆コンパイルにはr2ghidra(Radare2に組み込まれたGhidra逆コンパイラエンジン)を使用します。GUIは提供されず、フル機能のディスアセンブラのような対話型解析ワークフローもありません。その目的は、AIアシスタントが解析タスクをプログラム的に実行できるようにすることです。
</details>
<details>
<summary><b>別途GhidraやJDKのインストールは必要ですか?</b></summary>
いいえ。r2ghidraプラグインはGhidra逆コンパイラエンジンをRadare2内に直接組み込んでいます。JDKもGhidraのインストールもGhidraプロジェクトファイルも不要です。`r2ghidra`プラグインがコンパイルされた`r2`だけで十分です。
</details>
<details>
<summary><b>対応しているMCPクライアントは何ですか?</b></summary>
[Model Context Protocol](https://modelcontextprotocol.io/)仕様を実装する任意のクライアントに対応しています。テスト済み: Claude Desktop、Cursor、Windsurf、Google Antigravity。サーバーはstdioとHTTP/SSEトランスポートの両方をサポートしています。
</details>
<details>
<summary><b>Linux/macOSでWindows PEファイルを解析できますか?</b></summary>
はい。静的解析(逆アセンブル、逆コンパイル、文字列抽出、IOC抽出、YARAスキャン)は、ホストOSに関係なくあらゆるファイル形式で動作します。動的解析(エミュレーション、ファジング)は、対象アーキテクチャによって制限がある場合があります。
</details>
<details>
<summary><b>このツールでマルウェアを解析するのはどの程度安全ですか?</b></summary>
Dockerコンテナが分離を提供します: 非rootユーザー、CIでのデフォルトのネットワークなし、リソース制限。ライブマルウェア解析には、専用VMでの実行またはサンドボックス機能(`REVERSECORE_SANDBOX_ENABLED=true`)の使用を推奨します。静的解析ツール(r2、YARA、strings)は対象バイナリを実行することはありません。
</details>
<details>
<summary><b>最大ファイルサイズは?</b></summary>
デフォルトの制限:
- アップロード: 100 MB (`MAX_UPLOAD_SIZE`)
- LIEF解析: 1 GB (`REVERSECORE_LIEF_MAX_FILE_SIZE`)
- ツール出力: 10 MB (`REVERSECORE_MAX_OUTPUT_SIZE`)
すべての制限は環境変数で設定可能です。
</details>
---
## 謝辞
このプロジェクトは多くのオープンソースプロジェクトの成果の上に成り立っています:
| プロジェクト | Reversecore MCPでの役割 |
|---|---|
| [Radare2](https://radare.org/) | 逆アセンブル、エミュレーション、バイナリ解析 |
| [r2ghidra](https://github.com/radareorg/r2ghidra) | Radare2用Ghidra逆コンパイラエンジン |
| [FastMCP](https://github.com/jlowin/fastmcp) | MCPサーバーフレームワーク |
| [YARA](https://virustotal.github.io/yara/) | マルウェア検出のためのパターンマッチング |
| [LIEF](https://lief-project.github.io/) | バイナリ形式の解析(PE、ELF、Mach-O) |
| [CAPA](https://github.com/mandiant/capa) | Mandiant FLARE機能検出 |
| [angr](https://angr.io/) | シンボリック実行エンジン |
| [Capstone](https://www.capstone-engine.org/) | 逆アセンブルフレームワーク |
| [Keystone](https://www.keystone-engine.org/) | アセンブルフレームワーク |
| [pwntools](https://github.com/Gallopsled/pwntools) | エクスプロイト開発ツールキット |
| [ROPgadget](https://github.com/JonathanSalwan/ROPgadget) | ROPガジェット検出ツール |
| [Volatility3](https://github.com/volatilityfoundation/volatility3) | メモリフォレンジックフレームワーク |
| [Scapy](https://scapy.net/) | ネットワークパケット解析 |
| [Sleuth Kit](https://sleuthkit.org/) | ディスクフォレンジックツールキット |
| [Binwalk](https://github.com/ReFirmLabs/binwalk) | ファームウェア解析 |
| [Detect It Easy](https://github.com/horsicq/DIE-engine) | パッカー/コンパイラ検出 |
---
## ライセンス
MIT — 詳細は[LICENSE](https://github.com/sjkim1127/reversecore_mcp/blob/main/LICENSE)を参照してください。
---
<div align="center">
**[GitHub](https://github.com/sjkim1127/Reversecore_MCP)** · **[PyPI](https://pypi.org/project/reversecore-mcp/)** · **[FastMCP Docs](https://github.com/jlowin/fastmcp)** · **[MCP Spec](https://modelcontextprotocol.io/)** · **[Radare2](https://radare.org/)** · **[YARA](https://virustotal.github.io/yara/)**
</div>
| ドメイン | 実行できること |
|---|
| 静的解析 | 逆アセンブル、逆コンパイル(r2ghidra)、バイナリ解析(LIEF)、パッカー検出(DIE)、機能検出(CAPA)、文字列抽出、ファームウェアスキャン(binwalk) |
| 動的・シンボリック解析 | ESILエミュレーション、angrシンボリック実行、テイント解析、ファジングハーネス生成 |
| マルウェア解析 | IOC抽出、YARAスキャン、潜伏型バックドア検出、適応型ワクチン生成、自律型脆弱性ハンティング |
| 脆弱性調査 | 危険なAPI検出、ROPガジェット発見、ヒープエクスプロイト解析、クラッシュトリアージ、PoC生成 |
| デジタルフォレンジック | メモリフォレンジック(Volatility3)、PCAP解析(Scapy)、ディスクフォレンジック(Sleuth Kit)、アーティファクト相関 |
| ソースコード監査 | Python ASTスキャン、C/C++正規表現パターンスキャン |
| レポート | MITRE ATT&CKマッピング付きセッションベースのレポート、SIGMAルール生成、VEXレポート、メール配信 |
| 変数 | デフォルト | 説明 |
|---|
MCP_TRANSPORT | stdio | トランスポートモード: stdio または http |
REVERSECORE_WORKSPACE | ./ (cwd) | 解析ワークスペースディレクトリ |
REVERSECORE_READ_DIRS | "" | 追加の読み取り専用ディレクトリのカンマ区切りリスト |
REVERSECORE_STRICT_PATHS | false | パスが見つからない場合に警告ではなくエラーを発生させる |
REVERSECORE_STRUCTURED_ERRORS | false | エラーコード付きの構造化エラーレスポンスを有効にする |
REVERSECORE_DEFAULT_TOOL_TIMEOUT | 120 | ツール実行のデフォルトタイムアウト(秒) |
REVERSECORE_MAX_OUTPUT_SIZE | 10000000 | ツールの最大出力サイズ(バイト) |
| 変数 | デフォルト | 説明 |
|---|
MCP_HOST | 0.0.0.0 | バインドするホストインターフェース(API キーがない場合は 127.0.0.1 に自動上書き) |
MCP_PORT | 8000 | HTTP サーバーのポート |
MCP_API_KEY | (未設定) | HTTP 認証用の API キー(X-API-Key または Authorization: Bearer) |
REVERSECORE_RATE_LIMIT | 60 | 1 分あたりの最大リクエスト数(HTTP モードのみ、slowapi 経由) |
MAX_UPLOAD_SIZE | 100000000 | 最大アップロードサイズ(デフォルト 100 MB) |
FILE_RETENTION_MINUTES | 1440 | アップロードファイルの保持期間(デフォルト 24 時間) |
| 変数 | デフォルト | 説明 |
|---|
REVERSECORE_R2_POOL_SIZE | 3 | プール内の Radare2 接続数 |
REVERSECORE_R2_POOL_TIMEOUT | 30 | プールから接続を取得する際のタイムアウト |
REVERSECORE_R2_EXTENSIONS | "" | r2 拡張クラスのカンマ区切りリスト(module:ClassName) |
REVERSECORE_GHIDRA_MAX_PROJECTS | 3 | キャッシュされる r2ghidra 逆コンパイラプロジェクトの最大数 |
REVERSECORE_GHIDRA_EXTENSIONS | "" | Ghidra 拡張クラスのカンマ区切りリスト |
MAX_EMULATION_INSTRUCTIONS | 1000 | ESIL エミュレーション命令の最大数 |
| 変数 | デフォルト | 説明 |
|---|
REVERSECORE_SANDBOX_ENABLED | false | 動的解析ツールのサンドボックス実行を有効にする |
REVERSECORE_SANDBOX_MODE | auto | サンドボックスモード: auto、host、container、disabled |
REVERSECORE_SANDBOX_DOCKER_IMAGE | reversecore-sandbox:latest | サンドボックス実行用の Docker イメージ |
REVERSECORE_SANDBOX_CPU_LIMIT | 1.0 | サンドボックスコンテナの CPU コア制限 |
REVERSECORE_SANDBOX_MEMORY_LIMIT | 512m | サンドボックスコンテナのメモリ制限 |
REVERSECORE_SANDBOX_PIDS_LIMIT | 100 | サンドボックスコンテナの PID 制限 |
REVERSECORE_SANDBOX_USER | nobody | サンドボックス実行用の非 root ユーザー |
| 変数 | デフォルト | 説明 |
|---|
REDIS_URL | redis://localhost:6379/0 | タスクキューと結果キャッシュ用の Redis URL |
MEMORY_DB_PATH | ~/.reversecore_mcp/memory.db | AI メモリ SQLite データベースのパス |
REVERSECORE_LIEF_MAX_FILE_SIZE | 1000000000 | LIEF 解析の最大ファイルサイズ(1 GB) |
| 変数 | デフォルト | 説明 |
|---|
LOG_LEVEL | INFO | ログの詳細度: DEBUG、INFO、WARNING、ERROR |
LOG_FILE | <tempdir>/reversecore/app.log | ログファイルのパス |
LOG_FORMAT | human | ログ形式: human(読み取り可能)または json(構造化) |
| 制御 | 実装 |
|---|
| シェルインジェクションなし | すべてのサブプロセス呼び出しはリスト引数を使用し、シェル文字列は使用しない(execution.py) |
| パストラバーサル防止 | validate_file_path() と validate_binary_path() がシンボリックリンクを解決し、ワークスペース内へのアクセスを制限する(validators.py) |
| TOCTOU 緩和 | bypass_cache=True フラグがパスを再検証し、競合状態を防ぐ |
| 入力サニタイズ | すべてのパラメータは実行前にサニタイズされる(security.py) |
| CSRF 保護 | ダッシュボードフォームはトークンベースの CSRF 検証を要求する(dashboard/__init__.py) |
| 制御 | 実装 |
|---|
| タイミング攻撃耐性のある認証 | API キー比較に secrets.compare_digest() を使用(web/auth.py) |
| 制限された認証ベクトル | X-API-Key と Authorization: Bearer ヘッダーのみ受け入れ。クエリパラメータや Cookie は不可 |
| ループバックのみのフォールバック | MCP_API_KEY がない場合、HTTP アクセスは 127.0.0.1 に制限される(web/middleware.py) |
| レート制限 | slowapi による分単位の設定可能な制限 |
| セキュリティヘッダー | すべての HTTP レスポンスに HSTS、X-Content-Type-Options、X-Frame-Options、CSP を適用(web/middleware.py) |
最小化された /health | 公開エンドポイントは {"status": "alive"} のみを返し、詳細は認証の背後に置く(web/endpoints.py) |
| 制御 | 実装 |
|---|
| シークレットスキャン | Gitleaks がすべてのコミットで実行(pre-commit フック + CI) |
| SAST | Bandit がすべてのコミットで全 Python コードをスキャン |
| CodeQL | main へのプッシュごとに GitHub CodeQL 静的解析を実行 |
| 依存関係監査 | プッシュごとに pip-audit を実行 — 未レビューの CVE はなし |
| コンテナスキャン | Trivy が Docker イメージの脆弱性をスキャン(LOW から CRITICAL まで) |
| エクスプロイト安全性ゲート | POC テンプレートを Bandit でスキャン。Hypothesis DAST ファジング。コンテナ分離を検証 |
| マーカー | 目的 |
|---|
@pytest.mark.unit | 高速なユニットテスト |
@pytest.mark.integration | Dockerまたは外部ツールを必要とするテスト |
@pytest.mark.slow | 長時間実行されるテスト |
@pytest.mark.benchmark | パフォーマンスベンチマーク |
@pytest.mark.security | セキュリティ境界の検証テスト |
| サービス | プロファイル | 説明 |
|---|
reversecore-mcp | default, x86 | Intel/AMD x86_64 |
reversecore-mcp-arm64 | arm64, macos | Apple Silicon ARM64 |
redis | すべてのプロファイル | タスクキューとキャッシュ用のRedis 7 Alpine |
| コンポーネント | 最小 | 推奨 |
|---|
| CPU | 4コア | 8コア以上 |
| RAM | 8 GB | 16 GB |
| ストレージ | 20 GB | 50 GB SSD |
| OS | Linux / macOS | Docker環境(任意のOS) |
| Docker | 20.10+ | 24.0+ |
| Python(ローカルモード) | 3.10 | 3.11または3.12 |
| 例外 | コード | タイプ | 発生時 |
|---|
ReversecoreError | RCMCP-E000 | UNKNOWN_ERROR | すべてのエラーの基底クラス |
ValidationError | RCMCP-E001 | VALIDATION_ERROR | 無効な入力、不正なパラメータ |
ExecutionTimeoutError | RCMCP-E002 | TIMEOUT_ERROR | ツールがタイムアウトを超過 |
ToolNotFoundError | RCMCP-E003 | TOOL_ERROR | 必要なCLIツールが未インストール |
OutputLimitExceededError | RCMCP-E004 | OUTPUT_ERROR | 出力が最大サイズを超過 |
ToolExecutionError | RCMCP-E005 | EXECUTION_ERROR | サブプロセスが非ゼロを返した |
BinaryAnalysisError | RCMCP-E100 | BINARY_ANALYSIS_ERROR | 一般的なバイナリ解析の失敗 |
DecompilationError | RCMCP-E101 | DECOMPILATION_ERROR | r2ghidraの逆コンパイルに失敗 |
DisassemblyError | RCMCP-E102 | DISASSEMBLY_ERROR | Radare2の逆アセンブルに失敗 |
StructureRecoveryError | RCMCP-E103 | STRUCTURE_RECOVERY_ERROR | C構造体の復元に失敗 |
SignatureGenerationError | RCMCP-E104 | SIGNATURE_GENERATION_ERROR | YARA/シグネチャ生成に失敗 |
EmulationError | RCMCP-E105 | EMULATION_ERROR | ESILエミュレーションに失敗 |
ToolTimeoutError | RCMCP-E200 | TOOL_TIMEOUT_ERROR | 外部ツールがタイムアウト |
GhidraConnectionError | RCMCP-E201 | GHIDRA_CONNECTION_ERROR | r2ghidraの接続問題 |
Radare2Error | RCMCP-E202 | RADARE2_ERROR | Radare2コマンドが失敗 |
WorkspaceError | RCMCP-E300 | WORKSPACE_ERROR | ワークスペースのファイルアクセスエラー |
SecurityViolationError | RCMCP-E301 | SECURITY_VIOLATION | セキュリティポリシー違反 |
PathTraversalError | RCMCP-E302 | PATH_TRAVERSAL | パストラバーサル試行を検出 |
| レベル | バックエンド | キー形式 | TTL | 目的 |
|---|
| L1 | Redis | ghidra:decompile:{file_hash}:{function_address}:{decompiler} | 1時間 (3600秒) | 高速、セッション間で共有 |
| L2 | SQLite | テーブル decompilation_cache | 永続的 | Redis再起動後も存続 |