关于 Reversecore_mcp
Reversecore_mcp 是面向安全分析的 MCP 服务,为 AI 助手提供逆向工程、恶意软件分析、漏洞研究、数字取证和源代码审计工具。它将多种分析后端整合为结构化工具,支持自然语言驱动的分析流程。
主要功能
- 01静态分析与反汇编
- 02恶意软件与 YARA 分析
- 03符号执行与污点追踪
- 04数字取证与 PCAP 分析
- 05源代码漏洞扫描
- 06MITRE ATT&CK 报告生成
适用场景
- 01分析恶意软件样本并提取 IOC
- 02检查二进制文件中的漏洞线索
- 03调查内存、磁盘或网络取证数据
- 04审计 Python 与 C/C++ 源代码
MCP 相关
该 MCP 服务通过 stdio 或 HTTP/SSE 接受兼容客户端连接,并提供 177 项分析工具、引导式分析提示词和 MCP 资源。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
114收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| language | any | 否 | 可选的语言提示(例如,'c'、'python')。如果为 None,则根据扩展名推断。 |
| file_path | string | 是 | 源代码文件的路径。 |
详细介绍
Reversecore MCP
通过 Model Context Protocol 实现 AI 驱动的逆向工程与安全分析
一个 MCP 服务,让 Claude 和 Cursor 等 AI 助手能够通过自然语言执行逆向工程、恶意软件分析、漏洞研究、数字取证和源代码审计。
目录
- Reversecore MCP 是什么?
- 架构
- 工具目录(177 个工具)
- 引导式分析提示词(22 种模式)
- MCP 资源(11 个 URI)
- 快速开始
- 连接到你的 AI 客户端
- 配置
- 安全模型
- 开发
- CI/CD 流水线
- Docker 构建架构
- 系统要求
- 项目结构
- 错误处理
- 添加新工具
- 贡献
- 文档
- 许可证
Reversecore MCP 是什么?
Reversecore MCP 是一个 Model Context Protocol 服务,将 177 个分析工具封装到一个统一接口中,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."
AI 助手会将其拆解为多个工具调用:
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 可以据此进行推理、串联后续查询,或将结果呈现给用户。
覆盖范围
| 领域 | 可执行的操作 |
|---|---|
| 静态分析 | 反汇编、反编译(r2ghidra)、二进制解析(LIEF)、加壳器检测(DIE)、能力检测(CAPA)、字符串提取、固件扫描(binwalk) |
| 动态与符号分析 | ESIL 仿真、angr 符号执行、污点分析、模糊测试框架生成 |
| 恶意软件分析 | IOC 提取、YARA 扫描、休眠后门检测、自适应疫苗生成、自主漏洞搜寻 |
| 漏洞研究 | 危险 API 检测、ROP gadget 发现、堆利用分析、崩溃分类、PoC 生成 |
| 数字取证 | 内存取证(Volatility3)、PCAP 分析(Scapy)、磁盘取证(Sleuth Kit)、工件关联 |
| 源代码审计 | Python AST 扫描、C/C++ 正则模式扫描 |
| 报告 | 基于会话的报告(含 MITRE ATT&CK 映射)、SIGMA 规则生成、VEX 报告、邮件发送 |
架构
AI Client (Claude / Cursor / any MCP-compatible client)
│ MCP Protocol (stdio or HTTP/SSE)
▼
┌──────────────────────────────────────────────────────┐
│ FastMCP 3.4.4 Server │
│ 177 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) │
└──────────────────────────────────────────────────────┘
该服务支持 Python 3.10–3.12。可选的 angr 符号执行引擎会安装在 Python 3.12 及更高版本中,因为这些版本有安全且兼容的发行版;Python 3.10 和 3.11 的安装不会包含 angr。
核心基础设施(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 架构/位数/寄存器) |
result_cache.py | 基于 SHA256 的工具结果缓存装饰器(@cache_tool_result) |
analysis_cache.py | 多层反编译缓存(L1:Redis,L2:SQLite) |
result.py | ToolSuccess / ToolError Pydantic 模型 |
exceptions.py | 17 个带有 RCMCP-E* 错误代码的异常类 |
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 规则加载与管理 |
工具目录(177 个工具)
每个工具都会返回结构化的 ToolResult——包含类型化 data 的 ToolSuccess,或带有 RCMCP-E* 错误代码的 ToolError。工具划分为 11 个领域插件,分布在 5 种模块化执行配置中(full、static、malware、forensics、vuln-research):
| 配置 | 已注册工具数 | 架构大小 | 相较于 Full 的 LLM 上下文节省量 | 推荐领域 |
|---|---|---|---|---|
full | 153 | 116.8 KB | 基线(0%) | 完整的企业级逆向工程套件 |
vuln-research | 105 | 73.3 KB | -37.2%(约 10,800 个 token) | 模糊测试、ASan 崩溃分类、CVE 挖掘、漏洞利用研究 |
static | 99 | 67.7 KB | -42.0%(约 12,200 个 token) | 反汇编、反编译(r2ghidra)、LIEF、静态分类 |
malware | 67 | 62.8 KB | -46.2%(约 13,500 个 token) | 威胁分类、YARA 扫描、反混淆、反分析 |
forensics | 57 | 37.0 KB | -68.4%(约 19,500 个 token) | 内存取证(Volatility3)、网络 PCAP(Scapy)、磁盘 |
🔍 静态分析插件(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 | 对比两个文件版本之间的二进制语义差异 |
| 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 工具都使用线程安全的连接池(r2_pool.py),自动管理 r2pipe 会话。
| # | 工具 | 描述 |
|---|---|---|
| 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 | 获取二进制文件元数据(架构、格式、字节序) |
| 61 | Radare2_execute_command | 执行原始 Radare2 命令 |
| 62 | Radare2_esil_emulate | 在指定地址进行 ESIL 仿真 |
| 63 | Radare2_get_hexdump | 获取虚拟地址处的十六进制转储 |
| 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 盒等) |
| 74 | Radare2_find_gadgets | 查找 ROP/JOP gadget |
| 75 | Radare2_calculate_entropy | 计算各节的熵值 |
🦠 恶意软件分析插件(9 个工具)
| # | 工具 | 后端 | 描述 |
|---|---|---|---|
| 76 | dormant_detector | Radare2 + 启发式分析 | 查找隐藏后门、孤立函数、定时炸弹和逻辑炸弹 |
| 77 | adaptive_vaccine | YARA + Radare2 | 生成检测用 YARA 规则和用于消除威胁的二进制补丁 |
| 78 | vulnerability_hunter | Radare2 + 分析 | 检测危险的 API 模式(strcpy、sprintf)和 ROP gadget 链 |
| 79 | extract_iocs | 正则表达式 + 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、double-free、溢出) |
🕵️ 数字取证插件(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 | Custom parsers | 收集浏览器历史记录、注册表配置单元、事件日志和预取文件 |
| 103 | artifact_correlate_ioc | Custom parsers | 将工件与已知 IOC 关联 |
| 104 | artifact_generate_yara | YARA | 根据工件模式生成 YARA 规则 |
| 105 | artifact_timeline | Custom parsers | 根据多个工件来源构建时间线 |
| 106 | artifact_report | Custom parsers | 生成工件分析报告 |
📝 报告生成插件(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 | 添加分类备注(发现、警告、行为) |
| 116 | add_mitre_technique | 记录 MITRE ATT&CK 技术 ID |
| 117 | set_severity | 设置会话严重级别(低/中/高/严重) |
| 118 | create_analysis_report | 以 4 种模式呈现报告:full_analysis、quick_triage、ioc_summary、executive_brief |
| 119 | generate_vex_report | 生成 VEX(漏洞可利用性交换)报告 |
| 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 设定一个结构化的分析角色。其中包含思维链推理检查点(AI 必须暂停并评估后才能继续),以及证据分类规则,防止 AI 将猜测陈述为事实。每项发现都必须标记为
OBSERVED(已直接验证)、INFERRED(通过静态分析逻辑推导得出)或POSSIBLE(需要进一步验证)。
MCP 资源(11 个 URI)
资源是只读数据端点,AI 客户端可通过 URI 模板访问。资源通过提供结构化数据来补充工具,无需显式调用工具。
静态资源
| URI | 描述 |
|---|---|
reversecore://guide | 工具使用指南,包含文件路径规则和最佳实践 |
reversecore://guide/structures | 结构恢复和交叉引用分析技术指南 |
reversecore://tools | 全部 177 个已注册工具的完整文档 |
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(最简单)
pip install reversecore-mcp
reversecore-mcp
先决条件: 系统上必须已安装 Radare2(
r2 --version)。YARA 会通过yara-python自动安装。
选项 2 — Docker(推荐,可获得完整功能)
所有分析引擎(Radare2、r2ghidra、YARA、Binwalk、Sleuth Kit、GDB 等)均已预装:
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)
git clone https://github.com/sjkim1127/Reversecore_MCP.git
cd Reversecore_MCP
./scripts/run-docker.sh # auto-detects Intel / Apple Silicon
或者手动操作:
docker compose --profile x86 up -d # Intel/AMD
docker compose --profile arm64 up -d # Apple Silicon (M1/M2/M3)
选项 4 — Python(本地开发)
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。
连接到 AI 客户端
将服务配置添加到 IDE 客户端设置中(例如,~/.cursor/mcp.json 或 claude_desktop_config.json)。
⚡ 选项 1:Docker Exec 模式(推荐)
如果你通过 Docker Compose 运行了容器,此模式会将 stdio 直接传入正在运行的容器。启动延迟为零、内存持久保留,且可使用所有工具。
{
"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 模式
用于基于网络的流式传输(服务器发送事件):
{
"mcpServers": {
"Reversecore_MCP": {
"url": "http://localhost:8000/mcp/sse"
}
}
}
📦 选项 3:Stdio 模式(按需启动 Docker)
每个会话都会启动一个全新且隔离的容器:
🍎 macOS
{
"mcpServers": {
"reversecore": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "/Users/YOUR_USERNAME/samples:/app/workspace",
"-e", "REVERSECORE_WORKSPACE=/app/workspace",
"-e", "MCP_TRANSPORT=stdio",
"ghcr.io/sjkim1127/reversecore_mcp:latest"
]
}
}
}
🐧 Linux
{
"mcpServers": {
"reversecore": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "/home/YOUR_USERNAME/samples:/app/workspace",
"-e", "REVERSECORE_WORKSPACE=/app/workspace",
"-e", "MCP_TRANSPORT=stdio",
"ghcr.io/sjkim1127/reversecore_mcp:latest"
]
}
}
}
🪟 Windows
{
"mcpServers": {
"reversecore": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "C:/samples:/app/workspace",
"-e", "REVERSECORE_WORKSPACE=/app/workspace",
"-e", "MCP_TRANSPORT=stdio",
"ghcr.io/sjkim1127/reversecore_mcp:latest"
]
}
}
}
⚠️ 重要 — Docker 内的文件路径
你的本地文件夹会挂载到容器内的
/app/workspace。 请始终仅使用文件名引用文件,不要使用本地完整路径。
❌ 错误 ✅ 正确 r2_decompile("/Users/john/samples/mal.exe")r2_decompile("mal.exe")
配置
所有设置都可以通过环境变量或 .env 文件提供(参见 .env.example)。设置通过带有 REVERSECORE_ 前缀的 Pydantic BaseSettings 管理。
核心设置
| 变量 | 默认值 | 描述 |
|---|---|---|
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 | 工具的最大输出大小(字节) |
REVERSECORE_FORENSICS_MAX_RECOVERED_BYTES | 500000000 | 从单个磁盘 inode 恢复的最大字节数 |
HTTP 模式设置
| 变量 | 默认值 | 说明 |
|---|---|---|
MCP_HOST | 0.0.0.0 | 要绑定的主机接口(如果没有 API 密钥,则自动覆盖为 127.0.0.1) |
MCP_PORT | 8000 | HTTP 服务端口 |
MCP_API_KEY | (unset) | HTTP 身份验证用的 API 密钥(X-API-Key 或 Authorization: Bearer) |
REVERSECORE_RATE_LIMIT | 60 | 每分钟最大请求数(仅限 HTTP 模式,通过 slowapi 实现) |
MAX_UPLOAD_SIZE | 100000000 | 最大上传大小(默认 100 MB) |
FILE_RETENTION_MINUTES | 1440 | 上传文件的保留时间(默认 24 小时) |
Radare2 设置
| 变量 | 默认值 | 说明 |
|---|---|---|
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(结构化) |
插件与 SAST
| 变量 | 默认值 | 说明 |
|---|---|---|
REVERSECORE_PLUGIN_DIRS | "" | 以逗号分隔的目录列表,用于扫描扩展插件 |
REVERSECORE_SAST_RULES_PATH | "" | 自定义 YAML SAST 规则文件的路径 |
安全模型
安全性通过纵深防御实现,在多个层面提供保护:
输入与路径安全
| 控制措施 | 实现方式 |
|---|---|
| 无 shell 注入 | 所有子进程调用均使用列表参数,绝不使用 shell 字符串(execution.py) |
| 路径遍历防护 | validate_file_path() 和 validate_binary_path() 会解析符号链接,并将访问限制在工作区内(validators.py) |
| TOCTOU 缓解 | bypass_cache=True 标志会重新验证路径,以防止竞态条件 |
| 输入清理 | 执行前会清理所有参数(security.py) |
| CSRF 防护 | 仪表板表单需要基于令牌的 CSRF 验证(dashboard/__init__.py) |
网络与身份验证
| 控制措施 | 实现方式 |
|---|---|
| 防计时攻击身份验证 | 使用 secrets.compare_digest() 比较 API 密钥(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) |
容器与运行时
| 控制措施 | 实现方式 |
|---|---|
| 以非 root 用户运行 | 以 appuser(UID 1000)身份运行,并使用最低限度的功能权限 |
| 资源限制 | Docker Compose 限制 CPU(2.0)和内存(4 GB) |
| 沙箱隔离 | 为动态分析工具提供可选的基于容器的沙箱 |
CI/CD 安全关卡
| 控制措施 | 实现方式 |
|---|---|
| 密钥扫描 | 每次提交时运行 Gitleaks(pre-commit 钩子 + CI) |
| SAST | 每次提交时使用 Bandit 扫描所有 Python 代码 |
| CodeQL | 每次推送到 main 时运行 GitHub CodeQL 静态分析 |
| 依赖项审计 | 每次推送时运行 pip-audit,不存在未经审查的 CVE |
| 容器扫描 | 使用 Trivy 扫描 Docker 镜像中的漏洞(从 LOW 到 CRITICAL) |
| 漏洞利用安全关卡 | 使用 Bandit 扫描 POC 模板;通过 Hypothesis 进行 DAST 模糊测试;验证容器隔离 |
结构化错误处理
全部 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
测试
# 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
测试状态:
- ✅ 1,957 个单元测试已通过,覆盖 Python 3.10 / 3.11 / 3.12
- 📊 87% 代码覆盖率(CI 强制要求最低 80%)
- 🔒 Bandit 零发现项
- ⚡ 通过
pytest-asyncio实现完全异步的测试套件
测试标记:
| 标记 | 用途 |
|---|---|
@pytest.mark.unit | 快速单元测试 |
@pytest.mark.integration | 需要 Docker 或外部工具的测试 |
@pytest.mark.slow | 耗时较长的测试 |
@pytest.mark.benchmark | 性能基准测试 |
@pytest.mark.security | 安全边界验证测试 |
代码质量
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 钩子
每次提交时都会自动运行以下钩子:
- Ruff — lint 并自动修复,同时检查格式
- trailing-whitespace — 删除行尾空格
- end-of-file-fixer — 确保文件以换行符结尾
- check-yaml / check-json — 验证 YAML/JSON 语法
- check-added-large-files — 阻止大小超过 1 MB 的文件
- check-merge-conflict — 检测未解决的合并标记
- detect-private-key — 防止意外提交密钥
- 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 构建架构
Docker 构建采用双层方案,以控制构建耗时:
第 1 层:基础镜像(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 秒。
Docker Compose
包含 3 个服务,并使用特定架构的配置文件:
| 服务 | 配置文件 | 描述 |
|---|---|---|
reversecore-mcp | default, x86 | Intel/AMD x86_64 |
reversecore-mcp-arm64 | arm64, macos | Apple Silicon ARM64 |
redis | 所有配置文件 | 用于任务队列和缓存的 Redis 7 Alpine |
资源限制:每个容器使用 2.0 个 CPU 核心、4 GB 内存。
系统要求
| 组件 | 最低要求 | 推荐配置 |
|---|---|---|
| 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 |
项目结构
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 (177 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,并携带结构化错误代码:
| 异常 | 代码 | 类型 | 触发条件 |
|---|---|---|---|
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 | 检测到路径遍历尝试 |
AI 客户端可以使用 error_code 字段以编程方式处理失败,并决定是重试、尝试其他工具,还是向用户报告错误。
添加新工具
按照以下模式添加新的 MCP 工具:
# reversecore_mcp/tools/analysis/my_tool.py
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/ 中添加测试。
贡献
- Fork 此仓库
- 创建功能分支:
git checkout -b feat/my-feature - 随代码编写测试——覆盖率不得低于 80%
- 确保所有检查均通过:
pytest、ruff check、mypy、bandit - 提交清晰描述变更内容的拉取请求
请阅读贡献指南,了解代码规范、文档字符串约定(Google 风格)以及拉取请求检查清单。
文档
| 文档 | 描述 |
|---|---|
| 安装指南 | 适用于所有环境的详细设置说明 |
| 架构指南 | 系统设计和组件详情 |
| 贡献指南 | 代码规范、文档字符串、PR 工作流 |
| 测试指南 | 测试模式、固件和覆盖率 |
| API 参考 | 工具和模块参考 |
| 用户指南 | 分析工作流 |
使用示例
示例 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..."
示例 2:使用污点分析进行漏洞研究
User: "Find exploitable bugs in this network daemon"
AI activates: taint_analysis_mode
AI calls:
1. 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]
2. vulnerability_hunter("daemon")
→ 12 dangerous API calls, 4 exploitable patterns
3. 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
示例 4:用于 1-day 研究的补丁差异分析
User: "Compare the patched and unpatched versions to find what was fixed"
AI activates: patch_diff_auto_mode
AI calls:
1. diff_binaries("libfoo-1.0.so", "libfoo-1.1.so")
→ 3 functions changed, 1 new function
2. patch_diff_1day("libfoo-1.0.so", "libfoo-1.1.so")
→ Automated analysis: bounds check added at parse_header()
3. r2_decompile("libfoo-1.0.so", "parse_header")
→ Decompiled vulnerable version (no bounds check)
4. 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 架构 | 位宽 | 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_64aarch64→arm64arm搭配bits=64→arm64arm搭配bits=16或bits=32→arm32
Radare2_esil_emulate、assemble_instructions 和 r2_simulate_patch 等工具会使用此注册表,为任何目标二进制文件正确配置分析环境。
结果缓存系统
两层缓存可尽量减少重复计算:
工具结果缓存(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)
专为反编译结果(计算开销较大)设计的多级缓存:
| 级别 | 后端 | 键格式 | TTL | 用途 |
|---|---|---|---|---|
| L1 | Redis | ghidra:decompile:{file_hash}:{function_address}:{decompiler} | 1 小时(3600s) | 快速缓存,可跨会话共享 |
| L2 | SQLite | 表 decompilation_cache | 持久 | Redis 重启后仍可保留 |
导入/导出:export_analysis_cache 和 import_analysis_cache 工具可将缓存状态保存到 rcpack 文件或从中导入,以便在不同环境之间共享。
AI 记忆系统
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"])
# Later, in a different session:
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
**存储:**使用异步 SQLite 数据库,路径由 MEMORY_DB_PATH 配置(默认值:~/.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=<strong-random-key> |
| 使用非 root 用户 | 内置配置:容器以 appuser(UID 1000)身份运行 |
| 设置资源限制 | 默认值:docker-compose.yml 中为 2 CPU / 4 GB RAM |
| 启用结构化日志 | 使用 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 健康检查端点:
# 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 镜像内置了 HEALTHCHECK 指令,每隔 30 秒检查一次与端口 8000 的 TCP 连接。Docker 和 Kubernetes 会自动重启状态不健康的容器。
故障排除
常见问题
工具返回 RCMCP-E003:未找到工具
环境中未安装所需的 CLI 工具。
**解决方法:**如果使用 Docker,请确认基础镜像中包含该工具:
docker exec reversecore-mcp-arm64 which r2 yara binwalk tsk_recover gdb
如果使用本地 Python 安装,请安装缺失的工具:
# macOS
brew install radare2 yara binwalk sleuthkit
# Ubuntu/Debian
apt install radare2 yara binwalk sleuthkit
超时错误(RCMCP-E002 / RCMCP-E200)
分析超出了配置的超时时间。
**解决方法:**增加超时时间:
export REVERSECORE_DEFAULT_TOOL_TIMEOUT=300 # 5 minutes
对于大型二进制文件(>100 MB),可以考虑使用快速扫描变体:
- 使用
run_capa_quick代替run_capa - 使用
detect_packer代替detect_packer_deep
路径遍历错误(RCMCP-E302)
你引用了工作区目录之外的文件。
**解决方法:**先将文件复制到工作区:
copy_to_workspace("/path/to/file.exe")
或者以只读方式挂载其他目录:
export REVERSECORE_READ_DIRS=/opt/samples,/mnt/evidence
Docker 容器无法在 Apple Silicon 上启动
请确保使用 ARM64 配置:
docker compose --profile arm64 up -d
或者使用自动检测脚本:
./scripts/run-docker.sh
Redis 连接被拒绝
任务队列需要运行中的 Redis 实例。
**解决方法:**与主服务一同启动 Redis:
docker compose --profile arm64 up -d # Starts both reversecore and redis
或者不设置 REDIS_URL,以禁用依赖 Redis 的功能。
r2ghidra 反编译产生空输出
这通常表示尚未先分析该函数。
**解决方法:**先运行分析,再进行反编译:
Radare2_analyze_binary("sample.exe")
Radare2_decompile_function("sample.exe", "main")
常见问题
这会取代 Ghidra 或 IDA Pro 吗?
不会。本项目是补充,而非替代。它使用 r2ghidra(嵌入 Radare2 的 Ghidra 反编译引擎)进行反编译。它不提供 GUI,也不具备完整反汇编器的交互式分析工作流。本项目旨在让 AI 助手以编程方式执行分析任务。
是否需要单独安装 Ghidra 或 JDK?
不需要。r2ghidra 插件将 Ghidra 反编译引擎直接嵌入 Radare2。无需 JDK,无需安装 Ghidra,也无需 Ghidra 项目文件。只需使用编译了 r2ghidra 插件的 r2 即可。
支持哪些 MCP 客户端?
任何实现了 Model Context Protocol 规范的客户端。已测试:Claude Desktop、Cursor、Windsurf 和 Google Antigravity。该服务支持 stdio 和 HTTP/SSE 传输。
我可以在 Linux/macOS 上分析 Windows PE 文件吗?
可以。静态分析(反汇编、反编译、字符串提取、IOC 提取、YARA 扫描)适用于任何文件格式,不受主机操作系统影响。动态分析(仿真、模糊测试)可能会受到目标架构的限制。
使用此工具分析恶意软件有多安全?
Docker 容器提供隔离环境:非 root 用户、CI 中默认禁用网络、资源限制。对于实时恶意软件分析,我们建议在专用 VM 中运行,或使用沙箱功能(REVERSECORE_SANDBOX_ENABLED=true)。静态分析工具(r2、YARA、strings)绝不会执行目标二进制文件。
文件大小上限是多少?
默认限制:
- 上传:100 MB(
MAX_UPLOAD_SIZE) - LIEF 解析:1 GB(
REVERSECORE_LIEF_MAX_FILE_SIZE) - 工具输出:10 MB(
REVERSECORE_MAX_OUTPUT_SIZE)
所有限制都可通过环境变量配置。
致谢
本项目基于众多开源项目的成果构建:
| 项目 | 在 Reversecore MCP 中的作用 |
|---|---|
| Radare2 | 反汇编、仿真、二进制分析 |
| r2ghidra | Radare2 的 Ghidra 反编译引擎 |
| FastMCP | MCP 服务框架 |
| YARA | 用于恶意软件检测的模式匹配 |
| LIEF | 二进制格式解析(PE、ELF、Mach-O) |
| CAPA | Mandiant FLARE 能力检测 |
| angr | 符号执行引擎 |
| Capstone | 反汇编框架 |
| Keystone | 汇编框架 |
| pwntools | 漏洞利用开发工具包 |
| ROPgadget | ROP gadget 查找工具 |
| Volatility3 | 内存取证框架 |
| Scapy | 网络数据包分析 |
| Sleuth Kit | 磁盘取证工具包 |
| Binwalk | 固件分析 |
| Detect It Easy | 加壳器/编译器检测 |
许可证
MIT — 详情请参见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。