claude-code源码泄露-从 Bun 项目的打包产物中还原原始代码——利用源映射反向提取源码的完整教程
本文介绍如何从使用Bun构建的项目中还原原始TypeScript/JavaScript源码。主要利用打包生成的cli.js.map源映射文件,通过三种方法提取代码:1)使用Node.js的source-map库编写提取脚本;2)借助在线可视化工具或命令行工具;3)手动检查map文件中的sourcesContent字段。文章详细说明了文件结构(bun.lock、cli.js等的作用)、还原原理和具体
前言
npm pack @anthropic-ai/claude-code@2.1.88 --registry=https://registry.npmjs.org


从提供的文件列表来看这是一个使用 Bun 构建的项目,很可能将原始的 TypeScript(或 JavaScript)源代码打包成了一个可执行的 cli.js 文件,并附带源映射 cli.js.map。若要还原出原始代码,可以利用源映射文件反向提取出源码。
从你提供的文件列表来看,这是一个使用 Bun 构建的项目,很可能将原始的 TypeScript(或 JavaScript)源代码打包成了一个可执行的 cli.js 文件,并附带源映射 cli.js.map。若要还原出原始代码,可以利用源映射文件反向提取出源码。
1. 文件的作用
bun.lock– Bun 的依赖锁文件,记录了精确的依赖版本。cli.js– 打包后的入口脚本,可能是编译后的 JavaScript,通常包含#!/usr/bin/env bun等可执行头。cli.js.map– 源映射文件,记录了打包后代码与原始源代码之间的位置对应关系,有时会内嵌源码。sdk-tools.d.ts– TypeScript 类型声明文件,可能用于对外暴露 SDK 的接口定义,本身不是实现代码。vendor/– 存放第三方依赖或编译后产物的目录,一般不是原始源码。package.json/LICENSE.md/README.md– 项目配置文件、许可证和说明文档。
2. 还原原理
源映射(.map 文件)有两种常见形式:
- 外部映射:
cli.js.map文件包含sources字段,指向原始文件的路径(可能是相对路径),并可能包含sourcesContent字段,里面存放了原始源码的文本。 - 内联映射:
cli.js末尾会有//# sourceMappingURL=data:application/json;base64,xxxx这样的注释,将映射直接嵌入。
如果你的 cli.js.map 是完整的,且其中包含了 sourcesContent,那么就可以直接从中提取出所有原始源码。如果只有路径而没有内容,那么只能知道文件结构,但内容需要从原始文件系统获得(通常项目发布时会将源码一起打包在源映射中)。
3. 还原步骤
方法一:使用 Node.js 脚本提取
安装 source-map 库:
npm install source-map
创建一个脚本 extract.js:
import fs from 'fs';
import path from 'path';
import sourceMap from 'source-map';
const mapFile = 'cli.js.map';
const outputDir = './restored-src';
// 读取源映射
const rawMap = JSON.parse(fs.readFileSync(mapFile, 'utf-8'));
const consumer = await new sourceMap.SourceMapConsumer(rawMap);
// 确保输出目录存在
if (!fs.existsSync(outputDir)) fs.mkdirSync(outputDir, { recursive: true });
// 获取所有源文件及其内容
const sources = consumer.sources;
for (const source of sources) {
// 原始文件名
const fileName = path.basename(source);
const filePath = path.join(outputDir, fileName);
// 尝试从 sourcesContent 中获取内容
const content = consumer.sourceContentFor(source, true);
if (content) {
fs.writeFileSync(filePath, content, 'utf-8');
console.log(`✅ 还原: ${source} -> ${filePath}`);
} else {
console.warn(`⚠️ 没有找到内容: ${source}`);
}
}
consumer.destroy();

然后运行:
node extract.js

还原的源码会保存到 restored-src/ 目录中。

方法二:使用在线工具或命令行工具
- source-map-visualization:部分在线工具支持上传
.map文件并显示源码。 source-mapCLI:可以通过安装source-map的全局命令行工具来提取,但编写脚本更灵活。
方法三:手动检查
如果你希望快速查看源码,可以直接用文本编辑器打开 cli.js.map,搜索 "sourcesContent" 关键字,如果有该字段,里面就是 Base64 编码或明文的源码,可以手动提取。但通常 sourcesContent 是数组,与 sources 一一对应。
4. 注意事项
- 如果
sourcesContent不存在,则无法从该文件还原源码,只能通过路径和调试信息推断文件结构。 - 还原出的代码格式可能与原始代码略有差异(如缩进可能被压缩),但基本逻辑完整。
- 如果项目使用了
bun build并开启了--sourcemap,通常sourcesContent是默认包含的(取决于配置)。你可以检查cli.js.map的内容确认。
5. 后续步骤
还原出源码后,你可以结合 package.json 中的依赖信息和 sdk-tools.d.ts 的类型定义来理解项目结构。如果还原的代码缺失了一些配置文件(如 tsconfig.json),可能需要手动创建以便继续开发。
更多推荐
所有评论(0)