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代理, 二进制分析, 云安全运维, 云资产清单, 提示词工程, 数据可视化, 暗色界面, 策略决策点, 自定义脚本, 逆向工程