反检测浏览器 MCP Server | 35 个 JS 逆向工具 + C++ 引擎层 JSVMP 指纹追踪
反检测浏览器 MCP Server | 35 个 JS 逆向工具 + C++ 引擎层 JSVMP 指纹追踪
基于反指纹浏览器的 MCP Server,专为 JavaScript 逆向工程设计。
一个 MCP(Model Context Protocol)服务器,让 AI 编码助手(Claude Code、Cursor、Cline 等)能够通过 Camoufox 反指纹浏览器对目标网站进行:接口参数分析、JS 文件静态分析、动态断点调试、函数 Hook 追踪、网络流量拦截、JSVMP 字节码分析、Cookie/存储管理等逆向操作。
| 能力 | 实现与边界 |
|---|---|
| 浏览器 | Firefox / Camoufox |
| 运行时分析 | 显式执行世界、Frame、Hook 与网络捕获 |
| JSVMP 调查 | 运行时探针与源码插桩,按具体目标验证 |
| 持久 Hook | Context 初始化,明确 pending 与卸载边界 |
核心优势:
Object.defineProperty 防覆盖保护;锁定属性可能需要重建 Context 才能恢复evaluate_js(result_format="json_ascii");低副作用函数日志可选 hook_function(serialization="preview"),同步异常有明确记录。compare_network_requests、save_response_body,保留原始请求语义并明确哈希/字节口径。list_network_requests(limit=100, after_id=0) 增量读取;export_network_capture 导出有版本号的 JSON,默认掩码,保留旧调用方式。verify_signer_offline(..., runtime="node") 可不启动浏览器验证独立签名函数;默认 browser 路径不变,无有效期望值的样本不会再误通过。详细行为、限制与示例见 通用采集契约 和 v1.6.0 版本说明。
在你的 AI 编码工具(Cursor / Claude Code / Codex 等)的对话框中输入:
帮我安装下这个mcp工具:camoufox-reverse-mcp
项目地址:https://github.com/WhiteNightShadow/camoufox-reverse-mcp
AI 会自动完成克隆、安装依赖、配置 MCP Server 的全部流程。
git clone https://github.com/WhiteNightShadow/camoufox-reverse-mcp.git
cd camoufox-reverse-mcp
pip install -e .
v1.1.0 将 MCP Python SDK 固定在兼容的 v1 系列,并自动规范化可选参数 schema,可兼容 Moonshot/Kimi 等要求每个工具参数都包含
type的严格服务。
Cursor(.cursor/mcp.json)
{
"mcpServers": {
"camoufox-reverse": {
"command": "python",
"args": ["-m", "camoufox_reverse_mcp"]
}
}
}
Claude Code
{
"mcpServers": {
"camoufox-reverse": {
"command": "python",
"args": ["-m", "camoufox_reverse_mcp", "--headless"]
}
}
}
Claude Code(带代理)
{
"mcpServers": {
"camoufox-reverse": {
"command": "python",
"args": [
"-m", "camoufox_reverse_mcp",
"--proxy", "http://127.0.0.1:7890",
"--geoip",
"--humanize"
]
}
}
}
| 工具 | 说明 |
|---|---|
launch_browser |
启动 Camoufox;可用 browser_version 单次选择已安装版本,不修改 active 配置 |
close_browser |
关闭浏览器,释放资源 |
navigate |
导航到指定 URL(支持 pre_inject_hooks、redirect_chain 追踪) |
reload |
刷新页面 |
take_screenshot |
截图(支持全页面、指定元素) |
take_snapshot |
获取页面无障碍树(token 高效) |
click / type_text |
点击元素 / 输入文本 |
wait_for |
等待元素出现或 URL 匹配 |
get_page_info |
获取当前页面 URL、标题、视口尺寸和 Frame 清单 |
| 工具 | 说明 |
|---|---|
evaluate_js |
执行 JS 表达式;默认隔离上下文,可显式选择主世界和目标 Frame |
| 工具 | 说明 |
|---|---|
scripts(action) |
脚本管理:list 列出 / get 获取源码 / save 保存到本地 |
search_code |
搜索关键词(script_url=None 全量搜索,指定 URL 则单脚本搜索,自动检测压缩文件用字符级上下文) |
| 工具 | 说明 |
|---|---|
hook_function |
Hook 或追踪函数;支持主世界、Frame、持久化和动态目标等待 |
get_trace_data |
读取/清理函数 Trace,按 world 与 Frame 过滤 |
inject_hook_preset |
一键注入预置 Hook(xhr / fetch / crypto / websocket / debugger_bypass / cookie / runtime_probe) |
remove_hooks |
移除所有 Hook 并恢复原始对象 |
get_console_logs |
获取页面 console 输出 |
| 工具 | 说明 |
|---|---|
network_capture(action) |
网络捕获控制:start / stop / clear / status |
list_network_requests |
列出已捕获的请求(支持 URL / 域名 / 方法 / 类型 / 状态码过滤) |
get_network_request |
获取请求完整详情(max_body_size 控制 body 截断) |
get_request_initiator |
获取请求发起的 JS 调用栈 |
intercept_request |
拦截请求:log / block / modify / mock / stop |
反爬类型 → 工具路径对照表
反爬类型 代表 ✅ 推荐路径 ❌ 禁用 签名型(环境即签名) RS 5/6、AK sensor_data instrumentation(action="install")pre_inject_hooks、hook_jsvmp_interpreter(mode="proxy")行为型(参数签名) TK JSVMP、JY gt4 hook_jsvmp_interpreter(mode="proxy")— 纯混淆 常见 JS 混淆工具 任意组合 —
| 工具 | 说明 |
|---|---|
hook_jsvmp_interpreter |
JSVMP 运行时探针(mode="proxy" 全覆盖 / mode="transparent" 签名安全) |
instrumentation(action) |
源码级插桩:install 注册改写 / log 获取日志 / stop 停止 / reload 重载 / status 查看状态 |
compare_env |
浏览器环境指纹收集,用于与 Node.js/jsdom 对比 |
需要对齐浏览器与沙箱中的同一执行点时,可在安装时设置
include_source_site=True。事件会增加稳定 site_id 与单调 seq,log
返回 source_sites sidecar,映射到拦截脚本的原始字符区间。该能力默认关闭;
它表示混淆后 JS 的源码位置,不会猜测 VM 的 PC、opcode 或保护前源码位置。
对超过 200KB 且需要全量改写的脚本,需显式设置 on_oversized="force";
否则应配合属性过滤并按需关闭 rewrite_calls 控制开销。
| 工具 | 说明 |
|---|---|
cookies(action) |
Cookie 管理:get / set / delete |
get_storage |
获取 localStorage / sessionStorage |
export_state / import_state |
导出 / 导入完整浏览器状态 |
| 工具 | 说明 |
|---|---|
verify_signer_offline |
离线验证签名函数:传入样本列表,逐样本字符级对比,定位首偏差点 |
check_environment |
一站式自检:MCP、依赖、Camoufox Python/active/已安装版本及定制版状态 |
reset_browser_state |
清理残留(hooks / capture / routes / 当前 engine trace),不关浏览器 |
需要 camoufox-reverse 定制版浏览器。未安装时返回错误提示,不影响其他工具使用。
从 v1.3.0 起,Camoufox Python 0.5+ 用户可让官方版和定制版并存,且不改变 持久化 active 版本:
check_environment()
launch_browser(
browser_version="whitenightshadow/152.0.4-beta.30-reverse.5",
enable_trace=True
)
browser_version 必须使用 repo/版本或精确目录,存在同版本多份资产时必须传
精确目录。省略该参数时启动行为与 v1.2.0 完全相同;Camoufox 0.4.x 用户继续
使用原来的平铺缓存。所选版本必须与 active 浏览器具有相同完整 version/build,避免
上游共享资源产生版本混用。MCP 不下载浏览器、不修改 config.json,也不会触发缓存迁移。
| 工具 | 说明 |
|---|---|
trace_property_access |
Gecko 原生 DOM/Web API 定点追踪;reverse.5 声明 77 点,旧兼容构建为 75 点,不改写页面 JS 对象/描述符/原型。支持 action=capture/start/stop/query/clear/status、summary/timeline/sequence/search、get/set/call、对象与 native site 过滤。collect_values=True 仅做追踪后的安全快照并列出跳过项,不代表事件发生时的值 |
list_trace_files |
跨独立 run 目录列出 trace 文件(用于事后分析) |
query_trace_file |
查询 trace 缓存内的历史文件,支持对象、关键词、kind 与 site 过滤 |
每次 enable_trace=True 启动都会使用独立 run 目录,只控制本次浏览器的
PID,不会清理或开关其他 MCP 实例。开启 engine trace 时会临时关闭 Firefox
content sandbox 以允许内容进程写入;普通启动不会改动 sandbox。
1. launch_browser()
2. inject_hook_preset("xhr")
3. inject_hook_preset("crypto")
4. navigate("https://example.com/login")
5. type_text("#username", "test") → click("#login-btn")
6. list_network_requests(method="POST")
7. get_request_initiator(request_id=3) ← 定位签名函数
8. search_code("sign") ← 搜索签名代码
9. hook_function("window.getSign", mode="trace", world="main", persistent=True)
10. reload() → get_trace_data("window.getSign", world="main") ← 收集追踪数据
1. launch_browser()
2. network_capture(action="start")
3. navigate("https://target-site.com/")
4. list_network_requests(resource_type="script") ← 找到 VMP 脚本
5. instrumentation(action="install", url_pattern="**/vmp_target*.js", mode="ast")
6. inject_hook_preset("cookie", persistent=True)
7. instrumentation(action="reload") ← 让插桩生效
8. instrumentation(action="log", type_filter="tap_get") ← 看 VMP 读了什么环境
9. instrumentation(action="log", type_filter="tap_method") ← 看 VMP 调了什么 API
10. compare_env() ← 收集环境用于 Node.js 补齐
1. launch_browser() → navigate("https://target.com")
2. network_capture(action="start")
3. # 触发目标操作,收集带签名的请求
4. reqs = list_network_requests(url_filter="api/search")
5. # 提取样本
6. verify_signer_offline(
signer_code="(s) => ({'X-Bogus': mySign(s.url)})",
samples=[{"id": "r1", "input": {...}, "expected": {"X-Bogus": "..."}}]
)
完整的反爬类型识别与工作流见 docs/JSVMP_PLAYBOOK.md
…
与 compare_env 的区别:
trace_property_access:对当前构建声明的固定 Gecko 原生注入点提供强证据;
reverse.5 为 77 点,未命中不能证明
覆盖范围外的属性未被读取,也可能有高负载时间侧信道compare_env:采集一组 JS 层环境基线;可通过 properties 或分批
evaluate_js 扩展,不能视为全量枚举compare_env 与动态验证确认完整范围,避免把覆盖集之外的未命中误作否定证据…
wrappedJSObject 回退,继续避免失败后重复执行pending 状态evaluate_js/hook_function 新增显式 world="main",默认隔离上下文保持不变;Camoufox 原生 mw: 优先,旧版可安全回退frame_url/frame_name/frame_index,多匹配和不稳定持久索引明确拒绝pending/target_not_found,不再假报成功get_trace_data,Trace 缓存按 world/Frame 隔离且有界;修复 intercept 忽略 persistent 的问题camoufox-reverse reverse.5,将既有 localStorage.getItem/setItem
两点迁移到 Firefox 152 默认 LSNG LSObject 路径hook_count 改为明确未知camoufox-reverse reverse.4:75 个原路径不变,正确区分 get/set/call,并解析 native site、进程序列和微秒时间扩展字段trace_property_access 新增兼容的 action=start/stop/query/capture/clear/status;可在 start 后继续执行页面操作,再 stop 聚合installed/trace_active;check_environment 现在拆分 installed、trace_capable、trace_activecollect_values 明确为追踪后的安全快照;Cookie 与可能产生副作用的 API 默认跳过enable_trace=True 时,不再注入无效配置或关闭 sandbox;普通启动保持不变enable_trace=False 不受影响launch_browser 新增可选 browser_version,单次选择 Camoufox 0.5+ 已安装版本且不修改 active 配置check_environment 新增 Camoufox Python、active、installed selectors、能力标记及旧缓存迁移风险诊断C.UTF-8 时生成无效 locale="C"、导致浏览器无法启动的问题instrumentation(action="install") 新增默认关闭的 include_source_sitesite_id 和单调 seqinstrumentation(action="log") 返回原始脚本 SHA-256、URL、字符区间与 AST 行列 sidecar,并补齐 hot_functionsCAMOU_CONFIG_1..n 后,enable_trace=True 无法注入 `propNo open issues yet, or sync has not completed.