跳到正文

CreepJS 详解

CreepJS 是研究人员和指纹浏览器开发者最常用的指纹识别测试。它不给出通过或失败的结论,而是展示你的浏览器暴露了什么、哪些数值相互矛盾,以及三个衡量它看起来有多像 headless 或 stealth 的百分比。

Abraham Juliot 的开源研究项目. 打开 CreepJS

CreepJS 是什么?

CreepJS 是 Abraham Juliot 开发的开源指纹识别研究页面,托管在 GitHub Pages 上。它收集的信号范围非常广,从 WebGL、音频到字体、Worker 和 WebRTC,并对每个部分分别计算哈希,因此你可以准确看到两次访问之间指纹的哪一部分发生了变化。

它的突出之处在于会寻找谎言(lies):被 JavaScript 篡改过的数值,或页面与 Web Worker 之间对不上的数值。它的“Headless”部分把这些归纳为三个数字。由于它是开源的,你可以准确读到每项检查是怎么实现的。

CreepJS 检查哪些内容

Headless

三个百分比:浏览器与无头浏览器有多相似(“like headless”)、显示出多少明确的无头特征(“headless”),以及显示出多少 stealth 补丁的迹象(“stealth”)。

Lies

在 JavaScript 中被覆写的浏览器函数,这正是大多数 stealth 插件的工作方式,也是 CreepJS 抓出它们的方式。

Workers

在 Web Worker 中读取并与页面对比的数值:User-Agent、GPU、时区、语言、核心数和内存。

渲染

Canvas、WebGL、音频、字体和 DOM rect 测量值,各自计算哈希。

WebRTC、时区及其他

网络候选地址、时区与语言区域、屏幕,以及几十个较小的部分。

如何解读 CreepJS 的结果

% like headless
在无头浏览器中常见、但也会出现在普通浏览器中的弱信号。这里的数字不为零是正常的。
% headless
无头或自动化浏览器的明确迹象。这才是需要盯住的数字。
% stealth
stealth 补丁的迹象,例如被覆写的函数。JavaScript stealth 插件会在这里现形。
FP ID 与模糊哈希
代表你整个指纹的标识符。只要有任何变化它们就会改变,所以用于比较不同的访问,而不是用来评判一个浏览器。

真实浏览器的得分

测量时间为 2026 年 9 月 20 日和 21 日,使用荷兰一条家庭光纤线路上的一台 Windows 11 电脑(NVIDIA RTX 3070),未使用代理或 VPN。共三款浏览器:一位用户日常手动使用、装有广告拦截器的 Chrome 153;由 Playwright 驱动的同一款官方 Chrome 153;以及由 Playwright 驱动并设置了指纹种子的 Clearcote 153。

浏览器CreepJS 的结论
日常使用的 Chrome 153,手动操作19% like headless · 0% headless · 0% stealth
官方 Chrome 153,Playwright 驱动25% like headless · 33% headless · 0% stealth
Clearcote 153,Playwright + 种子25% like headless · 0% headless · 0% stealth

“headless”数值正是自动化露馅的地方:Playwright 驱动下的官方 Chrome 为 33%,Clearcote 和那位用户自己的 Chrome 均为 0%。Clearcote 的 stealth 为 0% 在意料之中,因为它是在引擎内部修改数值,而不是在 JavaScript 中覆写函数,所以谎言检测找不到任何东西。

普通浏览器也会出现的结果

  • “like headless”百分比不为零。就连那位用户自己的 Chrome 也显示 19%。
  • 以 .local 结尾的 WebRTC host 候选地址被当作泄露。这是 Chrome 的 mDNS 保护在隐藏你的本地地址,而不是暴露它;正因如此,Clearcote 审计将其计为通过。

常见问题

什么样的 CreepJS 结果算好?

真正重要的是 0% headless 和 0% stealth。“like headless”百分比在十几到二十几之间是正常的;在我们的测试中,一位用户的日常 Chrome 显示为 19%。

为什么 CreepJS 每次显示的指纹 ID 都不一样?

这个 ID 是它测量的全部内容的哈希,所以任何变化,从新增一个字体到窗口尺寸不同,都会改变它。它用于比较两次访问,而不是作为分数。

CreepJS 能检测出 puppeteer-extra-plugin-stealth 吗?

它的设计目标就是抓出在 JavaScript 中被覆写的函数,而该插件恰恰是这样工作的;这会体现在 lies 和 stealth 百分比中。这种做法为何会暴露自己,请参阅 stealth 插件对比。

CreepJS 和 Clearcote 审计是一回事吗?

不一样。CreepJS 是一个展示原始发现的研究页面;Clearcote 审计会运行 294 项一致性检查,并对每个结果做出解释。两者有重叠,也在少数地方看法不同,例如 mDNS WebRTC 候选地址。

想了解每一项检查的含义?

Clearcote 审计会对打开它的任何浏览器运行 294 项一致性检查,每一项都附有通俗易懂的英文说明和修复方法。免费,无需账号。