Files

147 lines
2.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 调试、补环境与检查点
## 适用目的
在已经锁定目标字段后,用这份文档决定如何布断点、何时 hook、何时最小补环境,以及如何做浏览器/本地对齐。
## 一、优先用 hook 和检查点
优先级建议:
1. Hook / logpoint
2. 调用栈回溯
3. 条件断点
4. 普通断点
理由:
- hook 更适合持续采样
- logpoint 更适合高频状态机
- 调用栈更容易分清 builder 和 wrapper
## 二、最值钱的 hook 点
### 请求链
- `fetch`
- `XMLHttpRequest.prototype.open`
- `XMLHttpRequest.prototype.send`
- `setRequestHeader`
- `JSON.stringify`
### 结果写出点
- `document.cookie`
- 目标对象字段写入
- 已知 builder 函数
### 运行时代码
- `eval`
- `Function`
- `Date.now`
- `Math.random`
- `crypto.getRandomValues`
## 三、最小补环境优先级
### P0:先保证代码能进入 builder
- `window`
- `self`
- `globalThis`
- `document`
- `navigator`
- `location`
### P1:再保证 builder 输入正确
- `document.cookie`
- `localStorage`
- `sessionStorage`
- `performance`
- `Date`
- `crypto`
- `screen`
- `history`
### P2:最后才考虑拟真指纹层
- `canvas`
- `webgl`
- `audio`
- `plugins`
- `mimeTypes`
- `RTCPeerConnection`
- `indexedDB`
- `Intl`
默认只补到 P0 或 P1,除非证据明确指向指纹层。
## 四、判断是不是环境问题
### 先补环境的信号
- 入口直接报对象未定义
- 浏览器和本地中间态差异显著
- 关键结果显著依赖 `cookie/storage/ua/fingerprint`
### 不要先补环境的信号
- 已经收缩成纯函数
- 真实问题是入口没找对
- 真实问题是 token、cookie、challenge 没喂进去
## 五、四层检查点
### 1. source 检查点
记录:
- cookie
- storage
- UA
- 页面配置
- challenge 初值
### 2. builder 输入检查点
记录真正喂给 builder 的对象。
### 3. builder 中间态检查点
记录:
- 原始串
- 中间数组
- payload
- 编码前字节流
### 4. 最终输出检查点
记录:
- sign
- token
- collect
- verify payload
## 六、浏览器与本地对齐
每次做本地复现时都执行这套对比:
1. builder 输入是否一致
2. 原始串是否一致
3. 中间数组或 payload 是否一致
4. 最终编码前数据是否一致
5. 最终结果是否一致
只比较最终值,定位成本会非常高。
## 七、常见误区
1. 先补环境,再找入口
2. 只追求不报错
3. 一上来深拟真所有原型链
4. 只在最终值处打点
5. 没有保存任何中间工件