Files
reverse-skills-max/vendor-new/xbsReverseSkill/web-reverse-algorithm/references/purecalc-patterns.md

2.7 KiB
Raw Blame History

纯算模式

适用目的

在确定目标不是纯验证码图片题之后,用这份文档选择更细的纯算路径。

一、标准签名题

核心结构

request params
-> normalize / stringify / sort
-> inject token / timestamp / ua
-> hash / encrypt
-> final sign

高频模式

  • query_string -> sha1 -> md5
  • token&t&appKey&data -> md5
  • client + mysticTime + product + key -> md5
  • params -> aes -> aes -> rsa

必查点

  1. 原始串字段顺序
  2. URL 编码和 JSON 序列化格式
  3. token、cookie、UA、时间戳来源
  4. 是否还有响应解密链

二、Cookie / Header 题

核心结构

source(cookie/storage/location)
-> builder
-> header/cookie writer

优先动作

  1. Hook document.cookie
  2. Hook fetch / XMLHttpRequest.send
  3. 记录 header/body 最终长相
  4. 回溯 writer 上游

常见坑

  • 把初始化 cookie 当成业务 cookie
  • 只记录最终值,不记录写入调用栈
  • 漏掉页面状态和 location 参数

三、JSVMP / VMP 题

高危信号

  • 数组很大
  • 大量位运算
  • switch 分发密集
  • 值逐位拼接

推荐打法

  1. 先找最终输出和中间数组
  2. 先做低风险 AST:字符串表、常量折叠、死代码删除
  3. 对数组写入点、对象取值点、位运算点做 logpoint
  4. 先恢复中间 payload,再恢复最终编码

不要这样做

  • 不要要求 AST 一次性完整还原 VM
  • 不要用普通断点硬扛高频状态机
  • 不要在没抓到中间态前整体迁移整段 VM

四、Wasm 题

高危信号

  • WebAssembly.instantiate
  • 导出函数直接影响 sign
  • JS 中只看到薄封装

推荐打法

  1. 找 wasm 加载点
  2. 找导出函数名
  3. 喂固定输入看输出
  4. 能改写成 JS/Python 则优先改写
  5. 只在必要时再做深度反编译

五、标准算法与自定义编码的分界

很多复杂题不是“整题都是自定义算法”,而是:

标准参数归一化
-> 中间 payload
-> 自定义转序/位运算/编码
-> 标准 hash 或再次包装

优先把这 4 段拆开,不要整段一起抄。

六、固定不稳定输入

纯算落地前,优先固定这些值:

  • Date.now()
  • Math.random()
  • crypto.getRandomValues
  • cookie 中的动态 token
  • navigator.userAgent
  • challenge 初始化对象

如果不先固定这些输入,经常会出现“长度对、值不对”。

七、最小落地结果

完成一题后,至少沉淀这些内容:

  1. build_input(...)
  2. build_raw_string(...) 或 build_payload(...)
  3. sign(...) / encrypt(...)
  4. 一个浏览器对齐样本
  5. 一个本地校验样本