article
README
🚀 AFL++ MCP 服务器
AFL++ 的模型上下文协议(MCP)服务器。
本仓库包含一个 AFLplusplus 的检出副本(如果需要 AFL++ 可选模式子模块,请使用 git submodule update --init --recursive),并为以下操作提供了便于代理使用的 API:
- 创建模糊测试工作区
- 对目标进行插桩
- 语料库导入/最小化
- 测试 harness 预检(试运行 / 显示映射)
- 启动/停止 AFL++ 作业
- 轮询结构化状态并对发现的问题进行分类
- 其他操作
📦 安装指南
构建
npm install
npm run build
在 Codex CLI 中安装
先进行构建,然后将 MCP 服务器注册到 Codex CLI 中:
codex mcp add aflpp --env AFLPP_MCP_ROOT="$PWD" -- node "$PWD/dist/index.js"
通过标准输入输出运行
node dist/index.js
环境变量
AFLPP_MCP_ROOT(默认值:当前工作目录)AFLPP_DIR(默认值:$AFLPP_MCP_ROOT/AFLplusplus) – 必须位于AFLPP_MCP_ROOT内部
其他 MCP 客户端配置
Claude Desktop
添加到你的 mcpServers 配置中(调整路径):
{
"mcpServers": {
"aflpp": {
"command": "node",
"args": ["/home/kevinv/aflpp-mcp/dist/index.js"],
"env": {
"AFLPP_MCP_ROOT": "/home/kevinv/aflpp-mcp"
}
}
}
}
💻 使用示例
MCP 提示
aflpp-agent-workflow:高级端到端工作流(构建 -> 语料库 -> 预检 -> 模糊测试 -> 分类)。aflpp-harness-workplan:以 harness 为先的工作流(用法 ->LLVMFuzzerTestOneInputharness -> 初始语料库 -> CMPLOG/ASAN/普通构建 -> 启动命令)。
MCP 资源
aflpp://config:服务器配置(工作区根目录、限制、允许列表)。aflpp://docs/quickstart:一些工作流说明。aflpp://docs/fuzzing_in_depth:AFL++ 的fuzzing_in_depth.mdaflpp://docs/cmplog:AFL++ 的instrumentation/README.cmplog.mdaflpp://docs/env_variables:AFL++ 的docs/env_variables.mdaflpp://workspace/{name}/tree:高级工作区树aflpp://job/{job_name}/latest_status:作业的最新解析状态快照aflpp://campaign/{campaign_name}/latest_status:活动的最新解析状态快照
MCP 工具
- aflpp.list_tools:列出 AFL++ MCP 工具及其简短描述。
- aflpp.help:获取工具的详细帮助(模式 + 描述)。
- aflpp.version:获取 AFL++ 和服务器的版本信息。
- aflpp.init_workspace:在
workspaces/<name>下创建一个工作区,包含用于输入、输出、目标、日志、重现和报告的标准子目录。 - aflpp.detect_build_system:检测项目路径可能使用的构建系统(启发式方法)。
- aflpp.build_instrumented:使用 AFL++ 编译器包装器(以及可选的 sanitizer 配置文件 + 构建时旋钮)构建目标,并将工件存储在工作区的
targets/目录下。 - aflpp.build_cmplog_variant:构建一个 CMPLOG 插桩的变体(AFL_LLVM_CMPLOG=1),并将工件存储在工作区的
targets/目录下。 - aflpp.import_corpus:从文件或目录导入种子语料库到
workspaces/<ws>/in/<corpus_name>。 - aflpp.list_corpus:总结语料库目录(文件数量和总大小)。
- aflpp.list_builtin_dictionaries:列出
AFLplusplus/dictionaries中附带的 AFL++ 内置字典。 - aflpp.attach_dictionary:将字典文件附加到作业名称(存储为作业配置,供
aflpp.start_fuzz使用)。 - aflpp.dry_run:直接针对目标运行简短的 harness 验证(不是
afl-fuzz),以检查输入模式、稳定性、超时和基本性能。 - aflpp.showmap:对单个测试用例运行
afl-showmap并返回跟踪摘要。 - aflpp.coverage_summary:使用
afl-showmap -C在 AFL++ 输出目录上测量语料库覆盖率(尽力解析)。 - aflpp.analyze_testcase:在测试用例上运行
afl-analyze以识别关键输入区域。 - aflpp.preflight_checks:在启动
afl-fuzz之前运行轻量级预检检查(核心模式、CPU 缩放、语料库非空)。 - aflpp.start_fuzz:在工作区中启动一个
afl-fuzz作业(非阻塞;支持常见的 afl-fuzz 旋钮 + 允许列表中的环境覆盖)。 - aflpp.start_fuzz_cluster:启动一个多实例
afl-fuzz活动(主实例 + 辅助实例;支持每个实例的覆盖)。 - aflpp.stop_fuzz:通过 PID 停止正在运行的
afl-fuzz作业(先发送 SIGTERM 信号,再发送 SIGKILL 信号)。 - aflpp.status:通过解析
fuzzer_stats以及队列/崩溃/挂起计数(与上次调用的差值)获取作业状态。 - aflpp.campaign_summary:通过解析每个实例目录的
fuzzer_stats总结多实例活动。 - aflpp.whatsup:在 AFL++ 输出目录上运行
afl-whatsup。 - aflpp.generate_progress_plot:为作业或活动生成 AFL++ 进度图(包装
afl-plot)。 - aflpp.list_findings:列出具有稳定 ID 和路径的崩溃和挂起发现。
- aflpp.repro_crash:通过直接使用测试用例运行目标命令来重现发现的问题,并在
repros/下写入重现包。 - aflpp.crash_report:为发现的问题编写崩溃报告(去重签名 + 重现信息 + 如果存在则包含 sanitizer 帧)。
- aflpp.casr_report:使用
casr-afl生成聚类崩溃报告(如果已安装)。 - aflpp.minimize_corpus:使用
afl-cmin最小化语料库,并将其存储为工作区中的新语料库目录。 - aflpp.minimize_testcase:使用
afl-tmin最小化单个测试用例,并将最小化后的测试用例存储在repros/下。 - aflpp.suggest_fuzz_cluster_mix:为
aflpp.start_fuzz_cluster建议多核活动组合(instance_overrides)。
微信扫一扫