This commit is contained in:
dela
2026-02-21 18:27:49 +08:00
parent 0ac4b23f07
commit 5dc86ccfbf
270 changed files with 49508 additions and 4636 deletions

83
docs/env.md Normal file
View File

@@ -0,0 +1,83 @@
已经逆向完成hsw.js需要的参数了
下面是你这份 **HSW 指纹优先级分析报告** 的精炼总结(按“必须先做什么、做到什么程度”来讲清楚):
## 结论一句话
**先把所有 Bot 痕迹字段彻底清零(必须为 `undefined`),再把 `window / performance / navigator / WebRTC / audio / canvas` 这些核心指纹对象“补全且像真 Chrome 一样”。**
顺序错了也会死Bot 字段没清干净,后面再像也没用。
---
## P0必须正确处理
### A) 高频核心 API决定整体流程是否能跑通
这些是 hsw 几乎每步都会读的,缺属性/类型不对就直接崩或落入异常路径:
* **Window最高**`window` 对象必须“完整可枚举”mock 不能只做几个字段,要接近真实 Chrome 的结构与 key 列表。
* **Performance**:至少要有 `timing``getEntriesByType()`,返回数据要“看起来合理”,否则采集逻辑断。
* **RTCPeerConnection**WebRTC 指纹点,要求 **构造函数可用 + 原型链正确**(不只是 `function(){}`)。
* **PerformanceResourceTiming**resource timing 记录数组会被读,用来模拟网络请求痕迹。
* **OfflineAudioContext**:音频指纹点,必须能 `new` 且原型链像浏览器。
* **Navigator**:会被连续读取多属性,类型和值要一致。
* **Promise / Request**:会做原型链/`toString` 污染检测,尤其 **Promise.toString() 不能异常**`Request` 作为 fetch 体系关键构造函数也会被查。
### B) Bot 检测字段(强规则:必须不存在)
这一组在 **tH=154/155** 集中枚举 `window`,只要发现“存在”就直接判 bot。
**要求:在你的 mock window 里它们全部必须是 `undefined`(一个都不能漏)**,包括但不限于:
* `window.webdriver`(同时 `navigator.webdriver` 也要是 `false`
* 各类 `cdc_*` / `$cdc_*` / `__webdriver_*` / `__driver_*` / `__selenium_*`
* `callPhantom / callSelenium / _selenium / __nightmare / __phantomas`
* `domAutomation*``_WEBDRIVER_ELEM_CACHE``spawn``hcaptchaCallbackZenno`
---
## P1高优先级建议尽快补齐
这些是常见高命中指纹点,缺了容易露馅:
* **Canvas**`HTMLCanvasElement``CanvasRenderingContext2D` 必须存在;`fillStyle` 默认值 `#000000` 会被检测(实现要像浏览器)。
* **indexedDB / IDBFactory**`window.indexedDB` 的类型结构要对。
* **screen / Screen**:分辨率等属性要合理。
* **Storage**`localStorage/sessionStorage` 类型与行为要像浏览器。
* **PluginArray**`navigator.plugins` 类型检测。
* **crypto**`window.crypto.getRandomValues()` 必须可调用。
* **document / HTMLDocument**:类型检测要过。
* **navigator.languages**:必须是非空数组(例如 `["en-US"]`)。
* **navigator.maxTouchPoints**:桌面环境通常为 `0`
* **atob**`window.atob` 必须存在且可调用。
* **__wdata**:用于 window 属性枚举指纹key 列表对比)。
---
## P2中优先级补齐更像真环境
* `ontouchstart`:桌面应为 `undefined`(不存在)
* `Notification.permission``"default"``"denied"`
* `performance.getEntriesByType`:方法必须存在
* `PerformanceResourceTiming.finalResponseHeadersStart`:子属性补齐
* `navigator.connection`NetworkInformation
* `navigator.userAgentData`UA-CH
---
## 你该怎么做(最关键的执行顺序)
1. **清除所有 bot 字段window 上那 20 个变量全部 `undefined`**
2. **补全 window 枚举一致性key 列表/结构像真 Chrome**
3. **补 Performancetiming + getEntriesByType 返回合理数据**
4. **补 WebRTC + AudioRTCPeerConnection / OfflineAudioContext 原型链正确**
5. **补 Navigatorwebdriver=false、languages、maxTouchPoints、plugins 等**
6. **补 Canvas构造函数 + 2D context + fillStyle 行为**
7. **补 CryptogetRandomValues 可用**
8. **补 Storage / indexedDB类型与行为正确**
---
如果你愿意,我也可以把这个总结进一步“落到代码策略层面”:
**(必须 undefined 的名单清单)+(必须实现的最小接口表)+(原型链/枚举一致性要点)** 给你一份可直接对照实现的 checklist。
请你告诉我如何去实现这些,如果做协议过的话。