一个撇号,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 干的事,就是根据「你是什么身份」,从这四个里挑一个,替换进去。
四个撇号,正好能编码两个比特的信息:
| 命中域名黑名单 | 命中 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/Shanghai 和 Asia/Urumqi 两个。
为什么是这俩?因为全球通用的时区数据库里,这俩正好、且仅代表「中国大陆」。
它故意没用「+8」这种省事写法。因为香港、台湾、新加坡都是 +8,一判就误伤。
它精确匹配这两个名字,等于把你死死钉在大陆本土。
第三层,一张 147 项的域名黑名单。
你填的中转站域名,拿来跟这张表比。这张表还做了加密------Base64 加上 XOR 异或,密钥就是整数 91。
对,就 91,比你家 WiFi 密码还简单。谈不上多难破解,安全研究者几分钟就能解开,但足够挡住普通用户。
第四层,11 个 AI 实验室关键词。
只要你的域名里含 deepseek、moonshot、zhipu 这些词,命中。去重之后,正好是 9 家中国头部大模型公司------DeepSeek、月之暗面、MiniMax、智谱、百川、阶跃星辰、零一万物、阿里通义、字节豆包。
有意思的是,国外竞品,Google、OpenAI,一个都没在表里。
所以可以确认:这套东西,就是冲着中国来的,一点含糊都没有。
为什么它不查 IP,反而更难躲
聊到这,你可能会想:Anthropic 直接查 IP 不就行了,干嘛费这么大劲,去改一个撇号?
这正是这套机制最「鸡贼」的地方。
查 IP,是网络层的事。你走中转站、走代理,IP 就变了,Anthropic 看到的只是中转站的 IP,根本认不出你是谁。
但时区、环境变量,是应用层的事,藏在你自己电脑里。
中转站改得了数据包的出口,改不了你系统的时区,也改不了你填进去的那个 ANTHROPIC_BASE_URL。
更关键的是:这个标记,是搭在你本来就要发的那条请求里走的。
它不需要单独发一条「举报」请求,不需要额外的接口,没有任何能被防火墙拦掉的东西。
你要拦它,就等于拦掉你自己跟 Claude 的对话。
这就是隐写和普通检测的根本区别。
普通检测是「我知道你在查我,我能躲」。
隐写是「你根本不知道自己被标记了,躲都没处躲」。
这套机制,到底图什么
说了这么多机制,回到一个最根本的问题:Anthropic 费这么大劲,到底图什么?
答案不复杂------防蒸馏。
什么是蒸馏?简单说,就是竞争对手拿 Claude 当老师,海量提问、收集回答,再拿这些数据训练自己的模型,低成本「抄」出近似的能力。
Claude 这种前沿模型,训练成本动辄上亿美金,谁都不想被白嫖。而国内一批 AI 公司,恰恰是最有动机、也有能力这么干的人。
所以那张 147 项的黑名单,第一项就是 .cn 域名------宁可错杀,不肯漏过。
这套水印,本质上就是一枚「取证印章」:一旦发现谁在批量蒸馏,能顺着标记,一路追到源头。
还有个进展:据 Tech Times 7 月 1 日报道,Anthropic 已经承诺会修复这个机制。
从被曝光,到表态整改,反应不算慢。
写在最后
它针对中国用户做水印,这事是真的,没什么可洗的。
但比起这件事本身,我更担心的是另一个趋势:
这种「看不见的标记」,会不会成为以后所有 AI 工具的标配?
你想想,这套手法几乎零成本。
不增加请求,不增加流量,也不留下任何能被察觉的痕迹。
一个字符的差别,就把八种身份分得清清楚楚。
这么高性价比的标记手段,没有理由不会被别的厂商学去。
今天它能在一个撇号里藏三个比特,明天它就能在别的字符里,藏下更多。
这才是真正值得警惕的方向。
徐公,持续分享 AI Engineering 实战。更多学习笔记和可复用代码,开源在 GitHub: https://github.com/gdutxiaoxu/ai-engineering-learning ,欢迎 Star。
推荐阅读: