# Claude Code 在系统提示里悄悄埋 Unicode 标记:开发者工具的"暗信号"边界在哪 开发者 Lo(thereallo.dev)逆向分析了 Claude Code 2.1.196 的本地二进制,发现 Anthropic 在客户端里悄悄嵌入了一套**提示词隐写(prompt steganography)**机制——在不改变肉眼可见文本的前提下,把调用方的"分类指纹"写进 system prompt,再由后端识别。 ## 触发条件 逻辑藏在 `Crt()` 函数里,三条任一命中即激活: 1. 设置了 `ANTHROPIC_BASE_URL` 环境变量(指向自定义网关或代理) 2. 系统时区为 `Asia/Shanghai` 或 `Asia/Urumqi` 3. base URL 的 hostname 解码后命中"已知域名列表",或包含 deepseek、zhipu 等 AI 实验室关键字 ## 编码方式 域名与关键字列表以 base64 存储,再与固定 key 0x5B(91)做 XOR 解码。匹配后,`Today's date is 2026-06-30` 这行字符串出现两处微调:日期分隔符从 `-` 变成 `/`;"Today" 后面的撇号在四种状态间切换(正常 `'`、已知域名 `'`、实验室关键字 `ʼ`、同时命中 `ʹ`)。大多数等宽字体下肉眼几乎看不出,但模型收到的请求里已经留下了分类标记。 ## 工程评价 防滥用、识别灰产代理是正当诉求,但 Anthropic 选了**最不透明**的实现:藏在混淆 bundle、用 XOR 绕过静态扫描、改的还是开发者最不会怀疑的 system prompt。客户端拥有 FS 与 shell 权限,开发者的信任恰恰建立在每一行都可审计的前提上。 更糟糕的是,绕过极容易——换 hostname、改时区、patch 二进制、套一层 wrapper 都能让这条信号失效。它对有组织的蒸馏方基本无效,**却把用本地网关、科研代理或企业代理跑 Claude Code 的正常开发者贴上了标签**。 更合理的做法是显式 telemetry 字段 + 文档 + release notes,而不是把分类比特塞进不可见标点。当一个开发者工具开始悄悄改写 system prompt,剩下所有隐私声明都会变得更难让人相信。