一场针对中国开发者的隐形标记事件,以及一个用 Claude Fable 5 写出来的反制工具
先说结论
如果你最近在用 Claude Code,并且走的是第三方代理或自定义 API 端点,那你发出去的每一条请求,很可能都在系统提示词里隐藏着一枚"中国用户"水印——你看不见,但 Anthropic 的服务器能读出来。
这不是猜测,是有人逆向了源码之后实锤的。
事情是怎么曝出来的
时间线拉回到 6 月底。
小红书上陆续出现大量"Claude 今天大面积封号"的帖子,很多中国开发者反映账号无故被封,但不知道原因。这件事当时没有在更大范围发酵——毕竟"被封号"这件事太常见了,大家习惯性地以为是 Anthropic 照例的区域管控收紧。
真正的炸弹是 6 月 30 日投出来的。
Reddit 用户LegitMichel777本来只是在帮自己修一个问题:Claude Code 2.1.196 在设置代理的时候会禁用远程控制,他想逆向找到这段逻辑把它去掉。结果顺藤摸瓜,挖出了一套隐藏了好几个月的检测机制。
他随后在 GitHub 发布了完整的逆向分析报告,对 2.1.193、2.1.195、2.1.196 三个版本做了交叉核查,确认存在。帖子一出,24 小时内 150 万浏览,1.3 万转发。
这段代码到底干了什么
技术细节有点绕,但我尽量说人话。
第一步:触发条件
Claude Code 会检查你有没有设置ANTHROPIC_BASE_URL这个环境变量。
exportANTHROPIC_BASE_URL=https://your-proxy.example.com这个变量是干什么的?就是让 Claude Code 不走官方的api.anthropic.com,而是走你自己的代理或第三方 API 网关。中国开发者几乎人人都在用——因为直连官方端点往往不稳定。
一旦检测到你设置了这个变量,隐藏逻辑就启动了。
第二步:双重指纹识别
指纹一:时区检测
读取你的系统时区,判断是不是Asia/Shanghai或Asia/Urumqi(新疆时区)。这一步非常直接。
指纹二:域名黑名单
提取你的代理 URL 主机名,和一份硬编码的 147 个域名列表做比对。这份列表经过了 Base64 + XOR(密钥 91)混淆——不是强加密,但足够绕过普通的字符串搜索。
列表里都有什么?国内主流互联网公司全在:
百度(baidu.com)
阿里巴巴(alibaba-inc.com)
字节跳动(bytedance.net)
网易(netease.com)
快手(kuaishou.com)
小红书(xiaohongshu.com)
京东(jd.com)
……
还有一批中国 AI 实验室关键词:DeepSeek、Moonshot(月之暗面)、MiniMax(稀宇)、智谱、百川、阶跃星辰、零一万物、火山引擎……
以及大量 Claude 第三方代理域名,比如claude-code-hub.app、openclaude.me、deeprouter.top等。
第三步:隐写术注入——藏在"今天的日期"里
这是整件事最精妙也最让人细思极恐的部分。
Claude Code 没有用一个独立的遥测字段来上报这些信息。相反,它把结果藏进了系统提示词里最不起眼的那句话:
Today's date is 2026-06-30.改动一:日期分隔符
如果系统时区是中国时区,分隔符从短横线变成斜杠:
Today's date is 2026/06/30. ← 中国时区 Today's date is 2026-06-30. ← 非中国时区改动二:撇号替换
Today's里那个撇号,在四个外观几乎一样的 Unicode 字符之间切换:
字符 | Unicode | 含义 |
|---|---|---|
' | U+2019 | 正常(无命中) |
' | U+0027 | 命中域名黑名单 |
ʼ | U+02BC | 命中 AI 实验室关键词 |
ʹ | U+02B9 | 两者都命中 |
肉眼看完全一样。但服务端一解析,你是谁就清楚了。
每一次请求都带着这枚隐形水印发往 Anthropic 的服务器。你不知道,模型也不知道,但 Anthropic 知道。
Anthropic 怎么说
事件曝光后,Claude Code 团队成员 Thariq Shihipar(@trq212)在 X 上发文回应:
这是 3 月份启动的一项实验,目的是阻止未授权转售并防范模型蒸馏。相关 PR 已合并,会在次日发布的新版本中回滚删除。
好,我来翻译一下这句话:他们承认了,说是"反转售反蒸馏实验",说会删。
问题不在于动机是不是合理——防止 API 滥用确实是个真实的业务需求。问题在于:这件事从来没有写进任何文档,从来没有告诉过用户。你安装了一个 CLI 工具,它在你不知情的情况下读取你的系统时区和代理地址,把结果藏进每一条请求里。
这件事发生在版本 2.1.91 到 2.1.196 之间,跨度从 4 月 2 日开始,持续了将近三个月。
FuckClaude:用 Claude Fable 5 写出来的反制工具
就在这件事曝光的同一天(7 月 2 日),开发者LinXiaoTao在 GitHub 上发布了 FuckClaude。
项目名字说明了一切。
更讽刺的是:这个项目是用 Claude Fable 5 开发的。README 里直接写着"Built with Claude Fable 5"。
这个工具能做什么
FuckClaude 是一个纯前端单页应用,完全在浏览器本地运行,不上传任何数据。它扫描你浏览器环境里的六项"中国用户信号",给出一个 0-100 的风险评分,告诉你在 Claude Code 的眼里你长什么样。
检测项 | 权重 | 检测方式 |
|---|---|---|
系统时区 | 30 | Intl.DateTimeFormat读取 OS 时区,与 Claude 完全一致 |
浏览器语言 | 24 | navigator.languages,zh-CN 排第一得分最高 |
已安装中文字体 | 20 | Canvas 宽度探测(微软雅黑、苹方等) |
Intl 区域设置 | 10 | 日期数字格式化使用的 locale |
时区偏移量 | 8 | getTimezoneOffset() === -480(UTC+8) |
Emoji 渲染风格 | 8 | 从 UA 推断操作系统厂商 |
分数 0-30 是低风险,31-60 中风险,61-100 高风险。
其中最关键的是系统时区(权重 30)——这是和 Claude Code 实际机制直接对应的那个信号,其他五项是通用的"中国环境特征"。
怎么用
直接打开这个网址:
https://fuck-claude.vercel.app/
点"Start scan",等几秒,看结果。就这么简单。
如果你用命令行,还有个 API 端点可以直接用:
curl https://fuck-claude.vercel.app/api/check它会根据请求头里的时区、语言、User-Agent 等信息给出服务端估算分数(浏览器字体没法服务端检测,所以最高只能评估到 70 分满分的换算值)。
我测了一下,你猜多少分
好家伙,93分!老实说,作为一个长期住在中国的开发者,时区是 Asia/Shanghai,语言是 zh-CN,字体全装了——基本上是满分选手。
这也意味着,如果你过去几个月在用代理跑 Claude Code,你发出去的每一条对话请求,都带着一枚写着"China User"的隐形标签。
我的想法
我用 Claude Code 很久了。说实话,它确实是目前我用过最好的 AI 编程工具。Fable 5 的能力更是炸裂。
但这件事让我觉得很不舒服。
不是因为 Anthropic 想区分用户——这我可以理解,防转售、防蒸馏是真实的商业需求。让我不舒服的是方式:
读取系统时区和代理地址,不告诉用户
用隐写术把结果藏进系统提示词,不告诉用户
持续三个月,不告诉用户
直到被人逆向出来,才说"这是实验,我们会删"
如果从一开始就在文档里写清楚——"当检测到非官方代理时,我们会收集哪些信息、用于什么目的"——这件事根本不会有今天这么大的舆论。
被发现了再删,和没做过,是两件不同的事。
FuckClaude 这个项目存在本身就说明了一件事:信任一旦破裂,修复的成本远比建立要高。一个工具让你自测"你在它眼里是不是中国人",这句话本身就已经足够悲凉了。
当然,该用还是得用。Claude Fable 5 的能力摆在那里,FuckClaude 本身都是用它开发的。
但我会更小心地思考:什么该放进去,什么不该。
相关资源
FuckClaude 自测地址:https://fuck-claude.vercel.app/
GitHub 仓库:https://github.com/LinXiaoTao/FuckClaude
如果你想降低评分
FuckClaude 的 FAQ 里有建议:
把系统时区改离 Asia/Shanghai(比如改到 UTC)
把 zh-CN 从浏览器语言列表首位挪开
避免通过包含"blacklist关键词"的代理域名访问 Claude Code
当然,这改变的只是表象。核心问题是信任,不是时区。
你自测的分数是多少?评论区告诉我。
谢谢你阅读我的文章~
我是顾北,我们下期再见!
PS:本文部分内容由AI辅助创作