4.3 KiB
4.3 KiB
已经逆向完成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 / __phantomasdomAutomation*、_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)
你该怎么做(最关键的执行顺序)
- 清除所有 bot 字段:window 上那 20 个变量全部
undefined - 补全 window 枚举一致性(key 列表/结构像真 Chrome)
- 补 Performance:timing + getEntriesByType 返回合理数据
- 补 WebRTC + Audio:RTCPeerConnection / OfflineAudioContext 原型链正确
- 补 Navigator:webdriver=false、languages、maxTouchPoints、plugins 等
- 补 Canvas:构造函数 + 2D context + fillStyle 行为
- 补 Crypto:getRandomValues 可用
- 补 Storage / indexedDB:类型与行为正确
如果你愿意,我也可以把这个总结进一步“落到代码策略层面”: 按 (必须 undefined 的名单清单)+(必须实现的最小接口表)+(原型链/枚举一致性要点) 给你一份可直接对照实现的 checklist。
请你告诉我如何去实现这些,如果做协议过的话。