- case: add jsvmp-dual-sign-xhr-intercept-cacheOpts-jsdom-firefox (behavior type) Fingerprints: webmssdk/byted_acrawler/cacheOpts/X-Bogus+X-Gnarly dual sign Core tech: jsdom Firefox env emulation + XHR/fetch dual-channel intercept + cacheOpts init Pitfalls: 12 gotchas documented - SKILL.md: 9 changes - env emulation step 0.5: confirm sign function entry before patching - experience rules expanded 32 -> 40 - scene 10/11: navigate params + CSP pre-check - core weapon: MCP v0.5.0 -> v0.6.0 (68 tools) - error handling: 3 new failure patterns - cases/_template.md: add anti-bot type + key experience sections - cases/README.md: add fingerprint matching table + variant diagram - sanitize: remove all site names from all files
151 lines
3.4 KiB
Markdown
151 lines
3.4 KiB
Markdown
# [案例名称:用技术特征命名,如 OB混淆+AES-CBC+动态密钥]
|
||
|
||
> 难度:★☆☆☆☆ ~ ★★★★★
|
||
> 还原方案:[A: 纯算法还原 / B: 沙箱执行 / C: WASM 加载 / D: 浏览器自动化 / E: jsdom 环境模拟]
|
||
> 实现语言:[Node.js / Python / 双语言]
|
||
> 最后验证日期:YYYY-MM-DD
|
||
> 平台类型:[如:短视频平台 / 电商平台 / 社交平台 / 通用]
|
||
|
||
---
|
||
|
||
## 技术指纹(供 Phase 0.5 自动匹配)
|
||
|
||
### JS 特征
|
||
- [ ] 特征1:描述 + 可搜索的关键词/正则
|
||
- [ ] 特征2:...
|
||
|
||
### 参数特征
|
||
- [ ] 参数名: [名称] | 长度: [N] | 字符集: [hex/base64/自定义] | 编码: [描述]
|
||
- [ ] ...
|
||
|
||
### 请求特征
|
||
- [ ] 特征1:如预热接口、XHR 拦截、多层 SDK 加载顺序
|
||
- [ ] ...
|
||
|
||
### 反调试特征
|
||
- [ ] 特征1:如 debugger 陷阱、Function.toString 检测
|
||
- [ ] ...
|
||
|
||
### 混淆类型
|
||
- [ ] 类型:OB混淆 / JSVMP / 控制流平坦化 / eval打包 / 其他
|
||
|
||
### 指纹检测规则(Agent 执行)
|
||
|
||
```
|
||
快速检测命令(30秒内完成):
|
||
- search_code(keyword="关键词1") → 命中条件
|
||
- search_code(keyword="关键词2") → 命中条件
|
||
- list_scripts → 文件体积条件
|
||
匹配判定:以上 N 项中命中 M 项以上 → 高置信度匹配
|
||
```
|
||
|
||
---
|
||
|
||
## 反爬类型判定(v2.7.0 新增)
|
||
|
||
> 在进入加密方案分析之前,必须先判定反爬类型。参考 SKILL.md「反爬类型识别与工具选择」章节。
|
||
|
||
```
|
||
判定步骤:
|
||
1. navigate(url) 不加任何 hook → 观察 redirect_chain
|
||
2. 按三分法判断:签名型 / 行为型 / 纯混淆
|
||
3. 记录判定结果和依据
|
||
|
||
判定结果:[签名型 / 行为型 / 纯混淆]
|
||
判定依据:[如 "redirect_chain 直接 200,页面后续 XHR 带 X-Bogus 签名参数 → 行为型"]
|
||
工具路径:[如 "四板斧全开" / "仅源码级插桩" / "任意组合"]
|
||
```
|
||
|
||
---
|
||
|
||
## 加密方案
|
||
|
||
- **算法**:[具体算法名称和模式]
|
||
- **密钥来源**:[硬编码 / 接口下发 / 动态计算 / 环境指纹]
|
||
- **加密流程**:
|
||
1. [步骤1]
|
||
2. [步骤2]
|
||
3. ...
|
||
- **签名公式**:`sign = 算法(参数1 + 参数2 + ... + 密钥)`(如可提取)
|
||
|
||
---
|
||
|
||
## 已验证定位路径(Phase 0.5 命中后直接执行)
|
||
|
||
```
|
||
步骤 1: [具体 MCP 操作和关键词]
|
||
步骤 2: [...]
|
||
步骤 3: [...]
|
||
...
|
||
```
|
||
|
||
---
|
||
|
||
## 还原代码模板
|
||
|
||
### 核心函数
|
||
|
||
```javascript
|
||
// Node.js 还原代码
|
||
```
|
||
|
||
```python
|
||
# Python 还原代码(如适用)
|
||
```
|
||
|
||
### 环境补丁(如需要)
|
||
|
||
```javascript
|
||
// 环境模拟代码
|
||
```
|
||
|
||
---
|
||
|
||
## 踩坑记录
|
||
|
||
| # | 坑 | 现象 | 解决方法 |
|
||
|---|---|------|---------|
|
||
| 1 | | | |
|
||
| 2 | | | |
|
||
|
||
---
|
||
|
||
## 变体说明
|
||
|
||
| 变体 | 差异点 | 影响 |
|
||
|------|--------|------|
|
||
| A | | |
|
||
| B | | |
|
||
|
||
---
|
||
|
||
## 浏览器指纹采集方法(如涉及环境伪装)
|
||
|
||
> 仅当还原方案涉及环境模拟(jsdom / vm 沙箱)时需要此段
|
||
|
||
```javascript
|
||
// 使用 camoufox-reverse MCP 在真实浏览器中采集指纹的代码
|
||
```
|
||
|
||
---
|
||
|
||
## 环境检测差异表(如涉及环境伪装)
|
||
|
||
> 仅当还原方案涉及环境模拟时需要此段
|
||
|
||
| 检测点 | 真实浏览器值 | 模拟环境原始值 | 修复方式 |
|
||
|--------|-------------|---------------|---------|
|
||
| | | | |
|
||
|
||
---
|
||
|
||
## 关键经验总结(v2.7.0 新增)
|
||
|
||
> 本次逆向分析中最有价值的经验,供后续类似场景参考
|
||
|
||
### 1. [经验标题]
|
||
[经验描述]
|
||
|
||
### 2. [经验标题]
|
||
[经验描述]
|