4.1 KiB
4.1 KiB
决策树与路由
一、先问 4 个问题
- 真正决定成败的是哪条请求、哪次 cookie 写入、哪次 verify、哪帧 WebSocket。
- 目标字段长什么样:
sign / cookie / header / body / verify payload / track / collect / image result。 - 当前题型属于哪类:标准签名、混合加密、Cookie/Header、JSVMP/VMP、Wasm/协议、验证码。
- 当前阻塞点属于哪类:入口、原始串、中间态、环境、图像线、协议线。
如果这 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
- 看了很多代码仍然找不到真实输入边界
优先动作:
- 回到最终请求或最终 sink。
- 重建
writer <- builder <- entry <- source。 - 暂停做补环境和整体迁移。
B. 原始串没对齐
信号:
- 最终长度对但值不对
- hash 前原文和浏览器不同
- JSON / query / path / cookie 顺序不对
优先动作:
- 打印原始串。
- 固定时间戳和随机数。
- 检查 token、cookie、UA、序列化格式。
C. 中间态没采到
信号:
- JSVMP 题只知道最终输出
- AST 做完仍然无法下手
- 复杂 builder 没有任何关键数组和对象
优先动作:
- 对数组写入点插桩。
- 对 builder 做输入输出 hook。
- 用 logpoint 代替高频断点。
D. 运行时依赖没补齐
信号:
window/document/navigator未定义- 浏览器与本地中间态差异大
collect、环境位串、指纹值明显不一致
优先动作:
- 收缩到最小入口。
- 记录真实访问属性。
- 只补进入 builder 的必要对象。
E. 图像线和参数线没拆开
信号:
- 一边调距离,一边调签名,一直不知道谁错
- verify 字段很多,却没有分线记录
优先动作:
- 单独保存识别结果。
- 单独保存 builder 输入对象。
- 让识别结果作为 builder 显式输入。
F. 协议边界没证明
信号:
- 二进制帧很多,但不知哪一段是真校验
- Wasm、protobuf、WS 全混在一起
优先动作:
- 先数包或先列导出函数。
- 证明输入输出关系。
- 再决定是否反编译或迁移。
四、统一闭环
目标字段
<- writer
<- builder
<- entry
<- source
然后固定这 5 层检查点:
- writer 检查点
- builder 输入
- 原始串 / payload
- 中间数组 / 中间对象
- 最终输出
五、常用标签
header-signcookie-signresponse-decryptcaptchavmpjsvmpwasmprotobufwebsocketenvfingerprintastsolverservice