跳到正文

架构

Clearcote 如何在 Chromium 之上叠加隐私与身份控制——全程透明。

技术栈

开源版构建是一个轻薄、可审计的技术栈,每一层都是开放、可替换的:

text
            Chromium  (Google, BSD-3)
                |
   ungoogled-chromium  ->  removes Google services, telemetry, integration
                |
       Clearcote patches  ->  engine-level identity & privacy controls
                |
   reproducible build  ->  checksummed, GPG-signed, rebuildable by anyone (open build)
                |
        Clearcote Browser  +  SDK (Playwright objects) / CDP endpoint

授权版构建(GitHub 免费版和 Pro)在这一技术栈之上加入了未公开的补丁。下载时会校验它的 SHA-256,但它无法从公开源码重新构建。

引擎层面修改,而非脚本注入

大多数“stealth”工具通过注入 JavaScript 在运行时覆盖 navigator 属性。这种做法既脆弱又会暴露自己——覆盖行为本身就会变成指纹(原型链不对、getter 时序异常、字符串化时缺少原生代码标记)。

Clearcote 的做法是直接修改 C++ 引擎。页面读到的值由 Chromium 一直在用的同一套代码路径产生,因此不存在可被检测的注入层。这也覆盖了那些 JavaScript 根本无法干净拦截的 API。

身份一致,渲染噪声按站点区分(farbling)

对每个信号各自随机化,拼出来的身份会前后对不上——一眼就会露馅。Clearcote 从一个种子(seed)派生出身份画像(persona),再用这个种子加上站点的可注册域名来派生渲染噪声:

  • 内部一致——平台、GPU、屏幕和硬件彼此吻合;时区和语言来自你的选项或 geoip。
  • 按站点稳定——同一站点在一次会话中看到的始终是同一个身份。
  • 按站点区分的渲染噪声——canvas 和 WebGL 的读回结果因站点而异,因此渲染哈希无法跨域名匹配。硬件类的值在所有站点都保持不变,和真实机器一样。

这种按 eTLD+1 区分的噪声模型借鉴了 Brave 的 farbling 方案。噪声由种子控制:没有 --fingerprint 种子,就没有噪声。

一致的身份画像——一个种子,一台可信的机器

Clearcote 比逐个信号加噪更进一步。一个 --fingerprint 种子会为你所呈现的平台派生出一个一致的身份画像——一台各项属性彼此吻合、令人信服的机器。SDK 默认呈现你的宿主操作系统(Windows 或 Linux);如有需要,也可以使用 macOS UA,以及尽力而为的 Android 身份画像。它会根据种子抽取一个硬件档位(真实机器上确实会搭配出现的 CPU 核心数和内存——绝不会出现 20 核配 4 GB 的组合),以及与之匹配的屏幕分辨率、色深和设备像素比、一致的 GPU,还有一个真实存在的 Chrome 版本。

硬件类属性在整个会话中保持不变——真实机器不会在访问不同站点时改变核心数或屏幕尺寸——而受扰动的渲染面(canvas 和 WebGL 像素)仍按站点施加扰动,因此你在不同域名之间仍然互不关联。Client rects 和渲染出的音频不做扰动——不过只要启用了身份画像,AudioContext 的 sampleRate、baseLatency 和 outputLatency 就会取自身份画像;哪些内容会被扰动、哪些刻意不扰动一节解释了其中的取舍。

为什么这很重要:现代检测中最强的信号并不是某个单一的值,而是内部矛盾——一台机器声称是某个操作系统,渲染结果却像另一个;或者高核心数的 CPU 配着过少的内存。从同一张身份画像表派生出所有信号,能让它们口径一致。它使用的正是你已经在传的 --fingerprint 种子(无需新增参数)。

呈现身份有三种方式:light-stealth 预设(只改少量元数据值,没有种子,也没有噪声)、上文的种子身份画像,或者从真实机器采集的配置文件(fingerprint_profile,或从授权版配置文件库中取用的 profile="auto")。该从哪一种入手,请参阅推荐设置。

可控制的内容

Canvas 2DWebGL 渲染器(会话内 GPU 恒定)WebGL getParameter 上限值WebGPU 适配器字体时区语言(Accept-Language、navigator.languages、Intl)User-Agent + UA-CHTLS ClientHello 身份画像(JA3/JA4)hardwareConcurrencydeviceMemory屏幕几何信息存储配额navigator.webdriver无头特征封闭 shadow rootWebRTC 代理 IPnavigator.getBatterynavigator.connection键盘布局映射getScreenDetails / 多屏幕CSS pointer/hover 媒体查询AudioContext 元数据(采样率 / 延迟)语音合成音色navigator.shareURL 盘符与操作系统一致性浏览器内置 AI 智能体MediaCapabilities 编解码器enumerateDevicesUA-CH 位数/WoW64

构建目标

开源版构建面向 Windows x64(在 Linux 上交叉编译)和 Linux x64(原生编译),基于 Chromium 149;授权版构建基于 Chromium 153。开源版构建的完整构建方法——以及交叉编译中的每一个坑——都有文档记录,任何人都能复现。请参阅从源码构建。