Files
reverse-skills-max/vendor-new/xbsReverseSkill/web-reverse-algorithm/references/01-decision-tree.md

4.1 KiB
Raw Blame History

决策树与路由

一、先问 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
  • 返回包也可能要解密

代表:

  • 网易云音乐
  • 部分响应解密题

信号:

  • 值写进 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. 再决定是否反编译或迁移。

四、统一闭环

目标字段
<- 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