指纹浏览器(防关联浏览器):是什么,原理是什么
「指纹浏览器」(也叫「防关联浏览器」)这个词,指的是能让同一台电脑上的多个账号看起来像多个不同的人的工具。这个名字起得不太好:它承诺的是一种并不存在的隐身能力。我们来老老实实拆一遍——里面到底是什么、它能带来什么、边界又在哪里。
网站究竟能识别出什么
打开一个网站时,浏览器会在你不知情的情况下自己报出几十项特征:版本和系统、时区、语言、屏幕分辨率、核心数、内存大小、显卡型号、字体集合,以及绘图和音频处理上的细微差异。单看每一项都没有意义——有几百万台机器的值是一样的。但这些特征的组合会把范围缩小到几台机器,有时候只剩一台。
这就是浏览器指纹。网站不需要给你种 Cookie 就能再次认出你:只要算出指纹,和昨天看到的对比一下就够了。
指纹只是三条关联线索中的一条。真正把账号联系在一起的是:
- Cookie 和网站存储 —— 以往访问留下的直接痕迹;
- 浏览器指纹 —— 即使没有 Cookie,网站也知道你是谁;
- IP 地址 —— 你是从哪里来的。
三者的详细拆解见文章如何在一台电脑上使用多个账号。
指纹浏览器做了什么
三件事,缺一不可——单独做其中一件都不管用。
分开存储。 每个账号都活在自己的配置文件里:各自的 Cookie、各自的存储、各自的扩展。这是地基,也是最简单的部分——普通 Chrome 本身就会分开配置文件。
给每个配置文件配一个独立代理。 不是整个程序共用一个地址,而是每个窗口一个。
让指纹与代理保持一致,不出现矛盾。 各家工具的差距正是从这里开始的。
关键词是一致,而不是「伪造」。代理在德国,时区却是莫斯科,浏览器语言又是俄语——这比完全不改动还可疑:普通用户不会是这种组合。行得通的做法,是让时区、语言、地理位置和请求头都从代理实际出口所在的国家推出来,并且不随每次启动而变。
什么不该伪造
这类工具习惯承诺「什么都能伪造」。但实际上,被看穿的伪造比什么都不改还糟糕,合理的做法应该是这样:
| 值得伪造的 | 不该动的 |
|---|---|
| 时区、语言、地理位置 | 屏幕分辨率 |
| 核心数、内存、显卡 | 字体集合 |
| canvas、WebGL、音频 | TLS 握手 |
规则只有一条:值得伪造的是让你与众不同的东西;让你显得和大家一样的东西,最好别碰。
普通 Windows 上的字体在几百万台机器上都一样——它们不会让你与众不同,而给每个配置文件随机生成一套字体反而适得其反:每个配置文件都会变得独一无二,因而变得显眼。屏幕不做伪造,是因为窗口可以用鼠标拖动改变大小,在一个会变的窗口上伪造尺寸,迟早会和真实大小对不上。TLS 握手是浏览器和服务器打招呼的方式;真正的 Chrome 的握手和几百万个活跃浏览器完全一样,找不到比这更好的藏身之处,而自制内核浏览器的握手方式是自己的,反而显眼。
有一点必须说明,否则关于字体的说法就只说对了一半:这只对普通系统成立。如果电脑上装了小众字体集合——设计师专用的、少见的手写体——这套字体本身就会变得罕见,这台机器上的所有配置文件也会因此彼此相似。工作用的电脑上最好别装这类字体。
两种架构:自带内核的云服务,与基于 Chrome 的本地程序
这类工具分两种架构,这是它们之间最重要的区别。
带自家 Chromium 内核的云服务。 配置文件和 Cookie 存在服务商那边,浏览器也是自家的。优点:任何系统都能用,配置文件在别的电脑上也能打开,支持团队协作。缺点:数据不在你手里,内核版本总比最新 Chrome 慢一拍,而且要按配置文件数量按月付费。
运行在你电脑上、基于真正 Chrome 的程序。 配置文件存在你的磁盘上,启动的就是你从 Google 官网装的那个 Chrome。优点:数据不会外流,浏览器自己更新,看起来就是普通 Chrome——因为它本来就是。缺点:只能在一台机器上用,系统固定,换到另一台电脑要手动搬。
两种方案没有谁绝对更好,它们解决的是不同的问题。五个人的团队、用着不同系统,需要第一种。一个不想把自己的 Cookie 交给别人云端的人,需要第二种。
调试通道与 Google 登录
有一个几乎没人提到的技术细节,它决定了你能不能登录 Google 账号。
指纹伪造通常是通过浏览器的调试通道实现的——Playwright 和 Puppeteer 用的也是同一个通道。Google 能看到这个通道本身是否存在,并回应「This browser or app may not be secure」。我们直接验证过:问题不在于通道里传了什么命令,也不在于伪造得好不好——只要通道是开着的就够了。
调整指纹的细节解决不了这个问题。如果你需要登录 Google,该问工具的不是「你们的指纹伪造做得怎么样」,而是它究竟是怎么实现伪造的。不走调试通道的办法是存在的:配置文件内部的一个扩展从内部拥有同样的能力,而浏览器从外面看依然正常。
怎样验证伪造是否生效
检测网站——iphey、browserleaks、creepjs——能展示页面看到的内容。值得用,但要注意两点。
该看的不是总评分,而是矛盾之处。 一句绿色的「你看起来很正常」说明不了什么;真正有意义的是各项之间的不一致——IP 所在国家和时区、浏览器语言和地区、页面本身的值和后台进程里的值。
只测一次是不够的。 有些数据是页面加载的第一瞬间就取走的,有些来自后台进程;如果伪造生效得晚,或者根本没有传到后台,同一个标签页就会给出两个不同的答案。这种前后不一致,比任何单个数值都更能说明问题。
最大的失望
最好提前接受这一点:多数情况下问题出在代理,而不是指纹。
我们在真实的 Cloudflare 防护面前遇到过这种情况。一个设置无可挑剔的配置文件反复被验证码拦下,只因为地址属于已知的机房网段。换指纹没用,在 HTTP 和 SOCKS 之间切换也没用——起作用的只有换成住宅代理。各类代理及其价格的分析见另一篇文章。
这枚硬币的另一面同样真实:没有任何工具能取消平台的规则,也不能让你隐身。隔离配置文件解决的正好是一个问题——让不同的账号看起来像不同的访客,而不是一个开了十个标签页的人。一个违反规则的账号,无论用什么打开,都会被封。
这在 Morfiade 里是怎么做的
Morfiade 是面向 Windows 的 Chrome 配置文件管理器:是你电脑上的程序,不是云服务。
- 配置文件成批创建,每个都能从统一的地址库里分到自己的代理;
- 伪造功能在配置文件上用勾选框打开,会自动从代理取国家、时区和语言;
- 指纹在页面第一行代码执行之前就已生效,并且在后台进程中同样起作用;
- 检查代理时,程序会向两个独立的数据库分别查询国家,并用信号灯颜色标出结果:如果两个数据库给出的国家不一样,任何设置都改不了这一点;
- 伪造由配置文件内部的一个扩展来实现,命令行里没有任何调试参数——这样的配置文件可以正常登录 Google;
- 有一个专门的按钮可以显示页面实际看到的内容:设计值、标签页看到的值、后台进程看到的值。
