RAZKOM/JSDecloak

GitHub: RAZKOM/JSDecloak

一款完全在浏览器端运行的纯前端JavaScript反混淆工作台,集成了多种主流反混淆引擎与作用域感知的智能重命名功能,帮助安全研究人员离线、安全地还原和分析复杂混淆代码。

Stars: 1 | Forks: 0

JSDecloak # JSDecloak **美化。反混淆。重命名。** 一个用于混淆 JavaScript 的浏览器工作台:管线阶段、作用域感知重命名、无需后端。
Open JSDecloak live app at jsdecloak.razkom.com
Screen recording of JSDecloak: obfuscated JavaScript in the input pane, run pipeline, cleaned output, AST drawer, and rename flow
## 工作原理 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安全, 二进制发布, 云资产清单, 代码分析, 代码可读性, 代码美化, 凭证管理, 前端安全, 去混淆, 反混淆, 变量重命名, 开源工具, 浏览器工具, 自动化攻击, 蓝队分析, 逆向工程