Files

287 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 浏览器取证与打开网页规则
本文件用于验证码识别任务中必须打开真实网页、截图、抓包、收集脚本或观察验证组件时。默认优先离线分析用户已提供的 HTML、截图、URL、脚本片段和页面文案;只有证据不足且用户确认授权范围后,才进入浏览器取证。
## 何时读取
出现以下任一情况时读取本文件:
- 需要打开目标网页。
- 需要截图、查看页面标题、读取组件 DOM 或 iframe。
- 需要抓包、导出 HAR/cURL、查看请求 initiator。
- 需要收集 JS bundle、chunk、sourcemap。
- 需要注入最小 Hook、观察 XHR/fetch、Cookie 或 Storage 写入。
- 页面出现验证码、登录、MFA、设备验证或风控验证。
- 需要采集用户手动完成验证码后的成功基线样本。
- 用户明确要求避免普通自动化、CDP 或 WebDriver 检测。
## 硬性规则
- 启动任何浏览器前,先让用户确认取证模式。
- 用户未确认前,只能做离线材料分析和缺失证据提示。
- 不要直接使用普通 Playwright、Puppeteer、Selenium、系统 Chrome、系统 Firefox 或 CDP 路线打开目标页。
- 已选模式后,后续所有浏览器取证动作都沿用该模式。
- 工具不可用、路径缺失、runtime 不合格、需要登录或必须更换工具时,暂停并让用户确认;不要静默 fallback 到普通浏览器自动化。
- 出现登录、验证码、MFA、设备验证时暂停,让用户手动完成;不要自动破解、代过验证、注入 token 或调用第三方打码服务。
- 授权取证中需要建立成功基线时,用户手动完成验证码;AI 只采集经确认的证据、成功状态和时间线,不替用户提交或代过。
- 浏览器取证只用于识别和证据采集,不进入最终交付方案作为自动化执行路径。
## 取证模式
让用户从以下模式中选择:
| 模式 | 说明 | 建议 |
| --- | --- | --- |
| ruyiPage + RuyiTrace | 使用 ruyiPage 打开页面并采集网络/页面证据,RuyiTrace 采集运行时日志 | 高风控、需要环境日志时推荐 |
| 仅 ruyiPage | 使用 ruyiPage 打开页面、截图、抓包、收集 JS,不采集 RuyiTrace 日志 | 只需要网页证据时 |
| Camoufox + camoufox-reverse-mcp | 使用 Camoufox 反指纹浏览器和 MCP 工具做网络、脚本、Hook 与调用栈取证 | 需要 Firefox/Camoufox 路线和 MCP 工具链时 |
| 仅 Camoufox | 使用 Camoufox 官方 API 做轻量取证 | 用户已有 Camoufox 或只需打开页面时 |
| CloakBrowser | 使用 CloakBrowser 有头 + humanize 的 Chromium 路线 | 目标更适合 Chromium 或用户已有 CloakBrowser 时 |
| 用户手动取证 | 用户自行提供 HTML、截图、HAR、cURL、JS 文件、调用栈截图 | 不允许自动化或需要真实登录态时 |
| AI 自行决定 | 先检测本机工具,提出将使用的模式,用户确认后再启动 | 用户不确定时 |
## 各模式最低要求
### ruyiPage / RuyiTrace
- 使用有头模式。
- 使用专用临时 profile。
- 从第一次打开目标页开始使用 ruyiPage,不先用普通浏览器探测。
- 如果选择 ruyiPage + RuyiTrace,但 RuyiTrace 不可用,不得静默降级;让用户确认安装、提供路径或明确降级为仅 ruyiPage。
- 导航后应确认 `navigator.webdriver === false`。
- 只检测到系统 Firefox fallback 不视为通过;必须确认 ruyiPage 定制 Firefox runtime 可用。
### Camoufox / camoufox-reverse-mcp
- 使用 Camoufox 官方入口或 MCP 工具,不用普通 Playwright 指向系统浏览器。
- 默认有头:`headless=False`。
- 默认启用拟人行为:`humanize=True`。
- 如使用代理,需考虑语言、时区、地理位置、WebRTC 与出口 IP 的一致性。
- 选择 MCP 但 MCP 不可用时,不得静默降级为仅 Camoufox;先让用户确认。
### CloakBrowser
- 使用 CloakBrowser 官方包装器入口。
- 默认有头并启用 `humanize`。
- 不直接调用普通 `chromium.launch()`、`puppeteer.launch()` 或普通 browserType 启动。
- 需要登录态或高风控时,优先使用持久化 profile;profile 是否保留或删除由用户确认。
## 工具缺失时的引导
所选模式的工具缺失、包可导入但浏览器本体缺失、路径缺失或 runtime 不合格时,必须先向用户说明当前缺口,并提供“已安装则提供路径 / 未安装则确认安装目录和安装方式 / 明确降级或切换模式”的选项。不要静默 fallback 到普通 Playwright、Puppeteer、Selenium、系统 Chrome、系统 Firefox 或 CDP 路线。
真实安装、下载、克隆或修改环境前,先输出安装计划,等待用户确认后再执行。安装计划中只使用相对目录、用户提供目录或占位符,不要写入当前机器的绝对路径。
### ruyiPage / RuyiTrace 缺失
优先检测:
```bash
python -c "import ruyi; print('ruyiPage package ok')"
python -c "import requests; print('requests ok')"
python -c "from pathlib import Path; print('请在检测脚本或用户提供路径中校验 ruyiPage 定制 Firefox runtime')"
```
如果已有外部检测脚本,可使用等价命令检查 ruyiPage browsers 目录、定制 Firefox 可执行文件和 RuyiTrace 目录:
```bash
node scripts/check_external_tools.js --markdown
node scripts/check_external_tools.js --python <python> --ruyipage-install-dir <ruyipage-browsers-dir> --markdown
node scripts/check_external_tools.js --python <python> --ruyipage-browser-path <firefox-exe> --ruyitrace-home <RuyiTrace-dir> --json
```
未检测到 ruyiPage 定制 Firefox runtime 时,使用这个提示:
```markdown
当前没有检测到 ruyiPage 定制 Firefox runtime,或 ruyiPage 可能会退回系统 Firefox。系统 Firefox 不视为通过。
请确认:
1. 你是否已经提前安装好 ruyiPage 定制 Firefox?
2. 如果已经安装,请提供 ruyiPage browsers 安装目录或定制 Firefox 可执行文件路径。
3. 如果没有安装,请提供希望安装到的目录;我会先输出安装计划,确认后再安装或下载 runtime。
在检测通过前,我不会改用普通 Playwright、Puppeteer、系统 Firefox 或 CDP 取证。
```
选择 `ruyiPage + RuyiTrace` 但未检测到 RuyiTrace 时,使用这个提示:
```markdown
当前没有检测到可用 RuyiTrace,或 RuyiTrace 目录不完整。你选择的是 ruyiPage + RuyiTrace,因此不能静默降级为仅 ruyiPage。
请确认:
1. 是否已经安装 RuyiTrace?如果已安装,请提供 RuyiTrace 目录。
2. 如果没有安装,请提供希望下载或解压到的目录;我会先输出安装计划,确认后再下载或安装。
3. 如果暂时不需要 RuyiTrace NDJSON,请明确回复“降级为仅 ruyiPage”。
```
### Camoufox / camoufox-reverse-mcp 缺失
优先检测:
```bash
python -c "from camoufox.sync_api import Camoufox; print('Camoufox package ok')"
python -m camoufox path
```
Camoufox 官方流程不只是安装 Python 包,还需要下载浏览器本体。常见安装和下载命令:
```bash
python -m pip install camoufox --upgrade
python -m camoufox fetch
python -m camoufox path
```
如果已有外部检测脚本,可使用等价命令检查 Python 包、浏览器缓存目录和 MCP 项目目录:
```bash
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 -m camoufox fetch` 下载的浏览器本体时,使用这个提示:
```markdown
当前没有检测到可用 Camoufox,或只检测到 Python 包但未检测到 `python -m camoufox fetch` 下载的浏览器本体。
请确认:
1. 你是否已经在某个 Python / venv 中安装 Camoufox?如果已安装,请提供 Python 解释器路径或 venv 激活方式。
2. 你是否已经执行过 `python -m camoufox fetch`?如果已执行,请提供 `python -m camoufox path` 输出,或 Camoufox 缓存目录。
3. 如果没有安装,请提供希望使用的 Python / venv 和下载缓存目录;如果不提供目录,我会说明将使用 Camoufox 默认缓存目录。
在检测通过前,我不会改用普通 Playwright、Puppeteer、系统 Firefox 或 CDP 取证。
```
选择 `Camoufox + camoufox-reverse-mcp` 但 MCP 缺失时,使用这个提示:
```markdown
当前没有检测到 camoufox-reverse-mcp。你选择的是 Camoufox + camoufox-reverse-mcp,因此不能直接降级为仅 Camoufox。
请确认:
1. 是否已经克隆并安装 camoufox-reverse-mcp?如果已安装,请提供项目目录或可导入该包的 Python / venv。
2. 如果未安装,请提供希望克隆到的目录;我会先输出安装计划,确认后再执行 `git clone <camoufox-reverse-mcp-repo-url> <camoufox-reverse-mcp-dir>` 与 `python -m pip install -e .`。
3. 如果你不想安装 MCP,请明确回复“降级为仅 Camoufox”。
```
### CloakBrowser 缺失
优先检测 Python 或 Node.js 包,以及 stealth Chromium 二进制是否存在:
```bash
python -c "import cloakbrowser; print('CloakBrowser Python package ok')"
python -m cloakbrowser info
npx cloakbrowser info
```
如果已有外部检测脚本,可使用等价命令检查 Python 包、Node 项目目录和二进制路径:
```bash
node scripts/check_external_tools.js --require-cloakbrowser --markdown
node scripts/check_external_tools.js --require-cloakbrowser --cloakbrowser-project-dir <node-project-dir> --markdown
node scripts/check_external_tools.js --python <python> --require-cloakbrowser --cloakbrowser-binary-path <chromium-or-chrome-path> --json
```
未检测到 CloakBrowser 时,使用这个提示:
```markdown
当前未检测到可用 CloakBrowser 环境。
请确认:
1. 你是否已经提前安装好 CloakBrowser?
2. 如果已经安装,请提供 Python 解释器 / Node 项目目录 / CloakBrowser Chromium 二进制路径。
3. 如果没有安装,请确认希望使用 Python 路线还是 Node.js 路线,并提供安装目录或项目目录;我会先输出安装计划,确认后再安装或预下载二进制。
在 CloakBrowser 检测通过前,我不会改用普通 Playwright、Puppeteer、系统 Chrome 或 CDP 取证。
```
Python 路线:
```bash
python -m pip install cloakbrowser playwright --upgrade
python -m cloakbrowser install
python -m cloakbrowser info
python -m cloakbrowser update
python -m cloakbrowser clear-cache
```
Node.js / Playwright 路线:
```bash
npm install cloakbrowser playwright-core
npx cloakbrowser install
npx cloakbrowser info
npx cloakbrowser update
npx cloakbrowser clear-cache
```
Node.js / Puppeteer 路线只有用户明确要求 Puppeteer 风格 API 时才使用:
```bash
npm install cloakbrowser puppeteer-core
```
## 取证顺序
1. 确认授权范围和目标页面。
2. 让用户确认取证模式。
3. 检测用户选择的工具是否可用。
4. 工具不可用时,暂停并让用户确认安装、提供路径、降级或切换模式。
5. 按确认模式从第一次导航开始打开页面。
6. 如需要登录、验证码、MFA 或设备验证,暂停等待用户手动完成。
7. 如果本次取证用于后续验证方案或失败复盘,采集用户手动成功样本基线:
- 默认同一授权目标至少 5 次成功样本。
- 如果过程中出现新的验证码类型,每个新类型至少补到 2 次成功样本。
- 每轮记录验证码类型、厂商、变体、成功前后截图或截图元信息、验证码区域 DOM 摘要、脚本/iframe URL、关键请求摘要、成功 UI/callback/response token 或服务端成功状态、challenge id、时间线和刷新/切题信息。
- 动态切题时不要只保留最后一轮;每一轮都作为独立 `success_samples` 记录。
8. 用 `scripts/evaluate_success_baseline.py --samples success_samples.json --pretty` 评估成功基线;不足时输出强提示,用户确认后仍可继续离线分析或受控验证。
9. 只执行最少必要操作:截图、网络捕获、脚本列表、接口 initiator、页面文案和组件特征。
10. 用采集到的 HTML、URL、文案或截图元信息运行 `scripts/classify_verify.py`。
11. 输出类型、厂商、命中信号、置信度、推荐方案和成功基线状态。
## 成功样本基线格式
建议把用户手动完成的成功样本整理为:
```json
{
"authorization_scope": "用户确认的自有/授权测试目标",
"provider": "custom-or-unknown",
"success_samples": [
{
"sample_id": "manual-success-001",
"success": true,
"captcha_type": "slider",
"captcha_variant": null,
"evidence": {
"screenshot_before": "<relative path or description>",
"screenshot_after": "<relative path or description>",
"dom_summary": "<captcha container summary>",
"script_or_iframe_urls": ["<url without secrets>"],
"network_summary": ["<request/response summary without secrets>"],
"success_signal": "UI 显示验证成功 / callback 被调用 / 服务端返回成功",
"challenge_id": "<non-secret challenge id if available>",
"timeline": ["challenge rendered", "user solved", "success state observed"]
}
}
]
}
```
不要把 Cookie、Authorization、账号材料、API key 或可复用 token 写入样本文件;需要说明时只写字段名、状态和脱敏摘要。
## 用户确认模板
```markdown
本次需要打开真实网页取证。为避免普通自动化或 CDP 特征影响验证码判断,请先确认取证模式:
- ruyiPage + RuyiTrace
- 仅 ruyiPage
- Camoufox + camoufox-reverse-mcp
- 仅 Camoufox
- CloakBrowser
- 用户手动取证
- AI 自行决定
在你确认前,我不会打开页面、截图、抓包、读取 Cookie/Storage 或启动浏览器工具。
```