vibheksoni/unbuned

GitHub: vibheksoni/unbuned

一个零依赖的 Python 工具,用于从 Bun 编译的可执行文件中提取内嵌的 JavaScript bundle。

Stars: 43 | Forks: 7

unbuned logo # unbuned **从 Bun 编译的可执行文件中提取 JavaScript** 最简单的 Bun 反编译风格 JavaScript 提取器,专为逆向工程、恶意软件分析、安全研究和代码恢复而设计。 [![Python](https://img.shields.io/badge/Python-3.6+-blue.svg)](https://www.python.org/downloads/) [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![Release](https://img.shields.io/github/v/release/vibheksoni/unbuned)](https://github.com/vibheksoni/unbuned/releases) [![Platforms](https://img.shields.io/badge/Platforms-Windows%20PE%20%7C%20macOS%20Mach--O-lightgrey.svg)](https://github.com/vibheksoni/unbuned) [![Dependencies](https://img.shields.io/badge/Dependencies-None-success.svg)](https://www.python.org/downloads/) [![Stars](https://img.shields.io/github/stars/vibheksoni/unbuned?style=social)](https://github.com/vibheksoni/unbuned/stargazers) [![Forks](https://img.shields.io/github/forks/vibheksoni/unbuned?style=social)](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提取, 云资产清单, 代码提取, 反编译, 恶意软件分析, 无后门, 自定义脚本, 逆向工具, 逆向工程