Claude Code 的源代码里藏了一段代码,从 4 月 2 日到 7 月 1 日,它静静地运行了整整三个月——没有任何 Changelog 提到它,没有文档说明它,没有任何人被告知它的存在。

Reddit 用户 LegitMichel777 把它从二进制包里拆了出来。安全研究员 Adnane Khan 随后发布了完整的逆向工程分析,覆盖 v2.1.193 到 v2.1.196 的 JavaScript 源码。The Register 在 7 月 1 日做了封面报道。

这段代码要做的事非常明确:检测使用 Claude Code 的用户是不是中国人,或者是不是在通过中国 AI 公司的代理访问。

Unicode 隐写术

检测机制本身设计得相当精巧。

每次 Claude Code 发起 API 请求,系统提示词里都会包含 "Today's date is 2026-06-30" 这样一句话。这句看似无害的日期字符串,就是信号的载体。

触发条件是用户设置了 ANTHROPIC_BASE_URL 指向非官方代理服务器。一旦满足,代码开始执行两个检查:

第一步,把系统时区和 Asia/Shanghai、Asia/Urumqi 做比对。第二步,把代理域名和一份包含 147 个条目的硬编码域名清单做比对——这份清单被 XOR-91 加密后再用 Base64 编码,解码后赫然是百度、阿里巴巴、蚂蚁集团、字节跳动、月之暗面、MiniMax、阶跃星辰等中国 AI 实验室和大量 Claude API 中转站域名。

如果命中中国时区,日期格式从连字符(2026-06-30)悄悄变成斜杠(2026/06/30)。"Today's" 中的撇号被替换为四个视觉上几乎无法分辨的 Unicode 字符之一,每个编码对应一种检测状态。

Khan 的结论是:「在等宽字体下肉眼几乎无法区分,但对 Anthropic 的服务端来说解析起来毫无难度。」这是一条教科书级别的隐蔽信道。

不只是标记,还有"投毒"

The Register 的报道还挖出了另一个发现。Claude Code 泄露的源代码中包含一个名为 ANTI_DISTILLATION_CC 的 TypeScript 标志位。这个标志启用后,会向 API 请求中注入伪造的工具调用数据,目的是让这些数据对模型训练产生「毒性」——如果对手试图用 Claude 的输出来训练自己的模型,这些假数据会让训练结果变差。

如果说隐写检测是用来「发现」潜在蒸馏者的,那 ANTI_DISTILLATION_CC 就是用来「毒害」他们的。但问题是一样的:这些行为发生在开发者工具的底层,写代码的人对此一无所知。

来源:https://www.oschina.net/news/471416/anthropic-removing-its-code-for-catching-chinese-competitors