No description
  • JavaScript 100%
Find a file
2026-09-16 10:00:09 +08:00
assets bump 2 2.1.273 2026-09-16 10:00:09 +08:00
src bump 2 2.1.273 2026-09-16 10:00:09 +08:00
.gitignore init 2026-09-09 17:19:50 +08:00
asset_names.txt bump 2 2.1.273 2026-09-16 10:00:09 +08:00
build.sh init 2026-09-09 17:19:50 +08:00
README.md update README 2026-09-10 12:00:10 +08:00

Claude Code 原生二进制 → 源码抽取 & 重建

结论

node_modules/@anthropic-ai/claude-code-win32-x64/claude.exeBun 编译的 Windows PE 业务 JS 源码以 约 1640 个 ES Module 形式内嵌,可从 __BUN 虚拟文件系统 B:/~BUN/root/)抽出。已实测。

抽取流程(逆向要点)

  1. 定位内嵌模块流一段连续可读区随版本平移。pipeline 按 // @bun @bytecode 分隔簇动态定位,不写死偏移。
  2. 模块分隔符:每个模块以 // @bun @bytecode\n 开头、\x00 结尾。
  3. 命名的核心突破:文件末尾路径表(B:/~BUN/root/*.js 按序去重) 与源码区模块顺序一致(验证:模块[3] = ISSUES_EXPLAINER = 名表[3];模块[5] = 入口 cli.js。 故 module_XXXX ↔ 名表[XXXX]。注意导出符号名会被压缩器改名(如 iPuP),但位置稳定
  4. 跨模块导入为绝对虚拟路径 B:/~BUN/root/chunk-*.js,改写为相对 ./chunk-*.js

重建

cd rebuild
bash build.sh        # 由 src/ 生成 dist/cli.js 并拷贝 chunk验证 --version
# 等价手写命令:
#   bun build src/cli.js --target=bun --format=esm --outfile=dist/cli.js
#   把其余 chunk 拷到 dist/(供运行时动态 import() 解析)

产物

  • src/:按 chunk 名命名的模块源码(导入已相对化)。已跟踪
  • dist/cli.js:重建的单文件 CLI 入口(约 38MB+ 同级 chunk 兄弟文件。 build.sh 生成、已被 .gitignore 忽略(不纳入版本库)。
  • assets/约 58 份嵌入式明文文本资产,按内容分类(见下)。
  • 对应的原始抽取物与脚本在上级仓库:cli_extract/(中间态)与 extract_scripts/pipeline

嵌入文本资产(约 58 份)

与 JS 源码分离的第二类嵌入文件markdown 技能、API 参考、文档、HTML 片段、脚手架。 加载方式为 readFileSync("B:/~BUN/root/X")(本二进制这些资源均为明文.zst 后缀仅标记, 实测全文件无有效 zstd 帧,故加载器的 zstd 兜底分支未触发)。完整索引见 assets/INDEX.md

分类 数量 说明
skill/ 10 Claude Code 技能(---\nname: 前置):plugin-authoringartifact-*rundoc
api-reference/ 19 SDK 多语言参考C# / Go / Java / PHP / Python / Ruby / TypeScript 的 Files / Streaming / Message Batches / Tool Use / Claude API
docs/ 15 知识文档MCP Discovery、Live Documentation Sources、Claude Tag、Platform Availability、Example 等
html/ 4 HTML 骨架/片段Artifact-tool body fragment 等)
scripts/ 8 JS 脚手架/工具(probe.mjs、runner scaffold、#!/usr/bin/env node
misc/ 2 其他提示文本autonomous-loop preamble 两版)

已知差异

  • dist/cli.js 可运行到 --version--help 部分路径仍依赖资产在虚拟路径 B:/~BUN/root/X 下可读。要让运行时完整加载这些资产,需把 assets/ 内容 按虚拟路径重新编译成完整 Bun standalonebun build --compile),静态反编译阶段无法一步到位。
  • 资产按内容标题命名,与 Bun 内部哈希文件名(asset_names.txt)非一一对应; 权威「哈希名 ↔ 内容」索引未能从二进制的 VLQ/sourcemap 混合元数据中反向推出。

生成

最近源文件 GIT_SHA 见 exe 内嵌 BUILD_TIME