已经逆向完成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. **补 Performance:timing + getEntriesByType 返回合理数据** 4. **补 WebRTC + Audio:RTCPeerConnection / OfflineAudioContext 原型链正确** 5. **补 Navigator:webdriver=false、languages、maxTouchPoints、plugins 等** 6. **补 Canvas:构造函数 + 2D context + fillStyle 行为** 7. **补 Crypto:getRandomValues 可用** 8. **补 Storage / indexedDB:类型与行为正确** --- 如果你愿意,我也可以把这个总结进一步“落到代码策略层面”: 按 **(必须 undefined 的名单清单)+(必须实现的最小接口表)+(原型链/枚举一致性要点)** 给你一份可直接对照实现的 checklist。 请你告诉我如何去实现这些,如果做协议过的话。