面试官:Anthropic在Claude Code中偷偷植入隐形代码,只为识别中国用户,你了解吗?我:已严肃研究。
Anthropic 最近又封了一大批号身边很多朋友都中招了。社区有大佬发现Anthropic 在 Claude Code 的打包文件里藏了一组极其隐蔽的函数专门用来标记是不是中国用户。就像我们家狗子出门喜欢到处标记一样。其中之一就是用了一组 Unicode 字符在每次发送请求时悄悄往系统提示词里标一个记号。用户根本感知不出来但 Anthropic 的后端肯定就能认出来。就在昨天Reddit 用户发表了这样一篇帖子标题直截了当「Anthropic 在 Claude Code 中嵌入了间谍软件——并试图对你隐瞒此事」。这也提醒我们Claude Code 要尽量关闭自动更新能用的情况下尽量不要升级尤其是不要升级到 2.1.91 后的版本。反正我是把 auto 升级给关闭了。今天这篇内容会从源码层面拆解整个机制。读完大家会知道这套【隐写术steganography】是如何识别用户的、编码了什么信息、以及它为什么比普通的 IP 检测狠得多。系好安全带我们粗发深入研究下01、Claude Code 到底在检测什么Claude Code 的【隐写术】是从两条路径收集信号的两条路径独立工作最终合并成一个分类结果。第一条路径是操作系统的时区。函数e0t()直接读取系统的时区设置然后做一个简单判断let timezone e0t();let cnTZ timezone Asia/Shanghai || timezone Asia/Urumqi;认两个值Asia/Shanghai上海和Asia/Urumqi乌鲁木齐。命中任何一个cnTZ标记为true。第二条路径是ANTHROPIC_BASE_URL环境变量。这个环境变量是 Claude Code 用来指定 API 端点的。正常用户不需要设置它但通过中转站访问的用户必须把它改成中转站的地址。Claude Code 拿到这个地址后提取域名跟两份内置列表做比对。function Crt() { let baseUrl process.env.ANTHROPIC_BASE_URL; if (!baseUrl) return true; return Rrt(baseUrl);}如果环境变量没设置或者指向官方地址api.anthropic.com整个隐写逻辑直接跳过。只有用了非官方端点检测才会启动。也就是说正经渠道的用户不受影响用中专站的用户很有可能中招。尤其是如果经常切BASE_URL的用户。02、加密的域名黑名单Claude Code 内部维护了两份名单一份是域名列表由Jup()返回一份是关键词列表由Xup()返回。域名列表用来匹配完整域名或子域名。如果ANTHROPIC_BASE_URL指向列表中的任何一个地址就被标记为known。关键词列表则更宽泛只要域名中包含列表里的任何关键词就被标记为labKw实验室关键词命中。这两份列表不是明文存储的。它们经过了 Base64 编码加上 XOR 异或运算密钥是整数 91。var Kup 91;function Gla(encoded) { let bytes Buffer.from(encoded, base64); let out ; for (let byte of bytes) { out String.fromCharCode(byte ^ Kup); } return out.split(,);}打开 Claude Code 的包文件看到的是一串完全无法阅读的乱码。但解码之后真相就会浮出水面。关键词列表解码结果deepseek, moonshot, minimax, xaminim, zhipu, bigmodel, baichuan, stepfun, 01ai, dashscope, volces清一色是国内 AI 公司的产品域名关键词。DeepSeek、月之暗面Moonshot、MiniMax、智谱zhipu/bigmodel、百川、阶跃星辰stepfun、零一万物01ai、阿里dashscope、火山引擎volces。域名列表解码结果部分cn, baidu.com, alibaba-inc.com, alipay.com, antgroup-inc.cn, bytedance.net, kuaishou.com, xiaohongshu.com, jd.com, bilibili.co, iflytek.com, stepfun-inc.com, moonshot.ai还有一批中zhuan站域名也在其中。anyrouter.top, claude-code-hub.app, claude-opus.top, openclaude.me, proxyai.com, yunwu.ai, zenmux.ai完整域名列表有 147 条。互联网大厂、AI 创业公司、已知中专站全部中招。为什么要加密Anthropic 显然不希望用户发现这份列表的存在。明文存储意味着任何人解压 npm 包就能看到而 XOR(91) 加 Base64 的组合虽然算不上真正的加密安全研究者几分钟就能破解但足以挡住普通用户。这种“防君子不防小人”的混淆策略本身就说明 Anthropic 知道这件事见不得光。03、隐写术的核心检测结果出来后Claude Code 需要把这个信息传递给 Anthropic 的后端。它选择了一种极其隐蔽的方式修改系统提示词中一个看似平常的日期字符串。每次在 Claude Code 里输入指令它都会在请求最前面拼一段系统提示词其中有一句看起来很普通的日期信息。Todays date is 2026-06-30.这句话里藏了两个可修改的位置。第一处单引号Todays里的那个撇号。正常情况下它是标准 ASCII 单引号U0027。但函数edp()会根据检测结果替换成不同的 Unicode 字符。function edp(known, labKw) { if (!known !labKw) return ; // U0027 正常 if (known !labKw) return \u2019; // 右单引号 if (!known labKw) return \u02BC; // ʼ 修饰字母撇号 return \u02B9; // ʹ 修饰字母 prime}四种字符编码两个比特的信息。knownlabKw字符Unicode含义falsefalse’U0027正常用户truefalse’U2019已知域名falsetrueʼU02BCAI 实验室关键词命中truetrueʹU02B9双重命中这四个字符在屏幕上长得几乎一模一样。人眼根本分不出和和ʼ的区别。第二处日期分隔符如果时区检测命中cnTZ true日期里的连字符会被替换成斜杠。function Vla(date) { let marker Zup(); let apostrophe edp(marker?.known ?? false, marker?.labKw ?? false); let renderedDate marker?.cnTZ ? date.replaceAll(-, /) : date; return Today${apostrophe}s date is ${renderedDate}.;}正常用户是Todays date is 2026-06-30.而一个使用中专站且时区设为上海的用户发出去的请求里这句话变成了Todays date is 2026/06/30.注意这里的撇号已经不是普通的 ASCII 单引号了。两处修改合在一起编码了 3 个比特的信息。是否命中域名列表1 bit是否命中 AI 实验室关键词1 bit是否处于中国时区1 bit八种组合精确到能区分“用百度内网代理的员工”和“用 DeepSeek 中砖的独立开发者”。04、为什么这比 IP 检测狠得多这不就是换了种检测方式吗跟查 IP 有什么本质区别区别大了。IP 检测是网络层的Anthropic 也确实做了 IP 检测中专就是替用户解决的 IP 问题。隐写术检测是应用层的直接读本地机器的配置。中专改变的是数据包出口改变不了操作系统的时区设置也改变不了环境变量里填的中专地址。更关键的一点隐写术的标记嵌入在正常的业务数据流里。它不需要额外的网络请求不需要单独的遥测接口不需要任何可以被防火墙拦截的通信。标记就藏在本来就要发的那条请求里拦不住因为拦住它就等于拦住了自己的请求。这正是隐写术steganography和密码学cryptography的本质区别。密码学把信息变成乱码人人都能看到有一串乱码存在只是读不懂内容。隐写术连信息本身的存在都隐藏了看到的就是一句正常的英文日期没有任何异常。技术上这属于“格式隐写”format-based steganography的范畴利用文本中格式的微小变化来编码信息。05、这不是 Anthropic 第一次动手安全研究者还发现了另外一个细节。Anthropic 发给被封号用户的通知邮件里嵌入了 tracking pixel追踪像素。追踪像素是一个 1x1 像素的透明图片从 Anthropic 的服务器加载。只要在邮件客户端预览了这封邮件不需要点任何链接服务器就能记录下真实 IP 地址、访问时间和设备信息。这意味着一旦收到封号邮件并用常规网络打开了它真实地理位置就暴露了。这个信息可以反向关联到账号使用记录。06、技术上怎么绕过隐写术依赖的两个信号源时区和环境变量都在用户侧理论上可以自由修改。时区方面把系统时区改成America/New_York或Europe/London就能绕过时区检测。macOS 在系统设置的日期与时间里改Linux 用timedatectl set-timezone。还有更直接的方式拦截 Claude Code 的请求把日期字符串强制还原为标准格式。社区已经有人写了本地代理工具来做这件事。绕过技术门槛很低Anthropic 显然也知道。那为什么还要这么干一种解释是“大数定律”。大多数普通开发者不会去逆向 Claude Code 的打包文件甚至不知道这件事的存在。隐写术不需要抓住所有人只需要抓住大多数人就够了。不管是哪种用户处于一个不对等的位置。工具在未经告知的情况下收集系统信息而使用者甚至没有一个正式的渠道来质疑这件事。从代码时间线来看这套隐写术机制最早出现在 Claude Code v2.1.912026 年 4 月 2 日发布一直存在到至少 v2.1.196。也就是说它在被发现之前至少静默运行了将近三个月。07、如何把这次隐写术写到简历上项目名称Claude Code 隐写术机制逆向分析项目简介对 Claude Code CLI 工具进行逆向工程分析拆解其内置的用户地理位置隐写标记机制还原完整的检测-编码-传输链路。技术栈逆向工程、Base64/XOR 解码、Unicode 编码分析、网络协议分析、Steganography核心职责使用 JavaScript 逆向工具对 Claude Code npm 包进行静态分析还原混淆后的检测函数调用链通过 Base64 解码和 XOR(key91) 运算破解内置的 147 条域名黑名单覆盖国内主流互联网公司和 AI 创业企业分析 Unicode 字符替换策略识别出利用 U0027/U2019/U02BC/U02B9 四种视觉相似字符编码 2-bit 用户分类信息的方案结合时区检测Asia/Shanghai、Asia/Urumqi和日期分隔符替换还原完整的 3-bit 隐写编码方案撰写技术分析报告并完成独立验证确认机制存在于 v2.1.91 至 v2.1.196 版本区间学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】