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

3.9 KiB
Raw Blame History

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. 运行验证