2.7 KiB
2.7 KiB
纯算模式
适用目的
在确定目标不是纯验证码图片题之后,用这份文档选择更细的纯算路径。
一、标准签名题
核心结构
request params
-> normalize / stringify / sort
-> inject token / timestamp / ua
-> hash / encrypt
-> final sign
高频模式
query_string -> sha1 -> md5token&t&appKey&data -> md5client + mysticTime + product + key -> md5params -> aes -> aes -> rsa
必查点
- 原始串字段顺序
- URL 编码和 JSON 序列化格式
- token、cookie、UA、时间戳来源
- 是否还有响应解密链
二、Cookie / Header 题
核心结构
source(cookie/storage/location)
-> builder
-> header/cookie writer
优先动作
- Hook
document.cookie - Hook
fetch/XMLHttpRequest.send - 记录 header/body 最终长相
- 回溯 writer 上游
常见坑
- 把初始化 cookie 当成业务 cookie
- 只记录最终值,不记录写入调用栈
- 漏掉页面状态和 location 参数
三、JSVMP / VMP 题
高危信号
- 数组很大
- 大量位运算
- switch 分发密集
- 值逐位拼接
推荐打法
- 先找最终输出和中间数组
- 先做低风险 AST:字符串表、常量折叠、死代码删除
- 对数组写入点、对象取值点、位运算点做 logpoint
- 先恢复中间 payload,再恢复最终编码
不要这样做
- 不要要求 AST 一次性完整还原 VM
- 不要用普通断点硬扛高频状态机
- 不要在没抓到中间态前整体迁移整段 VM
四、Wasm 题
高危信号
WebAssembly.instantiate- 导出函数直接影响 sign
- JS 中只看到薄封装
推荐打法
- 找 wasm 加载点
- 找导出函数名
- 喂固定输入看输出
- 能改写成 JS/Python 则优先改写
- 只在必要时再做深度反编译
五、标准算法与自定义编码的分界
很多复杂题不是“整题都是自定义算法”,而是:
标准参数归一化
-> 中间 payload
-> 自定义转序/位运算/编码
-> 标准 hash 或再次包装
优先把这 4 段拆开,不要整段一起抄。
六、固定不稳定输入
纯算落地前,优先固定这些值:
Date.now()Math.random()crypto.getRandomValues- cookie 中的动态 token
navigator.userAgent- challenge 初始化对象
如果不先固定这些输入,经常会出现“长度对、值不对”。
七、最小落地结果
完成一题后,至少沉淀这些内容:
build_input(...)build_raw_string(...)或build_payload(...)sign(...)/encrypt(...)- 一个浏览器对齐样本
- 一个本地校验样本