跳到正文
开放配置库 · GPL-3.0

真实采集,拿来即用

不再使用由种子 (seed) 合成的身份画像 (persona),而是通过 --fingerprint-profile 报告从一台真实 Chrome 机器上采集到的数值:它的 GPU 字符串、屏幕、字体和硬件数值。clearcote-profiles 配置库把开放的 chrome-fingerprints 数据集(约 10k 条真实 Windows Chrome 采集记录)转换成了数千个一致、开箱即用的配置文件。

72

精选样本,均经过验证,覆盖多种 GPU,开箱即用

~8.5k

完整生成的配置库中的配置文件数

~10k

源数据集中的真实 Chrome 采集记录

经过筛选,而不只是格式转换。在软件渲染(SwiftShader / llvmpipe)下或虚拟机(Parallels / VMware / VirtualBox)内采集的记录都已剔除——虚拟机显卡本身就是一个破绽。为保持透明,被剔除的记录保留在仓库的 excluded/ 目录中;旁边的 index.json 清单为每个配置文件标注了 GPU 厂商、系列、屏幕和并发数(样本集中 Intel 29 · NVIDIA 34 · AMD 9)。

配置文件包含什么,又刻意不包含什么

它报告的数值

  • GPU:WebGL 的 unmasked vendor/renderer 字符串、getParameter 参数表,以及支持的扩展列表
  • 屏幕:分辨率、可用区域、色深、设备像素比、色域
  • 硬件:hardwareConcurrency 和 deviceMemory
  • 字体、语音合成音色、音频采样率 & 延迟

浏览器版本(保持最新)

配置文件不包含 User-Agent、Chrome 版本或 UA-CH 品牌信息。源数据集来自 Chrome 117,而 Clearcote 搭载的引擎要新得多。如果导入旧版本,浏览器就会声称自己是 117,行为却仍是它的真实版本——这种不一致本身就能被检测出来。Clearcote 保持自己的当前版本,只借用采集到的数值。

samples/vinyzu-04201.json — 节选
{
  "meta": { "id": "vinyzu-04201", "gpu_vendor": "Intel", "gpu_family": "Arc" },
  "hardware_concurrency": 12,
  "device_memory": 8,
  "screen": { "width": 1920, "height": 1080, "color_depth": 24, "device_pixel_ratio": 1 },
  "webgl": {
    "UNMASKED_VENDOR_WEBGL": "Google Inc. (Intel)",
    "UNMASKED_RENDERER_WEBGL": "ANGLE (Intel, Intel(R) Arc(TM) A770 Graphics Direct3D11 vs_5_0 ps_5_0, D3D11)"
  },
  "fonts": { "detected": ["Arial", "Calibri", "Cambria", "Consolas", "Segoe UI", "… 390 more"] },
  "audio": { "BaseAudioContextSampleRate": 48000, "AudioContextBaseLatency": 0.01 }
}

你实际下载到的就是这样的文件:每个配置文件就是一个 JSON 文件。这一个来自一台 Intel Arc A770 台式机,是一台真实机器完整采集下来的报告数值:Arc A770 驱动参数表、12 线程、8 GB 内存、1080p 屏幕和 395 款已安装字体。samples/ 中另有 71 个,还有约 8.5k 个可通过 generate.py 生成。

配置文件不是什么:硬件。配置文件改变的是浏览器报告的内容,而不是绘制像素的东西——Canvas、WebGL 读回和音频仍然来自你实际运行的那台机器,任何浏览器都改变不了这一点。因此,同一台机器上的两个账号即使使用两个不同的配置文件,渲染出的 Canvas 也完全相同。如果你需要每个账号在像素层面都像另一台机器,就要靠每个账号独立的 fingerprint 种子,而不是配置文件。

如何配置

我们用 pixelscan 和 BrowserScan 测量了约 30 种配置。真正影响结果的,是下面这两条规则。

1报告真实的 GPU

无论如何,像素都是由你的主机绘制的。声称另一块 GPU,就意味着名称和渲染结果对不上,而对渲染输出做哈希的检测工具会因此扣分。开启 disable_gpu_fingerprint=True 后,报告的 GPU 就与实际干活的那块一致——它会同时调整 WebGL 和 WebGPU,因此两者不会互相矛盾。屏幕、字体和硬件数值仍由配置文件提供。

2每个账号一个种子,而且不要和配置文件搭配使用

只用配置文件时,所有账号的 Canvas 都一样,因为它只替换报告的数值,从不触及渲染。每个账号各不相同的 Canvas 来自 fingerprint 种子。同时设置种子和采集的配置文件,恰恰是检测工具会标记为篡改的那种组合——二者只能选其一。多账号场景请选种子。

多账号配置:每个账号唯一的种子 + 真实 GPU + 独立代理。保持 Canvas 噪声开启——关掉它,等于丢掉了你刚刚换来的每账号独立 Canvas。

python
import clearcote

# ONE ACCOUNT, ONE IDENTITY — the multi-account setup
browser = clearcote.launch(
    fingerprint="acct-1",              # unique per account: this is what varies the canvas
    disable_gpu_fingerprint=True,      # report the real GPU, so name and render agree
    geoip=True,                        # timezone + language follow the proxy
    proxy={"server": "..."},           # one per account
)                                      # note: no fingerprint_profile — a seed replaces it

# A CAPTURED MACHINE INSTEAD — for a single identity, not a fleet
# (the repo's samples/ set works out of the box)
browser = clearcote.launch(
    fingerprint_profile="samples/vinyzu-04201.json",   # an Intel Arc A770 desktop
    disable_gpu_fingerprint=True,
)                                      # note: no fingerprint seed alongside it

生成完整配置库

标准转换器位于浏览器仓库中,并作为锁定版本的依赖引入;筛选逻辑叠加在它之上:

bash
pip install -r requirements.txt   # dataset + canonical converter
python generate.py                # -> profiles/*.json (~8.5k profiles)
python generate.py --samples 80 --out samples   # regenerate the sample set

更想用鼠标点选?

Profile Manager 会替你浏览这个配置库(按主机的 GPU 厂商筛选),并把选中的配置文件作为交互式窗口启动。完全不用写代码。

Clearcote Profile Manager 主窗口:已保存的配置文件以卡片形式展示,带有指纹种子、时区、geoip 和代理标签,每张卡片都有“Launch”“Edit”“Duplicate”和“Delete”按钮。

许可证 & 署名。这些配置文件派生自 chrome-fingerprints © Vinyzu,因此该配置库采用 GPL-3.0 许可——注意,这与 Clearcote 浏览器本身不同,后者采用 BSD-3-Clause。如果你再分发,请保留署名和许可证。