Files

219 lines
4.1 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.

# 决策树与路由
## 一、先问 4 个问题
1. 真正决定成败的是哪条请求、哪次 cookie 写入、哪次 verify、哪帧 WebSocket。
2. 目标字段长什么样:`sign / cookie / header / body / verify payload / track / collect / image result`。
3. 当前题型属于哪类:标准签名、混合加密、Cookie/Header、JSVMP/VMP、Wasm/协议、验证码。
4. 当前阻塞点属于哪类:入口、原始串、中间态、环境、图像线、协议线。
如果这 4 个问题答不清,就不要直接抄大文件。
## 二、题型判断
### 1. 标准签名题
信号:
- 输出长度规整
- `md5/sha1/hmac`
- 原始串可恢复
- 请求字段关系稳定
代表:
- 财联社
- 百度翻译
- 有道翻译
- 淘宝 H5
### 2. 混合加密题
信号:
- 对称加密和非对称包装并存
- `params + encSecKey`
- 返回包也可能要解密
代表:
- 网易云音乐
- 部分响应解密题
### 3. Cookie / Header / 多参数联动题
信号:
- 值写进 `document.cookie`
- 或多个字段共同收口成最终 header
- 中间字段承担不同角色
代表:
- 盼之 cookie
- 滴滴 `dd03/dd05/wsgsig`
- 某农网 `X-CLIENT-SIGN`
### 4. JSVMP / VMP 题
信号:
- 大数组
- `for(;;) + switch`
- 寄存器式状态机
- 值逐位、逐段、逐数组构造
代表:
- 抖音 `a_bogus`
- 小红书 `x-s`
- QQ 音 VMP
### 5. Wasm / 协议题
信号:
- `WebAssembly.instantiate`
- protobuf / 二进制 payload
- WebSocket 分段交互
代表:
- Wasm 签名题
- Spiderdemo T6
- V5 / hCaptcha 某些阶段
### 6. 验证码 / 风控题
信号:
- 至少两段请求
- 图像、参数、环境并存
- `collect/w/fs/pow_answer` 等字段
代表:
- 腾讯滑块
- 极验 3/4 代
- 网易盾
- 百度旋转
- 阿里 v2
## 三、阻塞点判断
### A. 入口没找对
信号:
- 说不清 writer 是谁
- 本地跑的是 wrapper,不是 builder
- 看了很多代码仍然找不到真实输入边界
优先动作:
1. 回到最终请求或最终 sink。
2. 重建 `writer <- builder <- entry <- source`。
3. 暂停做补环境和整体迁移。
### B. 原始串没对齐
信号:
- 最终长度对但值不对
- hash 前原文和浏览器不同
- JSON / query / path / cookie 顺序不对
优先动作:
1. 打印原始串。
2. 固定时间戳和随机数。
3. 检查 token、cookie、UA、序列化格式。
### C. 中间态没采到
信号:
- JSVMP 题只知道最终输出
- AST 做完仍然无法下手
- 复杂 builder 没有任何关键数组和对象
优先动作:
1. 对数组写入点插桩。
2. 对 builder 做输入输出 hook。
3. 用 logpoint 代替高频断点。
### D. 运行时依赖没补齐
信号:
- `window/document/navigator` 未定义
- 浏览器与本地中间态差异大
- `collect`、环境位串、指纹值明显不一致
优先动作:
1. 收缩到最小入口。
2. 记录真实访问属性。
3. 只补进入 builder 的必要对象。
### E. 图像线和参数线没拆开
信号:
- 一边调距离,一边调签名,一直不知道谁错
- verify 字段很多,却没有分线记录
优先动作:
1. 单独保存识别结果。
2. 单独保存 builder 输入对象。
3. 让识别结果作为 builder 显式输入。
### F. 协议边界没证明
信号:
- 二进制帧很多,但不知哪一段是真校验
- Wasm、protobuf、WS 全混在一起
优先动作:
1. 先数包或先列导出函数。
2. 证明输入输出关系。
3. 再决定是否反编译或迁移。
## 四、统一闭环
```text
目标字段
<- writer
<- builder
<- entry
<- source
```
然后固定这 5 层检查点:
1. writer 检查点
2. builder 输入
3. 原始串 / payload
4. 中间数组 / 中间对象
5. 最终输出
## 五、常用标签
- `header-sign`
- `cookie-sign`
- `response-decrypt`
- `captcha`
- `vmp`
- `jsvmp`
- `wasm`
- `protobuf`
- `websocket`
- `env`
- `fingerprint`
- `ast`
- `solver`
- `service`