vibheksoni/unbuned
GitHub: vibheksoni/unbuned
一个零依赖的 Python 工具,用于从 Bun 编译的可执行文件中提取内嵌的 JavaScript bundle。
Stars: 43 | Forks: 7

# unbuned
**从 Bun 编译的可执行文件中提取 JavaScript**
最简单的 Bun 反编译风格 JavaScript 提取器,专为逆向工程、恶意软件分析、安全研究和代码恢复而设计。
[](https://www.python.org/downloads/)
[](LICENSE)
[](https://github.com/vibheksoni/unbuned/releases)
[](https://github.com/vibheksoni/unbuned)
[](https://www.python.org/downloads/)
[](https://github.com/vibheksoni/unbuned/stargazers)
[](https://github.com/vibheksoni/unbuned/forks)
[为何开发](#why-it-exists) | [快速开始](#quick-start) | [功能](#features) | [真实样本](#real-world-samples) | [工作原理](#how-it-works)
## 什么是 unbuned?
**unbuned** 是一个零依赖的 Python 提取器,用于处理 Bun 编译的可执行文件。它能定位内嵌的 Bun bundle,剥离其周围的二进制噪声,并将干净的 JavaScript 写回磁盘。
如果你想逆向一个 Bun CLI,检查可疑的 Bun 打包二进制文件,恢复丢失的应用逻辑,或者研究生产环境中的 Bun 应用是如何打包的,这款工具正是你需要的。
## 为何开发
我构建 `unbuned` 正是为了应对这种时刻:当一个 Bun 可执行文件落在磁盘上,而你不想仅仅为了查看应用逻辑就启动一个完整的逆向工程项目。大多数时候,你真正需要的是 JavaScript bundle,要求速度快,且摩擦尽可能小。
这正是此仓库的全部意义所在:一个 Python 文件,零依赖,无需繁琐的安装仪式,输出的内容你可以立即进行 grep、diff、美化或审计。
## 安装
```
git clone https://github.com/vibheksoni/unbuned.git
cd unbuned
```
无需任何依赖。仅需 Python 3.6+。
## 快速开始
```
python unbuned.py
```
示例:
```
python unbuned.py droid.exe
python unbuned.py claude.exe
python unbuned.py freebuff
```
输出位于此处:
```
output//.js
```
## 功能
- 使用纯 Python 3.6+ 从 Bun 编译的可执行文件中提取 JavaScript
- 直接解析 Windows PE 的 `.bun` section
- 直接解析 macOS Mach-O 的 `__BUN,__bun` section
- 在 section 元数据不可用时,回退到 Bun magic-byte 发现机制
- 检测 JavaScript 边界并剥离二进制污染
- 使用 `debugId`、`sourceMappingURL` 和闭包标记来细化提取边界
- 将干净的 UTF-8 JavaScript 保存到 `output//.js`
- 保持可读性、可篡改性(hackable)和零依赖
## 支持的目标
`unbuned` 目前可以处理:
- Windows PE Bun 可执行文件
- macOS 瘦(thin)Mach-O Bun 可执行文件
- 可以通过 Bun magic-byte 回退机制定位到 bundle 的其他 Bun 打包二进制文件
它目前**尚未**实现原生的 ELF section 解析或 FAT/universal Mach-O 提取。
## 如何从 Bun 可执行文件中提取 JS?
通过 `unbuned` 运行该可执行文件:
```
python unbuned.py droid.exe
```
**输出**
```
Extracted: output/droid/droid.js
Size: 14,234,567 bytes
```
提取出的 JavaScript 将被保存到 `output//.js`。
## 真实样本
此仓库包含了从真实 Bun 应用中提取的 bundle,以便大家能直接看到 `unbuned` 从生产环境二进制文件中提取出了什么。
**当前的验证集:** 3 个真实目标,36+ MB 的提取出的 JavaScript,全部已提交在 [`output/`](output/) 中。
### 1. Factory Droid CLI (`droid.exe`)
- **提取内容:** 14.1 MB 的 JavaScript
- **包含:** agent 逻辑、模型配置、应用工作流
- **位置:** [`output/droid/droid.js`](output/droid/droid.js)
### 2. Claude Code (`claude.exe`)
- **提取内容:** 10.9 MB 的 JavaScript
- **包含:** Anthropic SDK 代码、工具定义、CLI 内部逻辑
- **位置:** [`output/claude/claude.js`](output/claude/claude.js)
### 3. Freebuff (`freebuff`)
- **提取内容:** 11.4 MB 的 JavaScript
- **包含:** 遥测事件、模型路由、产品和 CLI 流程
- **位置:** [`output/freebuff/freebuff.js`](output/freebuff/freebuff.js)
这些样本就是最好的证明。`unbuned` 的构建初衷是从真实发布的 Bun 可执行文件中提取有用的代码,而不仅仅是处理合成的测试用例。
## 为什么这些样本很重要
逆向工程工具的生死取决于其可信度。包含从 Droid、Claude Code 和 Freebuff 中提取的 bundle,使其价值变得具体可见:
- 你可以在运行该工具之前检查真实的输出
- 你可以将该仓库用作搜索 Bun 内部实现的平台
- 你可以验证在多 MB 的规模下,提取出的内容是否依然保持可读性
- 你可以针对真实目标对你自己的逆向工作流进行基准测试
## 你能得到什么
提取成功后,你将获得:
- 磁盘上的一个干净的 `.js` 文件
- 没有周围二进制垃圾内容的 UTF-8 文本
- 可直接用于 grep、静态分析、美化或人工审查的输出
这使得 `unbuned` 既适用于快速分类,也适用于更深度的逆向工程会话。
如果你想在自己运行之前评判该提取器,可以打开 [`output/`](output/) 中的样本输出并进行搜索。该仓库旨在证明这一声明,而不仅仅是口头说说而已。
## 工作原理
`unbuned` 使用多阶段提取过程:
1. **格式检测:** 检测可执行文件容器并选择最佳提取路径。
2. **Section 发现:** 在 PE 文件中定位 `.bun`,或在瘦 Mach-O 文件中定位 `__BUN,__bun`。
3. **Magic-Byte 回退:** 当 section 元数据不足时,搜索 Bun bundle 标记。
4. **JavaScript 标记检测:** 查找表示 bundle 起始的 `// @bun` 标记。
5. **边界检测:** 测量非打印字节比例,以找到从代码到二进制数据的过渡点。
6. **边界细化:** 使用 `//# debugId=`、`//# sourceMappingURL=` 和 `})();` 等标记来实现干净地停止。
7. **提取:** 解码恢复出的 JavaScript 并将其写入 `output//.js`。
### 边界检测算法
该提取器采用了针对真实 Bun payload 调优的实用启发式算法:
- 分析数据块中的非打印字符比例
- 查找 source map 注释(`//# sourceMappingURL=`)
- 检测 debug 标记(`//# debugId=`)
- 识别 IIFE 闭包(`})();`)
- 验证潜在边界之后类似二进制的数据
## 使用场景
- **逆向工程:** 无需先构建完整的反编译器即可了解 Bun 应用的工作原理
- **安全研究:** 检查已发布的 Bun 可执行文件,查找有风险的逻辑、机密信息或攻击面
- **恶意软件分析:** 揭开 Bun 打包的 dropper、loader 或可疑工具的真面目
- **代码恢复:** 在原始项目丢失但可执行文件尚存时恢复源码
- **学习:** 研究真实的 Bun 应用如何打包代码、依赖项和 runtime 行为
- **CTF / 挑战赛:** 在有时间限制的逆向工程任务中加快 bundle 提取速度
## 环境要求
- Python 3.6 或更高版本
- 无外部依赖
## 局限性
- 仅提取打包的 JavaScript,不支持原生模块或资源文件
- 尚未实现原生的 ELF 解析
- 尚不支持 FAT/universal Mach-O 二进制文件
- 压缩过的代码依然保持压缩状态
- 一些混淆代码仍需人工分析
## 伦理使用
此工具旨在用于合法的逆向工程、恶意软件分析、安全研究、学习和恢复工作。请尊重许可证、合同和当地法律。请负责任地使用它。
## 相关项目
- [asar](https://github.com/electron/asar) - 提取 Electron `app.asar` 归档文件
- [pkg](https://github.com/vercel/pkg) - 将 Node.js 应用打包为可执行文件
- [nexe](https://github.com/nexe/nexe) - 创建独立的 Node.js 可执行文件
**为那些宁愿去阅读 Bun 应用,也不愿凭空猜测的人而构建**
## 许可证
MIT 许可证 - 详情请参阅 [LICENSE](LICENSE)。
## 作者
[vibheksoni](https://github.com/vibheksoni)
如果这个仓库能帮助你更快地破解开 Bun 可执行文件,那正是它构建的初衷。
目前正在找工作。如果你正在寻找具有安全研究、逆向工程、恶意软件分析或全栈开发经验的人才,请联系我。
- X/Twitter: [@ImVibhek](https://x.com/ImVibhek)
- 个人网站: [vibheksoni.com](https://vibheksoni.com/)
- 安全博客: [opendoors.wtf](https://opendoors.wtf/)
- GitHub: [vibheksoni](https://github.com/vibheksoni)
_记住:能力越大,责任越大。请合法、符合道德地使用此工具。_标签:Bun, DAST, DNS 反向解析, Python, URL提取, 云资产清单, 代码提取, 反编译, 恶意软件分析, 无后门, 自定义脚本, 逆向工具, 逆向工程