Files
reverse-skills-max/vendor-new/xbsReverseSkill/web-js-env-patcher/references/camoufox-tooling.md

7.7 KiB
Raw Blame History

Camoufox / camoufox-reverse-mcp 取证参考

本文件只在用户选择或询问 Camoufox / camoufox-reverse-mcp 时读取。Camoufox 用于前置取证、采样、网络捕获、源码定位与日志收集,不得进入最终 result/ 交付代码。

来源与定位

Camoufox 官方流程要求先安装 Python 包,再下载浏览器本体:

python -m pip install -U "camoufox[geoip]"
python -m camoufox fetch
python -m camoufox version
python -m camoufox path

geoip 在代理场景强烈建议安装,因为它用于根据出口 IP 计算经纬度、时区、国家和 locale。只安装 Python 包但没有执行 python -m camoufox fetch,不能视为可用于正式取证。

取证模式

模式 使用条件 阻塞条件
Camoufox + camoufox-reverse-mcp 需要 MCP 网络捕获、脚本搜索、Hook、请求 initiator、Cookie / Storage 或可选属性访问追踪 Camoufox 或 MCP 任一不可用时暂停,不得静默降级
仅 Camoufox 只需要用 Camoufox 官方 Python API 打开页面、轻量采样或手工导出材料 Camoufox 包不存在或浏览器本体未 fetch 时暂停

如果用户选择 MCP,但未检测到 MCP:要求用户提供项目目录 / Python 环境,或确认安装;只有用户明确回复“降级为仅 Camoufox”才可以不用 MCP 继续。

安装检测

每次启动浏览器前先运行检测脚本:

node scripts/check_external_tools.js --python python --require-camoufox --markdown
node scripts/check_external_tools.js --python python --require-camoufox --camoufox-install-dir <camoufox-cache-dir> --markdown
node scripts/check_external_tools.js --python python --require-camoufox --require-camoufox-mcp --camoufox-mcp-project-dir <camoufox-reverse-mcp-dir> --json

检测通过标准:

  • camoufox Python 包可导入。
  • from camoufox.sync_api import Camoufox 可导入。
  • python -m camoufox path 返回的路径存在,或在用户提供 / 默认缓存目录检测到浏览器本体。
  • 选择 MCP 时,camoufox_reverse_mcp 可导入,或用户提供的项目目录可通过 src/ 导入。

安装引导

如果用户确认未安装 Camoufox,先让用户提供 Python / venv 和下载缓存目录;如果用户不提供目录,说明将使用 Camoufox 默认缓存目录,然后执行:

python -m pip install -U "camoufox[geoip]"
python -m camoufox fetch
python -m camoufox version
python -m camoufox path

如果用户确认未安装 camoufox-reverse-mcp,先让用户提供克隆目录;如果用户不提供,使用当前项目外的用户确认目录或系统临时下载目录,不要把安装仓库混入最终 case 产物:

git clone https://github.com/WhiteNightShadow/camoufox-reverse-mcp.git <install-dir>
cd <install-dir>
python -m pip install -e .
python -c "import camoufox_reverse_mcp; print('ok')"

MCP 客户端配置示例:

{
  "mcpServers": {
    "camoufox-reverse": {
      "command": "python",
      "args": ["-m", "camoufox_reverse_mcp"]
    }
  }
}

带代理且用户授权时,可在 MCP 参数中加入 --proxy、--geoip、--humanize、--block-webrtc。不要修改 AiMaMi 或其他本地代理配置;只输出用户可自行应用的配置建议。

启动硬约束

从第一次打开目标站开始就使用 Camoufox,不得先使用普通 Playwright、Puppeteer、Selenium、系统 Firefox 或系统 Chrome 试探。

必选约束:

  • 默认有头:headless=False。Linux 无显示环境且用户确认时才使用官方 headless="virtual"。
  • 默认拟人:humanize=True。
  • 代理场景按授权启用 geoip=True,必要时 block_webrtc=True。
  • 不固定窗口、字体、WebGL、locale 等指纹,除非已有真实样本或用户明确要求。
  • 登录态场景使用持久上下文时,把 profile 放入 case 临时目录并标记为敏感材料。
  • 点击、输入、滚动、拖拽使用 Camoufox / Playwright 原生输入路径或 MCP 官方交互能力;不要使用 page.evaluate(() => dispatchEvent(...)) 作为高风控交互主路径。

Python API 取证示例:

from camoufox.sync_api import Camoufox

with Camoufox(headless=False, humanize=True, geoip=True, block_webrtc=True) as browser:
    page = browser.new_page()
    page.goto("https://example.com")

该示例只能用于前置取证,不得复制到最终 result/。

isTrusted 与可信输入

Camoufox 可以降低自动化和指纹检测风险,但前置取证仍应避免普通 JS 合成事件。鼠标、键盘、拖拽、滚动优先使用 Camoufox 官方 API 的原生输入路径;如果某个流程只能通过 page.evaluate 合成事件完成,应先标记 isTrusted=false 风险并暂停,让用户选择手动操作、切换到 ruyiPage 的 native BiDi / ruyi: true,或在授权范围内接受该风险。

MCP 取证流程

  1. check_environment:确认 MCP、Camoufox、浏览器状态。
  2. launch_browser(headless=false, humanize=true, geoip=true, block_webrtc=true):启动时即启用反检测约束。
  3. network_capture(action="start"):在 navigate 前开始捕获。
  4. navigate(url="目标页面"):打开页面;需要登录时暂停并让用户手动登录。
  5. 用户回复“已经登录成功”后,再继续触发最小必要业务动作。
  6. list_network_requests:按 URL、方法、资源类型筛选目标接口。
  7. get_network_request:保存请求头、query、body、响应摘要;敏感字段做脱敏记录。
  8. get_request_initiator:定位请求发起栈。
  9. scripts(action="list|get|save") 和 search_code:收集相关 JS 文件和关键字命中。
  10. inject_hook_preset("xhr"/"fetch"/"cookie"/"crypto") 或 hook_function:最小必要 Hook;阶段结束后 reset_browser_state。
  11. 可选 trace_property_access(duration=0, mode="summary", collect_values=True):当需要浏览器环境访问日志辅助补环境时使用,结果复制到 case 的 evidence/ 或 notes/,并在阶段结束后清理缓存中的无关大文件。

登录处理

不要索要账号、密码、验证码或 MFA。需要登录时:

  1. 暂停自动动作。
  2. 让用户在当前 Camoufox / MCP 打开的页面中手动登录。
  3. 用户回复“已经登录成功”后,复述将继续的取证动作并再次确认。
  4. 只采集授权分析所需的最小请求、Cookie / Storage 摘要和 JS 证据。

与补环境的关系

Camoufox 采集到的 Network、Initiator、脚本源码、Hook 日志、环境访问日志只作为补环境输入。进入 Node.js 补环境后仍然要遵守本 Skill 的 addon-first、属性描述符、原型链、toString 保护、指纹值回放和 fixture 验证规则。

如果同时存在 RuyiTrace NDJSON,且用户选择了 ruyiPage + RuyiTrace,则补环境优先依据 RuyiTrace NDJSON;Camoufox 的属性访问追踪只作为补充证据。

最终交付禁入

最终 result/ 目录不得包含:

  • Camoufox、AsyncCamoufox、camoufox_reverse_mcp。
  • launch_browser、network_capture、navigate、page.goto、browser.new_page。
  • Playwright / Puppeteer / Selenium / CDP / WebDriver 启动代码。
  • Camoufox profile、trace 缓存、截图、HAR、Hook 临时代码或无关大文件。

最终验证必须由 Node.js / Python TLS 指纹兼容请求客户端发起少量授权模拟请求,或按用户确认只输出本地参数。