reverse-skills-max: initial public release (restored, redacted, hardened)
This commit is contained in:
@@ -0,0 +1,219 @@
|
||||
# 决策树与路由
|
||||
|
||||
## 一、先问 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`
|
||||
Reference in New Issue
Block a user