az9713/claude-code-binary-inspect
GitHub: az9713/claude-code-binary-inspect
这是一个教育性质的逆向工程项目,提供可重现的工作流用于解包和检查 Claude Code 二进制文件中内嵌的 JavaScript 代码。
Stars: 0 | Forks: 0
# Claude Code 二进制文件检查:发现工作流
本仓库记录了一个动手学习的过程,旨在检查 Claude Code 可执行文件,提取其内嵌的 JavaScript,并理解二进制检查、prompt 提取、feature-flag 研究和本地 patch 工作流之间的相互关系。
这次探索的灵感来源于两个公开参考资料:
- Reddit 讨论:[Claude Code v2.1.150 现在允许 Anthropic 执行远程 system prompt 注入](https://www.reddit.com/r/ClaudeCode/comments/1tmizuy/claude_code_v21150_now_allows_anthropic_to/)
- Piebald AI prompt 语料库:[Piebald-AI/claude-code-system-prompts](https://github.com/Piebald-AI/claude-code-system-prompts)
这是一个出于教育目的的逆向工程和检查工作流。它不会发布提取出的 Claude Code 源代码或捆绑的 prompt 语料库。重点在于如何在本地重现调查、如何思考其中的动态组件,以及如何避免混淆二进制字符串搜索、JavaScript 提取、prompt 提取、endpoint 和 feature-flag 检查以及二进制 patch。
## 为什么会有这个项目
Claude Code 通常通过一个简单的命令启动:
```
claude
```
该命令背后是一个打包的应用程序。特定于平台的原生包(例如 `@anthropic-ai/claude-code-linux-x64`)包含一个名为 `claude` 的大型可执行文件。诸如 `tweakcc` 之类的工具可以从该可执行文件中提取内嵌的、被压缩的 JavaScript。提取后,可以在 JavaScript 中搜索 endpoint、feature flag、环境变量和类似 prompt 的字符串。
这为技术读者提供了一种实用的方式来回答以下问题:
- 特定版本的 Claude Code 中存在哪些字符串?
- 特定的 feature flag 或 endpoint 出现在哪里?
- 实践中的“patch Claude Code 可执行文件”到底是什么意思?
- 像 Piebald 这样的 prompt 语料库与编译后的包有什么关系?
- 检查、提取和 patch 之间有什么区别?
## 仓库内容
```
README.md
CLAUDE_CODE_BINARY_INSPECTION_WORKFLOW.md
USEFUL_INFO_FROM_EXTRACTED_CLAUDE_JS.md
artifacts/
prompts-generated-2.1.150.json
bucket-reports/
README.md
01-startup-and-network-behavior.md
...
scripts/
extract-claude-code-js.ps1
generate-bucket-reports.cjs
scan-claude-code-js.ps1
```
`CLAUDE_CODE_BINARY_INSPECTION_WORKFLOW.md` 是详细的入门指南。它假定读者具备一定的技术能力,但不需要提前了解有关 Claude Code 二进制文件、Bun 打包的可执行文件、`tweakcc`、prompt 片段或 Piebald 工作流的领域知识。
`scripts/` 目录包含调查期间使用的可重现 PowerShell 工作流。
`bucket-reports/` 包含每个检查桶对应的一份当前版本的 Markdown 报告。每份报告都是根据当前的 Claude Code 原生二进制包生成的,并包含解析出的 Claude 二进制版本。
大型生成文件被有意忽略:
- 下载的 npm tarball
- 解包的原生包
- 提取出的 JavaScript 文件
- 参考仓库的本地克隆
为记录在案的 `2.1.150` 运行生成的 prompt JSON 作为一个小型、可检查的产物被提交了:
```
artifacts/prompts-generated-2.1.150.json
```
## 快速开始
安装或验证基础工具:
```
node --version
npm --version
tar --version
```
从下载的 Claude Code 原生包中提取内嵌的 JavaScript:
```
.\scripts\extract-claude-code-js.ps1 -Version 2.1.150 -OutDir .\artifacts
```
或者使用当前的 npm 发布版本:
```
.\scripts\extract-claude-code-js.ps1 -Version latest -OutDir .\artifacts
```
扫描提取出的 JavaScript,以查找 Reddit 帖子中讨论的指标:
```
.\scripts\scan-claude-code-js.ps1 -JsPath .\artifacts\claude-code-2.1.150.js
```
扫描脚本会查找以下标记:
- `function nAA`
- `function n0A`
- `tengu_heron_brook`
- `Rv("heron_brook", ...`
- `/api/claude_cli/bootstrap`
- `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`
- `DISABLE_GROWTHBOOK`
- `GrowthBook`
压缩后的函数名是特定于版本的。在调查其他版本时,建议优先使用稳定的锚点,例如 endpoint 路径、环境变量名和 feature flag 键。
## 提取脚本的功能
`scripts/extract-claude-code-js.ps1`:
1. 通过 npm 解析 Claude Code 包版本。
2. 使用 `npm pack` 下载 `@anthropic-ai/claude-code-linux-x64`。
3. 在本地解压 `.tgz` 包。
4. 查找原生 `package/claude` 可执行文件。
5. 针对该下载的可执行文件运行 `npx tweakcc unpack`。
6. 将提取出的 JavaScript 写入 `artifacts/claude-code-.js`。
该脚本显式地将下载的二进制文件路径传递给 `tweakcc unpack`,因此它检查的是包的副本,而不是修改你已安装的 Claude Code。
## 扫描脚本的功能
`scripts/scan-claude-code-js.ps1`:
1. 读取提取出的 JavaScript 文件。
2. 搜索 Reddit 讨论中固定的一系列标记。
3. 打印每个匹配项的字节位置和一小段上下文片段。
它不是解析器,也不能证明 runtime 行为。它只是一个快速的确认工具,用于查找提取出的代码中是否存在特定的字符串和压缩的函数名。
## 这与 Piebald 的 system prompt 仓库有何关联
公开的 Piebald prompt 仓库发布了可读的 Markdown prompt 片段和 token 计数。其公开的 `tools/updatePrompts.js` 脚本使用结构化的 prompt JSON 并将其转换为 Markdown 文件。
底层的提取原语位于 `Piebald-AI/tweakcc` 中,具体为 `tools/promptExtractor.js`。该脚本解析提取出的 JavaScript 并输出包含以下字段的 prompt 记录:
```
{
"name": "Agent Prompt: Example",
"description": "Prompt description",
"pieces": ["text before ${", "} text after"],
"identifiers": [0],
"identifierMap": {
"0": "VARIABLE_NAME"
},
"version": "2.1.150"
}
```
从概念上讲,该工作流如下:
```
npm registry
-> platform package tarball
-> native Claude Code executable
-> embedded minified JavaScript
-> extracted prompt JSON
-> readable markdown prompt files
```
本仓库侧重于通过前四个阶段实现的更广泛的二进制检查学习路径。System prompt 提取是其后续的一个用例。详细指南介绍了如何在提取 JavaScript 后运行原始的 prompt 提取器。
## 检查 vs 提取 vs Patch
这是不同的活动:
- 检查:搜索下载的包或提取的 JavaScript,而不进行任何更改。
- 提取:将内嵌的 JavaScript 或类 prompt 字符串转换为单独的文件以进行分析。
- Patch:修改本地的 Claude Code 安装。
最安全的学习路径是首先进行检查:
```
download package copy
extract JavaScript
search JavaScript
extract prompt JSON
compare public prompt corpus
only then consider local patching
```
如果你确实要对本地安装进行 patch,请确切了解正在修改哪个文件以及如何还原它。`tweakcc --apply` 是预期的 prompt 自定义路径;`adhoc-patch`、手动解包/编辑/重新打包工作流以及直接字符串替换更直接,但风险也更大。
## 来自 v2.1.150 探索的说明
对于 Claude Code `2.1.150`,本地提取和扫描确认提取出的 JavaScript 包含 Reddit 帖子中讨论的标记,包括:
- `/api/claude_cli/bootstrap`
- `tengu_heron_brook`
- `Rv("heron_brook", ...`
- `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC`
- `DISABLE_GROWTHBOOK`
找到代码路径和字符串可以确认提取出的代码中包含这些机制。但这本身并不能证明每种配置下的所有 runtime 行为。runtime 行为取决于身份验证状态、provider 模式、环境变量、设置、启动路径和网络可用性。
## Bucket 报告
当前生成的 bucket 报告位于:
- [Claude Code 二进制检查 bucket 报告](./bucket-reports/README.md)
每份 bucket 报告都标有用于提取的 Claude 二进制文件版本。
## 安全与策略
将此工作流用于合法的检查、兼容性研究、审计和个人学习。
请勿使用它来绕过组织控制、向用户或管理员隐藏行为、重新分发已 patch 的专有二进制文件,或在针对具有文件系统和 shell 访问权限的开发人员工具运行不受信任的 patch 脚本。
本项目与 Anthropic 或 Piebald AI 没有关联。
## 延伸阅读
从详细指南开始:
- [Claude Code 二进制检查入门](./CLAUDE_CODE_BINARY_INSPECTION_WORKFLOW.md)
然后与公开的灵感来源进行比较:
- [Reddit 讨论](https://www.reddit.com/r/ClaudeCode/comments/1tmizuy/claude_code_v21150_now_allows_anthropic_to/)
- [Piebald-AI/claude-code-system-prompts](https://github.com/Piebald-AI/claude-code-system-prompts)
- [Piebald-AI/tweakcc](https://github.com/Piebald-AI/tweakcc)
标签:AI合规, AI工具分析, CMS安全, JavaScript, MITM代理, 二进制分析, 云安全运维, 云资产清单, 提示词工程, 数据可视化, 暗色界面, 策略决策点, 自定义脚本, 逆向工程