angr mcp mcp服务器
此项目实现了一个模型上下文协议(MCP)服务器,该服务器公开 核心angr二进制分析功能——加载二进制文件、构造符号 状态、指导执行和收获利用工件——通过一组 工具操作员。最初的重点是快速漏洞探索:分析师 可以加载目标,使其输入符号化,推动执行朝着有趣的方向发展 地址,并在感兴趣的路径出现后提取具体的见证输入 发现。
当前组件
angr_mcp/registry.py-内存注册表跟踪angr项目、状态、,
仿真管理器、钩子、缓存分析、警报日志和持久作业 元数据。
angr_mcp/server.py–MCP服务器入口点。它实现了以下处理程序
项目加载、符号状态创建、环境检测 (钩子和SimProcedures)、符号执行、断点风格监控、, 状态检查、结构化警报报告、作业持久性/管理, 约束求解、CFG恢复和反向切片。它还集成了 社区探索技术运来 awesome-angr/ExplorationTechniques.
angr_mcp/utils/–二进制检查和状态突变助手由共享
MCP处理程序和测试(部分扫描器、文字交叉引用、, 寄存器/堆栈变异原语和符号句柄注册)。
tests/test_mcp_server.py–编译小型C二进制文件的集成测试
并对服务器进行端到端的操作(加载项目、设置符号stdin、运行 有针对性的搜索、解决约束、捕获监视的事件并执行 CFG/切片查询)。
tests/test_phase1_ctf.py–重建CTF的第一阶段回归套件
级别00-04仅通过MCP处理程序,断言谓词元数据, 注册/堆栈变异API以及恢复输入的本地重放。
tests/test_deep_call_partition.py–深度调用回归,构建一个
分支二进制文件,提取调用链,执行州预算保护,以及 演示了分块符号执行到达隐藏的目标函数。
tests/test_taint_analysis.py–格式化字符串污染回归
练习指针感知污染源,并验证通过以下方式触发的接收器 新的污染分析MCP处理程序。
pyproject.toml–最小配置启用uv管理本地
虚拟环境。
schemas/–JSON模式草案2020-12为每个MCP处理程序定义
请求/响应对加上共享结构(警报、作业、UUID)。
环境设置
- 使用创建和激活虚拟环境
uv:
UV_CACHE_DIR=.uv-cache uv venv .venv
source .venv/bin/activate- 将依赖项安装到环境中(angr和clairy从
PyPI):
UV_CACHE_DIR=.uv-cache uv pip install --python .venv/bin/python claripy angr- 运行集成测试:
.venv/bin/python -m unittest discover tests第1阶段测试练习32位angr CTF二进制文件。如果你的主人缺少 32位运行库(/lib/ld-linux.so.2),套房将跳过 本机自动重放断言。
使用概述
实例化 AngrMCPServer 并以编程方式或通过您的 MCP传输:
load_project–加载二进制文件并接收project_id.setup_symbolic_context–创建条目/调用/空白/完整初始化状态
可选的符号stdin/memory/寄存器(状态ID在 注册表)。
instrument_environment–在上安装SimProcedures或自定义挂钩
执行前的地址/符号。
run_symbolic_search–步进或探索状态,可选附加
覆盖、循环耗尽等探索技术。处理程序 为每个存储返回新的状态ID,发出结构化警报记录,以及 注册/更新稍后可以恢复的作业句柄。使用可选 state_budget 参数检测和短路状态爆炸;这 run-metadata报告每个存储的计数,以便客户端可以调整块大小。
run_taint_analysis–根据记录驾驶供应商提供的污染发动机
国家。定义污点 *来源* (内存/寄存器或指针感知监视器), 指定 *水槽* 在目标基本块地址处,并接收结构化命中 当污染到达接收器时,记录加上状态快照。
monitor_for_vulns–记录检查断点(例如。,mem_write)
因此,会记录与漏洞利用相关的操作(警报与原始操作一起累积 事件日志)。
inspect_state–获取寄存器、内存、约束集、记录
事件,并为任何存储状态生成警报。
solve_constraints–向Claripy查询具体输入/范围
当前的限制。
list_jobs,resume_job,以及delete_job–管理持续模拟
作业(列出元数据、水合回内存或从注册表/磁盘中删除)。
analyze_call_chain–计算函数之间的调用图路径太深
目标可以分解为可管理的勘探阶段。
trace_dataflow–运行反向切片(可选使用DDG/CDG)以暴露
对所选目标很重要的依赖关系。
现状(2025年10月29日)
- 核心MCP管道已到位,具有注册表支持的状态跟踪和
弹性执行(捕获错误并将其返回给客户端)。
- 结构化警报现在突出显示不受约束的指令指针状态
以及可疑的内存写入,在运行时返回规范化的JSON对象 结果和状态检查有效载荷。
setup_symbolic_context以及新mutate_state处理程序支持选项
预设、寄存器复制/注入、堆栈调整和符号句柄 用于后续约束求解的跟踪。
- 谓词描述符(
address,stdout_contains,stdout_not_contains)
现在开车 run_symbolic_search,谓词匹配记录在 将payload与base64编码的stdin/stdout流一起运行。
analyze_call_chain恢复函数之间的调用图路径(使用
缓存CFG),因此可以将深层目标分块为可控的勘探 部分。
run_symbolic_search接受astate_budget上限和详细报告
当接近或超过极限时,状态压力遥测,允许 前端在求解器爆炸之前缩小搜索窗口。
- 新的
run_taint_analysis处理程序将angr污染引擎包装为
指针感知污染源和接收器级别污染检查,返回结构化 点击元数据和新的状态快照以进行下游分析。
- 辅助工具
angr_mcp/utils/暴露剖面扫描仪和文字
用于自动化抗CTF水平分析的交叉引用。
- 通过以下方式创造就业机会
run_symbolic_search可以恢复、枚举和
坚持到 .mcp_jobs/.json;持续的工作可以重新补充水分 跨流程通过 resume_job.
- JSON模式
schemas/描述每个处理程序请求/响应,启用
下游客户端(例如GhidraMCP)验证有效载荷。
- 基本勘探技术
awesome-angr捆剩余
可动态加载。
- 符号stdin设置初始化默认值
SimPacketsStream内容
以避免与angr的POSIX插件的兼容性问题。
- 集成测试端到端验证面向漏洞利用的工作流(需要
安装 claripy 和 angr 通过 uv pip).补充第1阶段CTF 测试断言00-04级别的确定性解决方案 tests/test_phase1_ctf.py深度通话回归 (tests/test_deep_call_partition.py)强调呼叫链处理程序, 国家预算反馈,以及非常深入所需的分块符号执行 目标。新的污点回归(tests/test_taint_analysis.py)证明了这一点 来自符号性stdin的污染可以追踪到易受攻击的 printf 电话。
第一阶段angr_ctf报道亮点
- 00/01级:
.rodata令牌提取和文字交叉引用提要
证明具体解决方案并确保避免站点的谓词描述符 保持不变。
- 级别02:纯基于stdout的谓词演示谓词日志记录,
元数据持久性和用于repro的流式stdout捕获。
- 级别03:空白状态创建、符号寄存器注入和求解器
handle查询恢复本机回放的整数元组。
- 级别04:堆栈对齐助手和符号推送操作反映了
本机堆栈帧,不触发警报检测器,验证堆栈 通过处理程序管道实现完整性。
计划的下一步
- 扩展警报覆盖范围以包括额外的漏洞利用启发式(例如。,
无约束堆栈枢轴、自修改代码)和可配置阈值。
- 添加后台作业执行和进度轮询,以便长时间运行搜索
可以在客户端通过作业元数据轮询时异步继续。
- 直接从类型注释生成JSON模式,以避免漂移和
在以下情况下将模式验证集成到测试套件中 jsonschema 是 可用。
- 通过以下方式显示更丰富的元数据(例如钩子注册表、缓存分析)
专用查询端点以辅助前端。
代理人和人类的贡献笔记
- 使用
uv用于包装管理;保持.venv环境与同步
README 说明。
- 保留文档(此文件和
AGENTS.md)随着每次更改而更新,因此
未来的课程将了解当前的上下文、约束和未解决的问题。
- 更喜欢
apply_patch用于手动编辑。避免使用破坏性的git命令,除非
明确批准。
