Files
hcapEnv/docs/env.md
2026-02-21 18:27:49 +08:00

83 lines
4.3 KiB
Markdown
Raw 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.
已经逆向完成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。
请你告诉我如何去实现这些,如果做协议过的话。