camoufox-reverse-mcp
camoufox-reverse-mcp
基于反指纹浏览器的 MCP Server,专为 JavaScript 逆向工程设计。
一个 MCP(Model Context Protocol)服务器,让 AI 编码助手(Claude Code、Cursor、Cline 等)能够通过 Camoufox 反指纹浏览器对目标网站进行:接口参数分析、JS 文件静态分析、动态断点调试、函数 Hook 追踪、网络流量拦截、JSVMP 字节码分析、Cookie/存储管理等逆向操作。
为什么选择 Camoufox?
特性 | chrome-devtools-mcp | camoufox-reverse-mcp |
浏览器内核 | Chrome (Puppeteer) | Firefox (Camoufox) |
反检测方案 | 无 | C++ 引擎级指纹伪造 |
调试能力 | 有限(无断点) | Playwright + JS Hook |
JSVMP 分析 | 无 | 解释器插桩 + 属性追踪 + 字符串提取 |
Hook 持久化 | 不支持 | context 级持久化,导航后自动重注入 |
核心优势:
Camoufox 在 C++ 层面 修改指纹信息,非 JS 层 patch,从根源不可检测
Juggler 协议沙箱隔离使 Playwright 完全不可被页面 JS 检测到
BrowserForge 按 真实世界流量统计分布 生成指纹,不是随机拼凑
能在瑞数、极验、Cloudflare 等强反爬站点上正常工作
Hook 使用
Object.defineProperty防覆盖保护,页面脚本无法恢复原始方法
快速开始
方式一:AI 对话框直接安装(推荐)
在你的 AI 编码工具(Cursor / Claude Code / Codex 等)的对话框中输入:
请帮我配置camoufox-reverse-mcp并在后续触发相关操作的时候查阅该mcp:https://github.com/WhiteNightShadow/camoufox-reverse-mcpAI 会自动完成克隆、安装依赖、配置 MCP Server 的全部流程。
方式二:手动安装
1. 克隆项目
git clone https://github.com/WhiteNightShadow/camoufox-reverse-mcp.git
cd camoufox-reverse-mcp2. 安装依赖
pip install -e .或使用 uv:
uv pip install -e .3. 配置到你的 AI 工具
根据你使用的工具,将 MCP Server 配置添加到对应的配置文件中(见下方「客户端配置」章节)。
使用方法
作为 MCP Server 启动
python -m camoufox_reverse_mcp带参数启动:
python -m camoufox_reverse_mcp \
--proxy http://127.0.0.1:7890 \
--geoip \
--humanize \
--os windows命令行参数
参数 | 说明 | 默认值 |
| 代理服务器地址 | 无 |
| 无头模式 | false |
| 操作系统伪装(windows/macos/linux) | windows |
| 根据代理 IP 自动推断地理位置 | false |
| 人类化鼠标移动 | false |
| 屏蔽图片加载 | false |
| 屏蔽 WebRTC | false |
客户端配置
{
"mcpServers": {
"camoufox-reverse": {
"command": "python",
"args": ["-m", "camoufox_reverse_mcp"]
}
}
}{
"mcpServers": {
"camoufox-reverse": {
"command": "python",
"args": ["-m", "camoufox_reverse_mcp", "--headless"]
}
}
}{
"mcpServers": {
"camoufox-reverse": {
"command": "python",
"args": [
"-m", "camoufox_reverse_mcp",
"--proxy", "http://127.0.0.1:7890",
"--geoip",
"--humanize"
]
}
}
}可用工具一览(57 个)
导航 & 页面
工具 | 说明 |
| 启动 Camoufox 反指纹浏览器(已启动时返回完整会话状态) |
| 关闭浏览器,释放资源 |
| 导航到指定 URL |
| 刷新页面 / 浏览器后退 |
| 截图(支持全页面、指定元素) |
| 获取页面无障碍树(兼容新版 Playwright) |
| 点击元素 / 输入文本 |
| 等待元素出现或 URL 匹配 |
| 获取当前页面 URL、标题、视口尺寸 |
| [新] 一键导出渲染后 HTML + title + meta + 可见文本 |
| [新] 查看当前会话状态:浏览器/上下文/页面/抓包/Hook |
JS 脚本分析(逆向核心)
工具 | 说明 |
| 列出页面所有已加载的 JS 脚本 |
| 获取指定 JS 文件的完整源码 |
| 在所有已加载脚本中搜索关键词(返回匹配数量和脚本列表,不再截断) |
| [新] 在指定脚本中搜索关键词(更精准,避免全量扫描) |
| 将 JS 文件保存到本地 |
| 获取完整页面 HTML 或指定元素 |
断点调试(逆向核心)
工具 | 说明 |
| 在页面上下文执行任意 JS 表达式 |
| 执行 JS 并检查复杂对象属性 |
| 注入在页面 JS 之前执行的脚本(支持 persistent 持久化) |
| [新] 冻结原型方法,防止页面脚本覆盖 Hook |
| 通过 Hook 设置伪断点(支持 persistent 持久化) |
| 获取伪断点捕获的数据 |
| 获取页面 console 输出 |
Hook & 追踪(逆向核心)
工具 | 说明 |
| 追踪函数调用(支持 persistent 持久化,跨导航数据不丢失) |
| 获取追踪数据(合并页面内数据和持久化数据) |
| 注入自定义 Hook(before/after/replace,支持 non_overridable 防覆盖) |
| 一键注入预置 Hook(默认 persistent=True 持久化) |
| [新] 追踪属性访问(Proxy 级别),揭示 JSVMP 读取的环境信息 |
| [新] 获取属性访问记录 |
| 移除所有 Hook(可选保留持久化 Hook) |
网络分析(逆向核心)
工具 | 说明 |
| 开始捕获网络请求(支持 capture_body=True 捕获响应体) |
| 停止捕获 |
| 列出已捕获的请求(支持多维过滤) |
| 获取指定请求的完整详情(支持 include_headers=False 省 token) |
| 获取请求发起的 JS 调用栈 |
| 拦截请求:记录 / 阻断 / 修改 / 模拟响应 |
| 停止拦截 |
| [新] 在所有已捕获响应体中全文搜索关键词 |
| [新] 分页读取大响应体(避免截断) |
| [新] 按 JSON 路径提取响应数据(支持 |
JSVMP 逆向分析(新增模块)
工具 | 说明 |
| [新] JSVMP 解释器插桩:追踪 API 调用和属性读取 |
| [新] 获取 JSVMP 执行日志(含 API 调用统计和属性读取摘要) |
| [新] 提取 JSVMP 字符串表:解密混淆字符串,发现 API 名称 |
| [新] 浏览器环境指纹收集:用于与 Node.js/jsdom 环境对比 |
存储管理
工具 | 说明 |
| Cookie 管理 |
| localStorage / sessionStorage 读写 |
| 导出 / 导入完整浏览器状态 |
指纹 & 反检测
工具 | 说明 |
| 查看当前浏览器指纹详情 |
| 在 bot 检测站点测试反检测效果并截图 |
| 一键绕过反调试陷阱 |
使用场景示例
场景 1:逆向登录接口的签名参数
AI 操作链:
1. launch_browser(headless=False, os_type="windows")
2. inject_hook_preset("xhr") ← 注入 XHR Hook(默认持久化)
3. inject_hook_preset("crypto") ← 注入加密函数 Hook
4. navigate("https://example.com/login")
5. type_text("#username", "test_user")
6. type_text("#password", "test_pass")
7. click("#login-btn")
8. list_network_requests(method="POST") ← 看到带加密参数的请求
9. get_network_request(request_id=3) ← 查看完整参数
10. get_request_initiator(request_id=3) ← 发现签名函数在 main.js:1234
11. get_script_source("https://example.com/js/main.js")
12. search_code("sign") ← 搜索签名相关代码
13. hook_function("window.getSign", ...)
14. 刷新 → get_trace_data("window.getSign")
15. 输出完整签名算法还原结果场景 2:对付 JSVMP 保护的站点
AI 操作链:
1. launch_browser(headless=False)
2. bypass_debugger_trap() ← 先绕过反调试
3. inject_hook_preset("xhr") ← 持久化 Hook
4. inject_hook_preset("fetch") ← 持久化 Hook
5. hook_jsvmp_interpreter("webmssdk.es5.js") ← JSVMP 插桩
6. trace_property_access(["navigator.*", "screen.*", "document.cookie"])
7. navigate("https://target.com")
8. 触发目标操作(翻页、搜索等)
9. get_jsvmp_log() ← 查看 JSVMP 访问了哪些 API
10. get_property_access_log() ← 查看读取了哪些环境属性
11. dump_jsvmp_strings("webmssdk.es5.js") ← 提取字符串表
12. compare_env() ← 收集浏览器环境,与 Node.js 对比
13. 根据 API 调用和属性访问记录还原算法逻辑场景 3:验证反检测效果
AI 操作链:
1. launch_browser(os_type="windows", humanize=True)
2. check_detection() ← 打开 bot.sannysoft.com 并截图
3. get_fingerprint_info() ← 查看详细指纹信息
4. navigate("https://browserscan.net") ← 测试更多检测站点
5. take_screenshot(full_page=True)场景 4:持久化 Hook 工作流
AI 操作链:
1. launch_browser()
2. inject_hook_preset("xhr", persistent=True) ← context 级持久化
3. inject_hook_preset("fetch", persistent=True)
4. trace_function("XMLHttpRequest.prototype.open", persistent=True) ← 持久化追踪
5. navigate("https://page1.com") ← Hook 自动生效
6. get_trace_data() ← 收集数据
7. navigate("https://page2.com") ← Hook 自动重注入!
8. get_trace_data() ← 数据包含两个页面的记录
9. freeze_prototype("XMLHttpRequest", "open") ← 防止页面覆盖场景 5:大响应体数据定位 + 渲染态 DOM 导出
AI 操作链:
1. launch_browser()
2. start_network_capture(capture_body=True) ← 开启响应体捕获
3. navigate("https://example.com/data")
4. get_session_info() ← 确认当前会话状态和抓包情况
5. list_network_requests(resource_type="xhr") ← 找到目标接口
6. search_response_body("token") ← 在所有响应体中搜索关键词
7. search_json_path(request_id=5, json_path="data.list[*].sign") ← 精准提取 JSON 数据
8. get_response_body_page(request_id=5, offset=0, length=10000) ← 分页查看大 body
9. get_page_content() ← 一键导出渲染后 HTML + 可见文本技术架构
┌─────────────────────────────────────────────────┐
│ AI 编码助手 (Cursor / Claude) │
│ ↕ MCP (stdio) │
├─────────────────────────────────────────────────┤
│ camoufox-reverse-mcp │
│ ┌──────────┬──────────┬──────────┬──────────┐ │
│ │Navigation│ Script │Debugging │ Hooking │ │
│ │ │ Analysis │ │ │ │
│ ├──────────┼──────────┼──────────┼──────────┤ │
│ │ Network │ JSVMP │Fingerprint│ Utils │ │
│ │ │ Analysis │ │ │ │
│ ├──────────┼──────────┼──────────┼──────────┤ │
│ │ Storage │ Persistent Scripts │ │ │
│ └──────────┴──────────┴──────────┴──────────┘ │
│ ↕ Playwright API │
├─────────────────────────────────────────────────┤
│ Camoufox (反指纹 Firefox, Juggler 协议) │
│ C++ 引擎级指纹伪造 · BrowserForge 真实指纹分布 │
└─────────────────────────────────────────────────┘更新记录
v0.3.0(2026-04-03)— 稳定性修复 + 响应体检索 + DOM 导出 + 会话管理
修复实战中的稳定性问题,补全响应体检索、渲染态 DOM 导出、会话管理等缺失能力。工具总数从 52 个增长至 57 个。
新增工具(5 个)
工具 | 说明 |
| 在所有已捕获响应体中全文搜索关键词 |
| 分页读取大响应体,避免截断丢失数据 |
| 按 JSON 路径提取响应数据(支持 |
| 一键导出渲染后 HTML + title + meta + 可见文本 |
| 查看当前会话状态:浏览器/上下文/页面/抓包/Hook |
Bug 修复
take_snapshot:修复
Page object has no attribute accessibility错误,兼容新版 Playwright(>= 1.42),无障碍 API 移除后自动 fallback 到 JS 实现trace_property_access:修复
JSON.parse报错,原因是模板替换时把 JS 引号也替换掉了,导致JSON.parse(["..."])而非JSON.parse('[...]')
改进项
launch_browser:已启动时返回完整会话状态(页面 URL、上下文列表、抓包状态),不再只返回
already_runningget_network_request:新增
include_headers=False选项,省略 headers 节约 tokenlist_network_requests:URL 截断到 200 字符,响应字段名缩短(
resource_type→type,duration→ms)工具描述优化:梳理所有工具的描述文案,使参数说明和使用场景更清晰明了
大响应体可观测性:
search_response_body支持按关键词搜索全部已捕获响应 body;get_response_body_page支持分页读取;search_json_path支持按路径直接提取 JSON 数据
v0.2.0(2026-04-01)— Hook 持久化 + JSVMP 专项分析
一句话:解决 Hook 导航后失效的核心痛点,新增 JSVMP 解释器插桩 / 属性追踪 / 字符串提取等专项逆向工具,工具总数从 44 个增长至 52 个。
新增工具(8 个)
工具 | 说明 |
| 冻结原型方法,防止页面脚本覆盖 Hook |
| 在指定脚本中搜索关键词(精准 + 更多上下文) |
| Proxy 级属性访问追踪,揭示 JSVMP 读取的环境信息 |
| 获取属性访问记录 |
| JSVMP 解释器插桩:追踪 API 调用和敏感属性读取 |
| 获取 JSVMP 执行日志(含调用统计与属性摘要) |
| 提取 JSVMP 字符串表,解密混淆字符串,发现 API 名称 |
| 收集浏览器环境指纹,用于与 Node.js/jsdom 对比 |
改进项
Hook 持久化:
inject_hook_preset默认persistent=True,context 级注入,导航后自动重注入Hook 防覆盖:XHR/Fetch Hook 使用
Object.defineProperty(configurable: false)+toString伪装trace_function 持久化:新增
persistent=True,通过 console 事件收集数据到 Python 端,导航不丢失get_request_initiator 修复:改进 URL 匹配(pathname 级别)+ 添加诊断信息
search_code 修复截断:返回
total_matches和scripts_with_matches,结果不再静默 omit网络捕获响应体:
start_network_capture(capture_body=True)支持捕获响应体缓冲区扩容:日志和网络请求缓冲区从 500 增大到 2000
请求 ID 稳定:使用全局递增计数器,不再因 deque 弹出导致 ID 重复
v0.1.0(2026-03-31)— 初始版本
一句话:基于 Camoufox 反指纹浏览器的 MCP Server,44 个工具覆盖 JS 逆向分析全链路。
浏览器控制:启动 / 导航 / 截图 / 交互(11 个工具)
脚本分析:列出 / 获取 / 搜索 / 保存脚本(5 个工具)
调试:JS 执行 / init_script / 伪断点 / 控制台(6 个工具)
Hook:函数追踪 / 自定义 Hook / 预设 Hook(5 个工具)
网络:捕获 / 过滤 / 详情 / 调用栈 / 拦截(7 个工具)
存储:Cookie / Storage / 状态导入导出(7 个工具)
指纹:指纹检查 / 检测测试 / 反调试绕过(3 个工具)
许可证
MIT
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/WhiteNightShadow/camoufox-reverse-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server