RAZKOM/JSDecloak
GitHub: RAZKOM/JSDecloak
一款完全在浏览器端运行的纯前端JavaScript反混淆工作台,集成了多种主流反混淆引擎与作用域感知的智能重命名功能,帮助安全研究人员离线、安全地还原和分析复杂混淆代码。
Stars: 1 | Forks: 0
## 工作原理
1. 将 `.js` / `.mjs` / `.cjs` / `.ts` 文件拖入输入面板,或者粘贴代码并为解析器设置一个文件名提示。
2. 打开 **pipeline**(或按 **⌘/Ctrl + Shift + P**)并选择要运行的步骤及其顺序:格式化器、反混淆引擎,然后是 AST 解析和索引。
3. **⌘/Ctrl + Enter** 会在 Web Worker 中运行管线,以保持 UI 的响应性。
4. 在输出编辑器中使用 **rename queue** 或按 **F2** 一次重命名一个绑定;引用会同步更新并遵循遮蔽规则(基于 Babel 的 `scope.rename`,而非文本搜索)。
5. 导出 **rename map**(JSON)以便在类似文件上复用,或者保存一个 **project**(`.jsdecloak.json`),其中捆绑了输入、重命名、管线相关设置和注解。
## 功能特性
**编辑器:** 两侧均使用 Monaco:支持语法高亮、输出面板上的格式化命令,以及清理后代码的原位重命名。
**管线:** 可重新排序的步骤及开关:首先运行 js-beautify,然后是可选的反混淆,最后是解析/符号索引。选项包括打印宽度、缩进、JSX/TypeScript 解析标志、AST 标签页中可选的 **slim AST tree**,以及在选择 Wakaru 引擎时的“aggressive”模式。
**反混淆引擎:** 全部在客户端运行;当反混淆步骤开启时,选择其中一个:
| 引擎 | 作用 |
|--------|------|
| **Webcrack** | 默认选项。解包 webpack/browserify 风格的捆绑包并应用其自身的处理阶段;此处最强大的通用选择。 |
| **Synchrony** | 针对 obfuscator.io 风格的模式;通常比 Webcrack 或 Wakaru 更为保守。 |
| **Wakaru** | 广泛的 AST 级别还原;可能是最具侵入性的。如果它在 worker 内部抛出异常,运行将**回退到 Webcrack**(请查看日志)。 |
| **None** | 跳过自动反混淆:仅进行美化和解析,然后手动处理。 |
**抽屉面板:** 管线日志、带有引用计数的符号表、重命名历史,以及(启用时)解析后的紧凑 AST 视图。
**侧边面板:** **Strings** 扫描、与绑定关联的 **annotations**(它们在重命名后依然保留并与项目一起保存),以及原始输入与当前输出之间的 **diff** 视图。
**持久化:** 可选自动保存到 `localStorage`,会话恢复,以及显式的 **Open / Save project** 用于 `.jsdecloak.json`。
## 安全说明
当 **Webcrack** 运行时(无论是因为你选择了它,还是因为其他引擎失败且 worker 发生了回退),它可能会**在 worker 内部评估来自你输入的解码片段**。仅分析你信任的代码;将未知样本视为运行不受信任的代码(网络访问仍受浏览器限制,但可能出现 CPU 死循环或令人意外的行为)。
## 本地运行
需要当前的 **Node.js** 版本。
```
npm install
npm run dev # http://localhost:5173
npm run build # production build → dist/
npm run preview # serve dist/
npm run lint
```
## 脚本 (冒烟 / 检查)
这些脚本会在不启动 Vite 的情况下测试解析器、重命名、引擎或 shim:
```
node --experimental-vm-modules scripts/smoke.mjs
node scripts/test-webcrack.mjs
node scripts/probe-engines.mjs
node scripts/test-shims.mjs
```
`scripts/smoke-new.mjs` 通过使用 **jiti** 加载的 TypeScript 覆盖了较新的项目/重命名/注解路径;如果你想运行该脚本,请安装 `jiti`。
## 键盘快捷键
| 快捷键 | 操作 |
|----------|--------|
| **⌘/Ctrl + Enter** | 运行管线 |
| **⌘/Ctrl + Shift + P** | 打开管线配置 |
| **F2** | 在光标处重命名绑定(输出面板) |
| **Esc** | 关闭模态框 |
## 启发式规则 (重命名队列)
标识符会根据以下模式进行评分并加入队列:
- `^_0x[a-f0-9]{3,}$` → 高分
- `^\$[a-f0-9]{4,}$` → 高分
- `^_{2,}\w*$` → 较高分
- 作用域内具有多个引用的极短名称 → 标记
## 限制
- **大型输入**(数百 KB 及以上)可能需要耗费明显的时间;UI 可能会对你发出警告。
- **无云同步:** 使用重命名映射导出或保存的项目文件在机器之间迁移工作。
- **捆绑包大小** 有意设计得较大(包含 Babel、各引擎、Monaco);这是一个专业工具,而不是一个微型小部件。
## 技术栈
Vite、React 19、TypeScript、Tailwind CSS 4、Monaco、Babel、webcrack、`@wakaru/unminify` 以及 `deobfuscator`(Synchrony),运行在一个专用的 worker 中,并带有用于浏览器兼容性的 Node shim。
标签:AST抽象语法树, Babel, CMS安全, JavaScript, Monaco Editor, Synchrony, Typescript, Wakaru, Webcrack, Web Worker, Web安全, 二进制发布, 云资产清单, 代码分析, 代码可读性, 代码美化, 凭证管理, 前端安全, 去混淆, 反混淆, 变量重命名, 开源工具, 浏览器工具, 自动化攻击, 蓝队分析, 逆向工程