pionxzh/wakaru
GitHub: pionxzh/wakaru
面向现代前端的 JavaScript 反编译工具,能够将打包和转译后的代码拆解还原为可读的独立模块。
Stars: 735 | Forks: 36
# Wakaru
[][Playground]
[][CodecovRepo]
[](https://t.me/wakarujs)
Wakaru 是面向现代前端的 JavaScript 反编译器。它可以从经过打包和转译的源代码中还原出原始代码。
- 🔪📦 将打包后的 JavaScript 从 [webpack][webpack] 和 [browserify][browserify] 中解包为独立的模块。
- ⛏️📜 反混淆来自 [Terser][Terser]、[Babel][Babel]、[SWC][SWC] 和 [TypeScript][TypeScript] 的转译代码。
- ✨📚 检测并还原降级的语法(甚至包括辅助函数!)。请参阅[列表](./packages//unminify/README.md#syntax-upgrade)。
- 🧪🛡️ 所有用例均受测试保护。所有代码均使用 TypeScript 编写。
## 演示
有关详细的示例,请参见[在线演示][Demo]。
## 功能
### Unminify(反混淆)
将转译后的代码转换回可读的形式,并还原降级的语法。
支持以下转译器:
- Terser
- Babel
- SWC
- TypeScript
有关更多信息,请参阅[文档](./packages/unminify/README.md)。
### Unpacker(解包)
将打包的 JavaScript 转换为独立的模块。
支持以下打包器:
- webpack
- browserify
## 试用
在 [Playground][Playground] 中测试该工具并查看其实际效果。
## 🖥 使用 CLI
### 交互模式
默认情况下,CLI 将在交互模式下运行并引导您完成整个过程。\
您也可以传递[选项](#options)以跳过交互模式中的某些步骤。
```
npx @wakaru/cli
# 或
pnpm dlx @wakaru/cli
```
### 选项
运行 `npx @wakaru/cli --help` 以查看完整的选项列表。
| 选项 | 默认值 | 描述 |
| --------------- | ------- | ---------------------------------- |
| `--output` | `"out"` | 输出目录 |
| `--force` | `false` | 强制覆盖输出目录 |
| `--concurrency` | `1` | 指定并发任务的数量 |
| `--perf` | `false` | 显示性能指标 |
| `--perf-output` | | 性能指标输出目录 |
`--concurrency` 可用于加速处理过程。但请注意,如果输入文件过大,该过程可能会出现 OOM(内存溢出)。
### 非交互模式
如果您想在非交互模式下运行 CLI,可以通过将功能名称作为第一个参数传递来指定功能。
`unpacker` 和 `unminify` 将仅运行相应的功能。\
`all` 将按顺序运行 `unpacker` 和 `unminify`。
```
npx @wakaru/cli all [options]
npx @wakaru/cli unpacker [options]
npx @wakaru/cli unminify [options]
```
这些选项**仅**在 `all` 模式下可用。
| 选项 | 默认值 | 描述 |
| ------------------- | ---------------- | ------------------------ |
| `--unpacker-output` | `"out/unpack"` | 覆盖 unpacker 输出目录 |
| `--unminify-output` | `"out/unminify"` | 覆盖 unminify 输出目录 |
当运行单个功能(`unpacker` 或 `unminify`)时,CLI 将仅使用 `--output` 选项中指定的路径。这意味着,与在 `all` 模式下会自动在输出目录中创建子目录(`out/unpack` 和 `out/unminify`)不同,在单功能模式下,输出文件将直接放置在指定的 `--output` 目录中,而不会创建任何额外的子目录。
## 📦 使用 API
```
npm install @wakaru/unpacker @wakaru/unminify
# 或
pnpm install @wakaru/unpacker @wakaru/unminify
# 或
yarn add @wakaru/unpacker @wakaru/unminify
```
## 法律免责声明
未经事先双方同意而使用 `wakaru` 攻击目标是非法的。最终用户有责任遵守所有适用的地方、州和联邦法律。开发者不承担任何责任,也不对本程序的任何误用或造成的损害负责。
## 许可证
[MIT](./LICENSE)
点击展开
### `@wakaru/unpacker` ``` import { unpack } from '@wakaru/unpacker'; const { modules, moduleIdMapping } = await unpack(sourceCode); for (const mod of modules) { const filename = moduleIdMapping[mod.id] ?? `module-${mod.id}.js`; fs.writeFileSync(outputPath, mod.code, 'utf-8'); } ``` ### `@wakaru/unminify` ``` import { runDefaultTransformationRules, runTransformationRules } from '@wakaru/unminify'; const file = { source: '...', // source code path: '...', // path to the file, used for advanced usecases. Can be empty. } // This function will apply all rules that are enabled by default. const { code } = await runDefaultTransformationRules(file); // You can also specify the rules to apply. Order matters. const rules = [ 'un-esm', ... ] const { code } = await runTransformationRules(file, rules); ``` 您可以在 [/unminify/src/transformations/index.ts](https://github.com/pionxzh/wakaru/blob/main/packages/unminify/src/transformations/index.ts) 查看所有的规则。 请注意,该项目仍处于早期开发阶段。API 未来可能会发生更改。 并且这些包的体积非常庞大。未来可能会对其进行缩减。在浏览器中使用时请谨慎(是的,就像 Playground 一样,它可以在浏览器中运行 ✨)。标签:AST 抽象语法树, Babel 反编译, Browserify 解包, JavaScript 反混淆, JavaScript 反编译, JavaScript 逆向, MITM代理, SWC 代码还原, Terser 反混淆, TypeScript 代码还原, VPS部署, Webpack 解包, Webpack 还原, Web安全, 代码分析, 代码可读性恢复, 代码还原工具, 凭证管理, 前端源码还原, 前端逆向工程, 开源安全工具, 打包工具还原, 数据可视化, 模块拆分, 自动化攻击, 蓝队分析, 语法降级还原, 软件分析, 逆向工程平台