逆向 Claude Code 请求签名:cch 是怎么算出来的
Claude Code 的神秘请求头
使用 Claude Code 时,每次向 Anthropic API 发出的请求都会包含一个特殊的 system 块:
json{ "type": "text", "text": "x-anthropic-billing-header: cc_version=2.1.37.fbe; cc_entrypoint=cli; cch=a112b;" }
这不是 system prompt,而是被伪装成文本的请求元数据。其中 cch 字段是请求完整性校验值——算错了,API 直接返回错误;算对了,fast mode 等功能才解锁。
有人从编译后的 Bun 二进制里逆向出了整个签名机制。
签名不在 JavaScript 层
Claude Code 以 Bun 二进制发布,所有 JavaScript 被打包进单个可执行文件。在提取出的压缩 JS 源码中,能找到构造 billing header 的函数,但 cch 字段始终是占位符 00000——JavaScript 层面从未计算过真正的哈希值。
追踪整个 JS 调用栈,从 header 构造到 JSON.stringify 再到 fetch(),占位符始终不变。
替换发生在 Bun 的原生 fetch 实现中——编译后的 Zig 代码,不在 JavaScript 层面。Claude Code 使用定制的 Bun 构建(1.3.9-canary.51+d5628db23),一个公开仓库中不存在的私有分支。(Anthropic 收购了 Bun 背后的 Oven 公司。)
定制 runtime 的 nativeFetch 只在三个条件同时满足时激活:URL 路径包含 /v1/messages、存在 anthropic-version header、请求体中包含 cch=00000 占位符。满足后,它对整个请求体(含占位符)计算哈希,然后原地替换 5 字符结果。
一个值得注意的细节:Bun 的 nativeFetch 直接修改了 JS 字符串的内存,违反了 JavaScript 字符串不可变的语言规范。由于 JSC(Bun 使用的 JS 引擎)共享字符串底层存储,这种修改会影响所有指向同一内存的引用——Map/Set 键、字符串别名、interned strings 全部会受影响。
从内存入手的逆向
研究者没有从代码入手,而是从内存入手。用 LLDB 附加到运行中的 Bun 进程,在 cch=00000 所在的内存位置设置 watchpoint。请求触发时 watchpoint 命中,反汇编指向的函数虽无符号名,但包含 xxHash64 的五个素数常量和标准 avalanche 收尾序列——教科书级实现。
种子值位于二进制数据段,是一个 64 位常量。研究者收集了 142 组已知的输入/输出对,全部验证通过。
签名算法
签名分两部分。
cc_version 后缀(JavaScript 层):
- 取对话中第一条用户消息的第 4、7、20 位字符(不足补
0) - 拼接:盐值 + 提取的字符 + 版本号
- 计算 SHA-256,取前 3 位 hex
盐值是一个 12 字符的 hex 常量,嵌在 JS 源码中。
cch 哈希(原生层):
- 构建包含
cch=00000占位符的完整请求体 - 序列化为 JSON
- 计算 xxHash64(body, seed) & 0xFFFFF
- 格式化为 5 位零填充小写 hex
- 原地替换占位符
Python 实现大约 30 行代码。
安全模型:混淆而非加密
研究者系统性排除了其他可能的访问控制机制:
- TLS 指纹:Python + OpenSSL(HTTP/1.1)可以成功重放
- 二进制证明:没有嵌入证书
- 预注册握手:单次重放即可工作,无需预先建立连接
- 连接关联:普通
fetch()即可 - 重放检测:同一请求体可多次发送
cch 是唯一的服务端门控。
验证实验也表明,哈希覆盖整个序列化后的请求体——messages、tools、metadata、model、thinking config 全部在内。修改 tool 描述中的一个词,请求就会被拒绝。唯一可以安全修改的是 system prompt 中的非计费块,因为它们在 billing header 构建之后才被注入。
选择 xxHash64(非密码学哈希)进一步说明意图:速度优先,安全次之。一旦知道算法和常量,重新实现几乎没有门槛。常量随版本更新而变,但提取过程是机械性的——JS 源码可以从 Bun 二进制中提取,种子需要一点二进制分析。
研究者总结:这是计费管道,不是访问控制边界。Anthropic 本可以选择代码签名、二进制证明、加密 blob 等更强的保护手段,但没有这么做。这本身就说明了定位。

来源: https://a10k.co/b/reverse-engineering-claude-code-cch.html
- 鸿海 Q4 利润不及预期,给 AI 硬件热泼了一盆冷水3/16/2026
- 据路透:华虹旗下华力微电子拟量产 7 纳米,华虹或成中国第二家 7nm 代工厂3/16/2026
- OpenAI 发布 GPT-5.4 mini 与 nano:小模型加速冲刺3/17/2026
- 据报道,微软搁置 Windows 11 多项 Copilot 系统级整合计划3/16/2026
- 《华盛顿邮报》把 AI 用到订阅定价上,媒体的个性化收费又往前走了一步3/17/2026
- Google 把 Stitch 升级成 AI 原生设计画布3/19/2026
- ChatGPT App 的模型切换入口,突然变得很难找3/17/2026
- iOS 26.4 RC 发布:Apple Music 有 AI 歌单,Podcasts 支持视频3/18/2026
- Firefox 149 内置免费 VPN:50GB 月流量,首批限四国3/19/2026
- 椰树集团相关公司招标 50 台人形机器人剥椰子,产线开始提具体指标了3/19/2026
- Google AI Studio 升级全栈 vibe coding:Antigravity 代理来了3/20/2026
- 欧盟推去衣AI禁令:3月26日表决,执法难在哪3/19/2026
- OpenAI 收购 Astral:Python 工具链收编加速3/19/2026
- 中国加大对 Meta 收购 Manus 审查:高管限制离境,审查升至国家层面3/18/2026
- 营收涨三倍,宇树科技冲刺科创板3/20/2026
- 装个App等24小时:Google给Android侧载上了把锁3/20/2026
- Anthropic 超 8 万用户调研:81% 认为 AI 正兑现预期3/19/2026
- 多地试点一人公司:免费公寓+办公空间,能否激活个体创新?3/19/2026
- 小米推理模型 MiMo-V2-Pro 上线:智能指数 49,榜单排第 103/18/2026
- Claude Code 上线 Channels:用 Telegram 和 Discord 操控本地编程任务3/20/2026
- 苹果警告:iOS 13/14 用户需立即升级至 iOS 153/20/2026
- 谷歌 Gemini Mac 版内测:桌面端补课正式开始3/20/2026
- DLSS 5 引发的争议:老黄说批评者完全错误3/19/2026
- 小米三款大模型齐发:MiMo-V2-Pro、Omni、TTS 完整解读3/19/2026
- MiniMax 发布 M2.7:国内首个公开的模型自我进化方案3/18/2026
- 英伟达把 DLSS 5 说清楚了:输入只有 2D 帧和运动矢量3/21/2026
- Kimi 员工指称 MiniMax 沿用其 Office Skill 代码始末3/19/2026
- DarkSword 被披露:Safari 打开恶意网页即可被入侵,旧版 iPhone 该升级了3/19/2026
- Google 测试改写搜索结果网页标题,网站对标题的控制权又退了一步3/20/2026
- Google公布Android侧载新规:安装未验证应用须等24小时3/20/2026