Prajwalsrinvas/claude-code-reverse-engineering
GitHub: Prajwalsrinvas/claude-code-reverse-engineering
通过阅读和还原 Claude Code 压缩后的 JavaScript 源码,对其核心功能与子系统进行系统性逆向工程深度剖析的技术文档与工具集。
Stars: 3 | Forks: 1
# Claude Code 内部工作原理
对 Claude Code 功能的逆向工程深度剖析,完全基于直接阅读压缩后的源码。
## 为什么会有这个项目
Claude Code 并不是开源的。[公开的 GitHub 仓库](https://github.com/anthropics/claude-code)仅包含插件、示例和更新日志——实际的 CLI 是以压缩过的 JavaScript 代码发布的。在本项目启动时,并没有官方文档解释 `/insights` 的内部工作原理,要了解这一点,唯一的办法就是阅读源码。
第一次分析演变成了一个可重复的过程:获取源码,使用 webcrack + prettier 解压还原,搜索锚点字符串,提取相关代码,重命名标识符,并记录发现。这个过程被打包成了一个 [Claude Code 技能](skill/),因此可以将其复用于任何功能。
**自项目启动以来,有一件事发生了变化:** npm 包不再包含代码。从 v2.1.113 版本开始,它变成了一个简易的安装程序,用于下载针对特定平台的**原生 Bun 二进制文件**,其中 `cli.js` 被嵌入在二进制文件的模块图中。提取步骤现在会从该二进制文件中拉取 `cli.js`(见下文);此后的所有步骤——解压还原、定位、提取、记录——均保持不变,因为字符串字面量在压缩后依然完好无损。
所有的深度剖析都已针对 **Claude Code v2.1.201** 进行了重新更新(由 Claude Fable 5 进行分析)。每篇文章都带有一个“演进历程”部分,将其与最初的 v2.1.34 分析进行比较;跨模块的演进历程记录在 [FIELD-NOTES.md](FIELD-NOTES.md) 中。
### 功能深度剖析
| 功能 | 作用 | 深度剖析 |
|---------|-------------|----------|
| **`/compact`** | 在保留摘要的同时清除历史记录。现在它是一个后台预计算/借用系统,配备了强化的摘要提示词、熔断器、抖动检测器和缓存共享——此外还有一个新的 `/autocompact` 命令 | [deep-dives/compact/](deep-dives/compact/) |
| **`/insights`** | 读取过往会话,利用 Opus 4.8 提取结构化切面,进行聚合,生成叙述性章节,并生成 HTML 报告 | [deep-dives/insights/](deep-dives/insights/) |
| **`/usage` & `/context`** | `/stats`、`/cost`、`/usage` 现在合并为了一个命令(一个包含 4 个标签页的模态框):热力图、连续记录、各模型的 token 消耗、成本。`/context` 将上下文窗口的使用情况可视化为彩色网格 | [deep-dives/stats-and-context/](deep-dives/stats-and-context/) |
| Slash 命令菜单 | `/` 自动补全——使用 Fuse.js 模糊搜索,支持加权字段(现在包含显示名称的键)、指数衰减的近期评分,以及一个日益由技能驱动的注册表 | [deep-dives/slash-commands/](deep-dives/slash-commands/) |
### 子系统深度剖析(新增)
| 子系统 | 涵盖内容 | 深度剖析 |
|-----------|----------------|----------|
| **Skills** | SKILL.md 技能如何被发现、解析、合并和调用——单一的 `Skill` 工具、多来源注册表、上下文加载、堆叠调用、内联与 fork 执行 | [deep-dives/skills/](deep-dives/skills/) |
| **Agents & Workflows** | 多 Agent 运行时:Agent/Task 工具、默认后台运行的 subagent、隐式团队 + SendMessage、Agent 权限模型、深度上限,以及动态工作流引擎 | [deep-dives/agents-and-workflows/](deep-dives/agents-and-workflows/) |
| **上下文工程与缓存** | 缓存断点、跨客户的“全局”缓存作用域、精简的系统提示词、ToolSearch 延迟加载、TTL 选择,以及保留缓存的技巧(`/cd`、将日期作为提醒) | [deep-dives/context-engineering/](deep-dives/context-engineering/) |
| **远程控制** | 两个桥接器(WebSocket REPL + HTTP worker)、控制请求协议、轮询时机、推送通知、调度、Teleport,以及包含 10 个条件的门控链 | [deep-dives/remote-control/](deep-dives/remote-control/) |
每个深度剖析文件夹都包含一个 **README.md**,其中有完整的分析报告(架构图、代码摘录、发现),以及一个 **\*-annotated.js** 文件,其中源码的标识符已被重命名为有意义的名称。Slash 命令的深度剖析复用了在 compact 注释文件中已提取的代码。
## 技能
[`skill/`](skill/) 文件夹包含一个 Claude Code 自定义技能,它自动化了分析管道:
1. **获取源码** — 从已安装的原生 Bun 二进制文件中提取 `cli.js`
2. **解压还原** — webcrack (`--no-jsx`) 进行语法转换 + prettier 进行格式化(约 965K 行可读代码)
3. **定位** — 搜索锚点字符串(字符串字面量在压缩后能够完美保留)
4. **提取与注释** — 提取该功能的代码,内联重命名标识符
5. **分析** — 记录行为、LLM 调用、数据流
6. **报告** — 生成带有代码证据的 markdown 报告
7. **自我反思** — 评估技能本身是否应该被更新
要使用它,请将 `skill/` 复制到 `~/.claude/skills/analyze-cc-feature/` 并通过 `/analyze-cc-feature [feature-name]` 调用。需要已安装 [Claude Code](https://code.claude.com/docs)。
有关完整说明,请参阅 [skill/SKILL.md](skill/SKILL.md);有关工具比较、现有技术以及已知的混淆标识符表,请参阅 [skill/REFERENCE.md](skill/REFERENCE.md)。
## 源码是如何获取的
Claude Code 的 CLI 实现是一个压缩后的 `cli.js`(在 2.1.201 版本中约为 18.7 MB)。它是**压缩过的**(移除了空格,缩短了标识符),而不是**混淆过的**(没有控制流平坦化,没有字符串加密)。字符串字面量——提示词、错误消息、字段名称、遥测事件——都完好无损,是证明代码功能的主要证据。
自 v2.1.113 起,`cli.js` 不再存在于 npm 包中;它被嵌入在原生 Bun 二进制文件的模块图中(Linux 上是 `.bun` ELF 区段)。技能的提取器会将其提取出来,然后通过 webcrack + prettier 进行解压还原:
```
bash skill/scripts/extract-cli.sh # locate the installed native binary, extract cli.js from its .bun section
bash skill/scripts/unminify.sh # webcrack --no-jsx + prettier → deobfuscated.js
```
`--no-jsx` 非常关键:对于如今约 18 MB 的打包文件,webcrack 的 JSX 反编译过程需要花费约 50 分钟,消耗 4 GB 以上内存,并且生成的输出 Prettier 无法重新解析——禁用它只会损失一些冗长的 `createElement` 样板代码。结果会输出为 `webcrack-output/deobfuscated.js`(约 965K 行,已被 gitignored 忽略)。有关二进制图解析器,请参见 [skill/scripts/extract-bun-cli.py](skill/scripts/extract-bun-cli.py)。
## 现有技术
其他对 Claude Code 进行过逆向工程的人:
| 谁 | 方法 |
|-----|--------|
| [Martin Alderson](https://martinalderson.com/posts/minification-isnt-obfuscation-claude-code-proves-it/) | 使用 acorn 进行 AST 差异分析——提出了“压缩不是混淆” |
| [0xdevalias](https://gist.github.com/0xdevalias/d8b743efb82c0e9406fc69da0d6c6581) | 全面的工具/技术目录 |
| [Sabrina](https://www.sabrina.dev/p/reverse-engineering-claude-code-using) | LLM 子 Agent 去混淆管道 |
| [ghuntley](https://ghuntley.com/tradecraft/) | 净室 LLM 转译 |
| [Kir Shatrov](https://kirshatrov.com/posts/claude-code-internals) | mitmproxy API 拦截 |
| [Reid Barber](https://www.reidbarber.com/blog/reverse-engineering-claude-code) | 逆向工程博客 |
| [ShareAI Lab](https://github.com/shareAI-lab/learn-claude-code) | 混合静态 + 动态 + LLM 管道 |
完整列表请参见 [skill/REFERENCE.md](skill/REFERENCE.md)。
## 使用的工具
| 工具 | 用途 |
|------|---------|
| [webcrack](https://github.com/j4k0xb/webcrack) | 语法解压缩(使用 `--no-jsx` 运行) |
| [Prettier](https://github.com/prettier/prettier) | 代码格式化 |
| [Claude Code](https://code.claude.com/docs) | 分析本身(初步分析:Claude Opus 4.6;2.1.201 更新:Claude Fable 5) |
标签:Claude Code, CMS安全, JavaScript, 云资产清单, 代码分析, 凭证管理, 数据可视化, 源码解析, 自定义脚本, 逆向工具, 逆向工程