Claude Code 是怎么悄悄认出中国用户的

一个撇号,8 种身份:Claude Code 是怎么悄悄认出中国用户的

一个撇号里的隐写水印

这两天,技术圈被一条消息刷屏了。

有人逆向了 Claude Code 的打包文件,发现 Anthropic 在里头藏了一段专门针对中国用户的代码,会偷偷给你打标记。

骂的人特别多。

说实话,我看到这条新闻的第一反应,不是跟着一起骂。

而是想搞清楚一件事:它到底是怎么做到「标记你」,还能让你完全看不见的?

Claude Code 国内用的人不少,这事跟每个用它的人都有关。

我把能找到的逆向分析都翻了一遍——英文的 dev.to、中文社区的拆解、X 上宝玉的帖子。

翻完,先给你两个结论,剩下的咱们慢慢拆。

第一,那段专门针对中国用户的代码,是真的。

第二,真正值得说道的,是它干这件事的手法——用一个你看不见的撇号,做成了一件特别精巧的事。

它把标记藏在了哪

先说它把「标记」藏在了哪。

你每次用 Claude Code 跟模型对话,它都会在请求的最前面,自动拼一段系统提示词。

其中有一行,普通得不能再普通:

Today's date is 2026-06-30.

就是告诉模型今天几号。

人畜无害,对吧?

问题就出在这行字里。

Anthropic 没有单独发一条请求来「举报」你,也没有在你的数据里附加什么奇怪字段。

它选了一个最隐蔽的办法:直接改这行字本身。

把「你是谁」的信息,藏进这行每天都要发的、看起来毫无意义的日期里。

用专业点的说法,这叫水印。更准确点,叫隐写(steganography)。

翻译成人话:它没给你贴一张写着「中国用户」的大字报,而是在你每句话的句号里,偷偷换了一个你看不见的笔划。

一个撇号,能藏两个比特

那它具体改了哪?

第一个位置,是 Today's 里的那个撇号。

就是那个 '

你别小看这个符号。在计算机里,长得像撇号的东西,远不止一种。

正常的撇号,是键盘上直上直下的 ',Unicode 编码叫 U+0027

但在字符表里,至少还有三个,跟它长得几乎一模一样:

字符 编码 长相
' U+0027 键盘上直上直下的一竖
U+2019 向右弯的花引号
ʼ U+02BC 悬在右上角的小逗号
ʹ U+02B9 一根短短的竖撇

我把它们并排放一起,盯着看了半天,愣是没分出来。

复制粘贴带不走,普通的文本处理也不会清洗,它就那么静静躺在你发出去的请求里。

Anthropic 干的事,就是根据「你是什么身份」,从这四个里挑一个,替换进去。

四种撇号 Unicode 码位对比

四个撇号,正好能编码两个比特的信息:

命中域名黑名单 命中 AI 关键词 用哪个撇号
' U+0027
U+2019
ʼ U+02BC
ʹ U+02B9

也就是说,光这一个肉眼不可见的字符,就同时表达了「你有没有命中域名黑名单」「你有没有命中 AI 实验室关键词」两层判断。

两个判断,压进了一个标点符号里。

第二个暗门:日期的分隔符

光两个比特还不够。

它还留了第二个暗门:日期中间的分隔符。

正常日期是 2026-06-30,用连字符 -

但如果判定你在「中国时区」,它会把这三个连字符,悄悄换成斜杠:

2026/06/30

这又是一个比特。

你以为是工程师随手写的日期格式差异?

其实是刻意的第三层标记。

三个比特,八种身份

把这两个暗门拼起来,一共三个比特。

三个比特,能表达 2 的 3 次方——八种不同的身份。

时区 域名 关键词 身份编码
普通 普通用户
中国 中国时区用户
中国 命中黑名单的中国用户
中国 双重命中的中国用户
…… …… …… 共 8 种组合

每一种组合,都精确对应一种「你是谁」。

举个具体的例子。

同样是发一句话给 Claude,一个走百度内网代理的员工,和一个用 DeepSeek 中转站的独立开发者,发出去的那行日期,人眼看起来一模一样。

但在 Anthropic 后台眼里,是两串完全不同的身份编码。

它能精确到这个程度。

这事最让人不舒服的地方在哪?

不是它标记了你,而是它标记得这么优雅,你居然一点都没察觉。

谁会被标记?四层关卡

那你可能会问:是不是所有中国用户都被标记了?

没有。

这套机制有触发条件,而且层层把关,一共四层。

第一层,看你是不是走官方直连。

如果你没动过 ANTHROPIC_BASE_URL 这个环境变量,老老实实连的官方 api.anthropic.com,整套水印直接跳过,什么都不干。

第二层,看你的系统时区。

它不看你 IP,而是直接读你电脑的时区设置。而且认得很死——只认 Asia/ShanghaiAsia/Urumqi 两个。

为什么是这俩?因为全球通用的时区数据库里,这俩正好、且仅代表「中国大陆」。

它故意没用「+8」这种省事写法。因为香港、台湾、新加坡都是 +8,一判就误伤。

它精确匹配这两个名字,等于把你死死钉在大陆本土。

第三层,一张 147 项的域名黑名单。

你填的中转站域名,拿来跟这张表比。这张表还做了加密——Base64 加上 XOR 异或,密钥就是整数 91

对,就 91,比你家 WiFi 密码还简单。谈不上多难破解,安全研究者几分钟就能解开,但足够挡住普通用户。

第四层,11 个 AI 实验室关键词。

只要你的域名里含 deepseekmoonshotzhipu 这些词,命中。去重之后,正好是 9 家中国头部大模型公司——DeepSeek、月之暗面、MiniMax、智谱、百川、阶跃星辰、零一万物、阿里通义、字节豆包。

有意思的是,国外竞品,Google、OpenAI,一个都没在表里。

所以可以确认:这套东西,就是冲着中国来的,一点含糊都没有。

Claude Code 水印四层判定链

为什么它不查 IP,反而更难躲

聊到这,你可能会想:Anthropic 直接查 IP 不就行了,干嘛费这么大劲,去改一个撇号?

这正是这套机制最「鸡贼」的地方。

查 IP,是网络层的事。你走中转站、走代理,IP 就变了,Anthropic 看到的只是中转站的 IP,根本认不出你是谁。

但时区、环境变量,是应用层的事,藏在你自己电脑里。

中转站改得了数据包的出口,改不了你系统的时区,也改不了你填进去的那个 ANTHROPIC_BASE_URL

更关键的是:这个标记,是搭在你本来就要发的那条请求里走的。

它不需要单独发一条「举报」请求,不需要额外的接口,没有任何能被防火墙拦掉的东西。

你要拦它,就等于拦掉你自己跟 Claude 的对话。

查 IP 与隐写标记的区别

这就是隐写和普通检测的根本区别。

普通检测是「我知道你在查我,我能躲」。

隐写是「你根本不知道自己被标记了,躲都没处躲」。

这套机制,到底图什么

说了这么多机制,回到一个最根本的问题:Anthropic 费这么大劲,到底图什么?

答案不复杂——防蒸馏。

什么是蒸馏?简单说,就是竞争对手拿 Claude 当老师,海量提问、收集回答,再拿这些数据训练自己的模型,低成本「抄」出近似的能力。

Claude 这种前沿模型,训练成本动辄上亿美金,谁都不想被白嫖。而国内一批 AI 公司,恰恰是最有动机、也有能力这么干的人。

所以那张 147 项的黑名单,第一项就是 .cn 域名——宁可错杀,不肯漏过。

这套水印,本质上就是一枚「取证印章」:一旦发现谁在批量蒸馏,能顺着标记,一路追到源头。

还有个进展:据 Tech Times 7 月 1 日报道,Anthropic 已经承诺会修复这个机制。

从被曝光,到表态整改,反应不算慢。

写在最后

它针对中国用户做水印,这事是真的,没什么可洗的。

但比起这件事本身,我更担心的是另一个趋势:

这种「看不见的标记」,会不会成为以后所有 AI 工具的标配?

你想想,这套手法几乎零成本。

不增加请求,不增加流量,也不留下任何能被察觉的痕迹。

一个字符的差别,就把八种身份分得清清楚楚。

这么高性价比的标记手段,没有理由不会被别的厂商学去。

今天它能在一个撇号里藏三个比特,明天它就能在别的字符里,藏下更多。

这才是真正值得警惕的方向。

徐公,持续分享 AI Engineering 实战。更多学习笔记和可复用代码,开源在 GitHub: https://github.com/gdutxiaoxu/ai-engineering-learning ,欢迎 Star。

推荐阅读:

我用 Claude Code 半年了,这个功能彻底改变了我的工作方式

AI 时代,我们活得太着急了

posted @ 2026-07-02 14:44  程序员徐公  阅读(436)  评论(3)    收藏  举报