深度源码解析:Claude Code 隐藏的反向代理检测与隐写标记机制

2026 年 3 月,Anthropic 因一次 npm 构建配置失误,将包含 source map 的调试文件打包进了 Claude Code 的发布版本。这 51 万行 TypeScript 源码的意外泄露,被中国开发者社区称为一次"被动开源"。在随后的源码审查中,社区发现了一段极其隐蔽的代码——它并非 bug,而是一个精心设计的、针对中国用户的隐形标记系统。

一、事件时间线

时间 事件
2026-03-31 Claude Code v2.1.88 发布,source map 被误打包
2026-04-02 Claude Code v2.1.91 发布,隐写标记代码被静默引入
2026-04 初 中国开发者社区开始系统性分析泄露源码
2026-06-30 Reddit 用户 LegitMichel777 发表详细技术报告;独立研究者 Thereallo 发布完整逆向分析
2026-07-01 TNW、Cybernews、The Register、Yahoo News 等国际媒体报道
2026-07-01 PR #23770 合并,隐写标记代码被移除
2026-07-02 Claude Code v2.2.0 发布,官方确认移除隐写标记功能
2026-07-10 阿里巴巴宣布内部禁止使用 Claude Code

具有讽刺意味的是,Anthropic 在 7 月 1 日同一天宣布了两件截然不同的事:Claude Sonnet 5 发布,美国商务部解除了对 Claude Fable 5 和 Mythos 5 的出口管制——以及 PR 合并移除隐写标记代码。

二、核心发现:三层检测架构

通过对泄露源码的分析,社区还原了 Claude Code 客户端中隐藏的三层检测架构:

第一层:代理检测

// 简化还原 — 检测是否使用自定义代理
const BASE_URL = process.env.ANTHROPIC_BASE_URL;

function isUsingCustomProxy(): boolean {
  if (!BASE_URL || BASE_URL === "https://api.anthropic.com") {
    return false;
  }
  return true;
}

当检测到用户设置了 ANTHROPIC_BASE_URL 指向非官方端点时,程序进入第二层判断。这是合理的边界——在中国大陆,由于 Anthropic API 无法直接访问,大量开发者通过第三方代理服务使用 Claude Code。正因如此,几乎所有中国大陆用户都会触发此条件

第二层:时区指纹

// 简化还原 — 检测中国时区
const TARGET_TIMEZONES = [
  "Asia/Shanghai",
  "Asia/Urumqi",
];

function isChinaTimezone(): boolean {
  const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
  return TARGET_TIMEZONES.includes(tz);
}

时区检测无法通过 VPN 或代理隐藏——系统时区是用户在操作系统安装时设定的。Asia/Shanghai 覆盖了绝大多数中国大陆用户。

第三层:域名匹配

// 简化还原 — 147 个硬编码域名的匹配逻辑
const TARGET_DOMAINS = decodeAndExpand([
  // 中国 AI 实验室
  "deepseek.com", "zhipuai.cn", "moonshot.cn",
  "minimax.chat", "stepfun.com", "01.ai",
  // 中国科技巨头
  "baidu.com", "alibaba.com", "antgroup.com",
  "bytedance.com", "tencent.com", "huawei.com",
  // Claude API 代理/转售服务
  "claude-proxy", "claude-api", "claude-mirror",
  // ...共 147 个条目
]);

function matchesTargetDomain(proxyUrl: string): boolean {
  const domain = new URL(proxyUrl).hostname;
  return TARGET_DOMAINS.some(d => domain.includes(d));
}

这个硬编码列表包含了三类目标:

  1. 中国 AI 实验室:DeepSeek、智谱、月之暗面、MiniMax、阶跃星辰等
  2. 中国科技公司:百度、阿里巴巴、蚂蚁、字节跳动、腾讯、华为等
  3. Claude API 代理服务:大量第三方中转和转售服务

三、隐写术:信息传输的精巧设计

最令人震惊的不是检测逻辑本身,而是信息传输的方式——一种教科书级别的隐写术实现。

传统遥测 vs 隐写

在正常的软件遥测中,检测数据会通过独立的 API 端点或专用字段上报:

正常做法:
POST /api/telemetry HTTP/1.1
{ "timezone": "Asia/Shanghai", "proxy": "proxy.example.com" }

但 Claude Code 的做法完全不同——它没有新建任何网络请求,而是将信息编码进了系统提示词(System Prompt) 中。

"Today's date is..." 的秘密

每个发送给 Claude API 的请求都包含一条系统提示词。其中一个看似无害的语句是:

Today's date is 2026-07-04

而正是这个看似普通的句子,承载了隐藏信息。

标记位 1:日期分隔符

// 简化还原 — 通过日期格式编码时区信息
function formatDateString(date: Date, isTarget: boolean): string {
  const y = date.getFullYear();
  const m = String(date.getMonth() + 1).padStart(2, '0');
  const d = String(date.getDate()).padStart(2, '0');
  
  if (isTarget) {
    return `${y}/${m}/${d}`;  // 斜杠 = 命中中国时区
  }
  return `${y}-${m}-${d}`;   // 连字符 = 正常
}

当用户时区为 Asia/Shanghai 时,日期格式从 2026-07-04 变为 2026/07/04。这在视觉上几乎完全相同——你会在意系统提示词里日期用的是斜杠还是连字符吗?

标记位 2:Unicode 同形字符

// 简化还原 — 通过撇号字符编码域名匹配结果
const APOSTROPHE_VARIANTS = {
  NONE:    "'",   // U+0027 — 标准 ASCII 撇号
  DOMAIN:  "ʼ",   // U+02BC — 修饰字母撇号
  LAB:     "ʹ",   // U+02B9 — 修饰字母 Prime
  BOTH:    "ʻ",   // U+02BB — 修饰字母转逗号
};

function encodeTodayString(matches: CheckResult): string {
  const variant = APOSTROPHE_VARIANTS[matches.level];
  return `${variant}Today${variant}s date is ${matches.dateStr}`;
}

// 最终效果对比(肉眼不可区分):
// 'Today's date is 2026-07-04     ← 标准 ASCII,未命中
// ʼTodayʼs date is 2026-07-04     ← U+02BC,命中域名列表
// ʹTodayʹs date is 2026/07/04     ← U+02B9 + 斜杠,命中 AI 实验室
// ʻTodayʻs date is 2026/07/04     ← U+02BB + 斜杠,全部命中

这四个 Unicode 字符在绝大多数编辑器和终端中的渲染效果完全相同——它们看起来都是普通的撇号 '。只有通过十六进制查看器或专门的 Unicode 分析工具才能区分。

信息编码矩阵

条件组合 日期格式 撇号字符 上层可见
正常用户 2026-07-04 ' (U+0027) 无标记
中国时区 2026/07/04 ' (U+0027) 时区标记
命中域名列表 2026-07-04 ʼ (U+02BC) 域名标记
命中 AI 实验室 2026/07/04 ʹ (U+02B9) 实验室标记
全部命中 2026/07/04 ʻ (U+02BB) 最高标记

通过这种编码方式,每个 API 请求都在用户完全不知情的情况下,向 Anthropic 的服务器传递了2 bits 的分类信息

四、为什么这是严重的信任问题

1. 透明度缺失

Anthropic 的隐私政策中虽然提到会收集某些数据,但从未披露过这段隐写逻辑的存在。用户无法在文档中找到任何关于时区检测、域名匹配或 Unicode 字符替换的说明。

2. 无法主动选择

与标准的遥测不同,隐写术没有"退出"(opt-out)机制。这段代码在客户端静默运行,将元数据编码进正常的功能性通信中。用户无法通过配置、防火墙或隐私设置来阻止它——因为你不打开源码,根本不知道它的存在。

3. 可能只是冰山一角

如果开发者愿意在系统提示词中隐藏这种检测逻辑,那么:

  • 是否还有其他信息被类似方式编码?
  • 客户端还有多少未公开的检测逻辑?
  • 这些行为是否存在于其他 Anthropic 产品中?

4. 对编码助手工具信任的侵蚀

Claude Code 运行在开发者的代码仓库中,拥有:

  • 完整源代码的读取权限
  • 文件结构和项目细节的访问权限
  • 执行 Shell 命令的权限
  • 修改文件的能力

对于拥有如此高权限的工具,"信任"是它存在的基础。

五、Anthropic 的回应与背景

事件曝光后,Anthropic 团队成员 @trq212 在社交媒体回应:

"这是我们 3 月启动的一个实验,旨在防止未授权转售商的账户滥用行为,以及防御模型蒸馏(distillation)攻击。该代码将在明天发布的新版本中移除。"

蒸馏攻击的阴影

Anthropic 并非毫无理由。2026 年 6 月,Anthropic 向美国参议院银行委员会提交了一份报告,指控阿里巴巴及其 AI 实验室 Qwen(通义千问)使用了近 25,000 个欺诈账户,累计产生 2,880 万次与 Claude 的交互,用于"汲取"Claude 模型的推理能力。

在 AI 领域,"蒸馏"是指使用高级模型的输出训练一个较弱模型的技术。如果竞争对手通过大规模账户伪造来系统性提取模型能力,这确实构成严重的商业和国家安全威胁。

方法 vs 目的

然而,争议的焦点在于实现方式而非目的本身

一个拥有源代码读取权限、Shell 执行权限和文件修改能力的编码助手,在用户不知情的情况下,通过隐写术向自己的服务器编码用户的环境信息。这个边界的打破,无论出于什么目的,代价都太高了。

六、事件后续:回滚、禁令与连锁反应

Anthropic 的正式回滚

事件曝光后,Anthropic Claude Code 团队成员 Thariq Shihipar(@trq212) 在 X 上正式回应:

"这是我们 3 月启动的一个实验,旨在防止未授权转售商的账户滥用行为,以及保护模型免受蒸馏(distillation)攻击。团队后来已经达成了更强有力的保护措施,我们其实一直打算移除这段代码。PR 已经合并了,应该在明天的版本中完全回滚。"

独立安全研究者 Thereallo 随后验证,PR #23770 于 7 月 1 日被合并,Claude Code v2.2.0(7 月 2 日发布)已不再包含该隐写标记功能。

阿里巴巴全面封禁

事情远没有因代码回滚而结束。2026 年 7 月 10 日,阿里巴巴 向全体员工发出内部通知,正式将 Claude Code 列入高危软件清单,禁止在公司设备上使用:

"鉴于 Claude Code 近期被发现存在后门风险,经全面评估,Claude Code 已被纳入存在安全漏洞的高风险软件清单。"

阿里巴巴推荐员工使用自研编码代理平台 Qoder(通义灵码) 作为替代方案。

这起禁令的背景尤为讽刺:Anthropic 此前刚刚向美国参议院银行委员会指控阿里巴巴旗下的 Qwen 实验室使用了近 25,000 个欺诈账户进行大规模蒸馏攻击。如今,阿里巴巴反过来以"后门风险"为由封禁了 Claude Code。

国际媒体的广泛报道

事件迅速发酵为国际新闻,主流媒体和科技媒体纷纷跟进:

媒体 标题基调
The Next Web "Alibaba bans Claude Code over hidden Chinese user tracking"
The Register "Anthropic is removing its covert code for catching Chinese competitors"
The Information "Anthropic Backtracks Spyware Targeting Chinese Users"
Yahoo News "Anthropic rolls back China tracking code"
India Today "Anthropic tried to spy on Chinese Claude users through hidden code"
The Decoder "Hidden code in Claude Code secretly flagged Chinese users"

多家媒体使用了 "spyware"(间谍软件)一词来回溯 Anthropic 的行为,反映出业界对此事件的定性。

连锁反应:信任危机与 AI 工具地缘化

该事件引发了更深层次的讨论:

中国企业加速"去美国化"。 阿里巴巴的禁令并非孤立事件。随着美国对 AI 工具的出口管制不断加强,中国科技企业越来越将美国 AI 工具视为法律、安全和运营风险的来源。此事给了中国企业进一步推动员工使用国产替代方案的充分理由。

开发者信任遭受重创。 Claude Code 需要读取开发者本地文件系统、执行 Shell 命令、修改代码——任何隐藏功能实际上都可以访问机器上的一切。火绒安全等中国安全厂商指出,Anthropic 的追踪不仅是透明度问题,还涉及跨境数据合规风险。

"今天的时区检测,明天可能是系统破坏或数据窃取。"——Reddit 用户评论

延伸争议:封禁邮件中的追踪像素

与隐写标记事件几乎同期发酵的,还有另一个争议——多位用户发现 Anthropic 发送的 封号通知邮件中包含邮件追踪像素(Tracking Pixel)

追踪像素是一种 1×1 像素的透明图片,嵌入在邮件 HTML 中。当邮件客户端加载图片时,会向发件方服务器发出请求,从而泄露:

  • 邮件被打开的时间
  • 收件人的 IP 地址(可推断地理位置)
  • 邮件客户端和设备信息

虽然追踪像素在商业邮件中的使用率超过 95%(已被 Mailchimp、SendGrid 等邮件服务商默认集成),但它在 封号通知邮件 中引发格外强烈的反感——用户被单方面封禁后,还被要求"确认已读"收件通知,这在伦理上存在严重争议。

截至发稿,Anthropic 尚未就邮件追踪像素问题作出官方回应。

七、技术验证:如何检查自己的 Claude Code

如果你是 Claude Code 用户,可以通过以下方式检查是否受影响:

方法 1:检查日期格式

# 查看 Claude Code 发送给 API 的实际提示词
# 如果你的日期显示为 2026/07/04(斜杠)而不是 2026-07-04(连字符)
# 说明你已被标记

方法 2:十六进制检查

# 用 xxd 查看提示词中的撇号字节
echo "Today's" | xxd | grep "54 6f 64 61 79"
# 标准 ASCII 撇号后应为 27
# 如果显示 ca bc / ca b9 / ca bb 则说明是 Unicode 变体

方法 3:查看版本

Anthropic 已在 2026 年 7 月 2 日发布的 v2.2.0 中移除了该隐写标记代码。建议升级到最新版本并检查完整的 Release Notes。

八、总结与思考

这次事件揭示了几个重要问题:

1. AI 工具的地缘政治化正在加速。 出口管制、反蒸馏防御、用户指纹识别、邮件追踪——AI 不再只是技术问题,而是深度嵌入到了国际政治博弈中。

2. 客户端安全审计的重要性被低估。 大多数开发者不会审查 npm 包的源码。Claude Code 作为一个拥有极高系统权限的工具,其客户端的透明度应该受到更严格的审视。

3. 隐写术作为隐蔽通信手段,其应用边界值得讨论。 当一家公司使用 steganography 来隐藏数据收集行为时,无论初衷如何,这一行为本身就构成了对用户信任的根本性违背。

4. 中国开发者的被动处境。 因为地理和政治原因,中国大陆开发者天然处于被"特殊对待"的位置——无论是 API 封锁、客户端检测还是邮件追踪。发展自主的 AI 编码工具和控制权,已不再是技术选择,而是必要的基础设施建设。

5. 信任是 AI 开发工具的基石。 Claude Code 拥有文件系统读取、Shell 执行、代码修改等极高权限。任何隐蔽的数据收集——无论目的是什么——都会动摇整个生态的信任基础。阿里巴巴的禁令是一个明确的信号:当信任破裂时,市场会立即做出反应。


本文技术分析基于 2026 年 3 月 Claude Code v2.1.88 源码泄露后公开的分析资料,以及社区独立验证报告。所有代码片段均为基于公开分析的简化还原,不代表 Anthropic 的实际源码。

参考资料: