Files
hello_js_reverse_skill/references/workflow-overview.md
T
白夜 b5cf8b121a feat(v2.4.0): JSVMP 双路径攻克体系 + jsdom 环境补丁知识库
基于实战经验重构 JSVMP 分析框架:

- SKILL.md: 新增路径选择决策树(路径 A 算法追踪 vs 路径 B 环境伪装)
- SKILL.md: 路径 B「环境伪装六步法」完整方法论(采集→对比→分级→补丁→验证→端到端)
- SKILL.md: 新增场景 10「JSVMP + jsdom 环境伪装」、解法模式 E
- SKILL.md: 标注三板斧适用边界与局限,经验法则扩充至 22 条
- references/jsdom-env-patches.md: 新增 jsdom 环境补丁知识库(Function.toString 三层防御 / plugins 完整模拟 / DOM 布局属性 / 30+ API 存根)
- cases/: 新增经验库系统(模板 + 首个 JSVMP 实战案例含 58 项环境检测差异全表)
- references/jsvmp-analysis.md: JSVMP 专项分析详细指南
- references/troubleshooting.md: 常见问题排查指南
- templates/python-request/: Python 项目模板
- 各 references 文档增强、Python 技术栈支持、MCP v1.1 适配(44→52 工具)

Made-with: Cursor
2026-04-02 18:10:05 +08:00

129 lines
3.9 KiB
Markdown
Raw 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.
# JS 逆向工作流总览
## 解法模式决策树
```
目标网站数据接口
│
├─ 能否抓到明确的数据接口?
│ ├─ 否 → WebSocket?→ 场景7
│ │ 页面渲染数据?→ 场景8(字体反爬/CSS干扰)
│ └─ 是 ↓
│
├─ 请求中有加密参数?
│ ├─ 否 → 直接请求即可,检查是否有 Cookie/Header 校验
│ └─ 是 ↓
│
├─ 加密逻辑在哪里?
│ ├─ 明文 JS(可直接定位)→ 模式A:纯 Node.js 还原
│ ├─ 混淆 JS(OB/CFF/eval)→ 反混淆后 → 模式A 或 模式B
│ ├─ 服务端返回 JS 动态执行 → 模式B:VM 沙箱执行
│ ├─ WASM 二进制 → 模式C:WASM 加载
│ ├─ JSVMP 虚拟机保护 → 先尝试 I/O 定位,失败则 → 模式D
│ └─ 无法脱离浏览器环境 → 模式D:浏览器自动化
│
├─ 纯请求方案是否可行?
│ ├─ 请求成功 → 完成
│ └─ 请求失败(token failed / 403)↓
│
└─ TLS 指纹 / HTTP/2 检测?
├─ 是 → 切换到模式D 或使用 HTTP/2
└─ 否 → 检查 Cookie、时间戳、参数拼接错误
```
## 模式详解
### 模式 A:纯 Node.js 算法还原
**适用条件**:
- 加密算法可用标准库实现(MD5/SHA/AES/DES/RSA/HMAC)
- 无浏览器环境检测
- 无 TLS 指纹校验
**技术栈**:
- `crypto`(Node.js 内置)— MD5/SHA/AES/DES/HMAC
- `crypto-js` — CryptoJS 兼容实现
- `node-rsa` / `node-forge` — RSA 加解密
- `axios` / `node-fetch` — HTTP 请求
- `http2`(Node.js 内置)— HTTP/2 请求
**模板**:`templates/node-request/`
### 模式 B:Node vm 沙箱执行
**适用条件**:
- 服务端返回混淆 JS,需要 eval 执行生成 Cookie/Token
- 加密逻辑依赖大量上下文,手动还原成本过高
**技术栈**:
- `vm`(Node.js 内置)— 沙箱执行
- `vm2` — 更安全的沙箱(可选)
- `jsdom` — 模拟 DOM 环境(可选)
**注意事项**:
- 必须构造最小沙箱环境(document、navigator、location 等)
- Cookie setter 需要拦截
- setTimeout/setInterval 需要提供但可能需要限制
**模板**:`templates/vm-sandbox/`
### 模式 C:WASM 加载还原
**适用条件**:
- 加密函数通过 WebAssembly 实现
- WASM 有明确的导出函数接口
**技术栈**:
- `fs`(Node.js 内置)— 读取 .wasm 文件
- `WebAssembly`(Node.js 内置)— 加载和实例化
**注意事项**:
- 先验证 I/O,不要先反编译 WASM
- 检查 `WebAssembly.Module.imports()` 了解环境依赖
- wasm-bindgen 生成的 WASM 需要补 `Window` 类和 DOM
- `unreachable` panic 通常是环境缺失
**模板**:`templates/wasm-loader/`
### 模式 D:浏览器自动化
**适用条件**:
- TLS 指纹检测,纯请求无法通过
- 复杂环境依赖(window 蜜罐、Canvas 指纹等)
- 加密逻辑过于复杂,还原成本远大于自动化
**技术栈**:
- `playwright-core` — 浏览器自动化
- `camoufox-reverse` MCP — Camoufox 反检测浏览器、Hook、网络捕获、源码搜索
**注意事项**:
- 优先使用 Camoufox 独立浏览器实例,避免污染用户日常浏览环境
- 通过 `inject_hook_preset` / `add_init_script` 注入脚本截取中间数据
- 控制请求频率并结合 `check_detection` 验证反检测效果
**模板**:`templates/browser-auto/`
## 通用调试流程
```
1. 启动 Camoufox 并开启网络捕获
↓
2. 触发目标操作(搜索/翻页/登录)
↓
3. 找到数据接口,分析参数
↓
4. 用 `search_code` 搜索参数名定位 JS 源码
↓
5. 用 `get_request_initiator` / `set_breakpoint_via_hook` 追踪调用栈
↓
6. 在关键函数设置伪断点或 `trace_function`
↓
7. 单步调试确认加密逻辑
↓
8. 还原算法并对比中间值
↓
9. 编写 Node.js 脚本
↓
10. 运行验证
```