KennethHelmuth/JS-Deobfuscator

GitHub: KennethHelmuth/JS-Deobfuscator

基于 Babel AST 的纯静态 JavaScript 反混淆工具,通过多 Pass 转换管道在不执行代码的前提下安全还原混淆脚本的可读形态。

Stars: 2 | Forks: 0

# JS-Deobfuscator 🛡️⚡ ``` __ ____ ____ __ ____ __ / // __/ / __ \ ___ ___ / /_ / __/__ __ ___ ____ ___ ___ / /_ ___ ____ __ / /_\ \ __ / /_/ // _ \/ _ \/ __// _// // / / /(_- B[Parser: @babel/parser] B --> C[Babel AST] C --> D[Orchestrator: engine.js] subgraph Passes [Configurable AST Transformation Passes] D --> P1[1. stringArray] P1 --> P2[2. proxyInliner] P2 --> P3[3. constantFolding] P3 --> P4[4. controlFlow] P4 --> P5[5. deadCode] P5 --> P6[6. renaming] end P6 --> E[Generator: @babel/generator] E --> F[Readable Deobfuscated JS] ``` ### 技术栈 - **Runtime:** Node.js (v18+) - **AST 解析与遍历:** `@babel/parser`, `@babel/traverse`, `@babel/types` - **代码生成:** `@babel/generator` - **CLI 接口:** `commander`, `chalk` - **测试框架:** `jest` ## ⚙️ 安装 ### 前置条件 确保你已安装 [Node.js](https://nodejs.org/) v18 或更高版本。 ### 全局安装(克隆仓库) ``` # Clone 仓库 git clone https://github.com/kennethHelmuth/JS-Deobfuscator.git cd JS-Deobfuscator # 安装 production 和 development 依赖 npm install # 全局 link package(安装 'js-deobfuscator' 命令) npm link ``` ### 通过 npx 运行(本地开发) 要在不进行全局安装的情况下直接运行,请使用 node: ``` node src/cli.js --help ``` ## 🚀 使用指南 ``` # 基本用法:deobfuscate 文件并输出至 deobfuscated.js js-deobfuscator input.js -o deobfuscated.js # 直接输出到 stdout(用于 piping) js-deobfuscator input.js | grep "domain.com" # 通过在 Safe Mode 下运行来禁用 aggressive transformations js-deobfuscator input.js -o deobfuscated.js --safe-mode # 指定要运行的确切 passes js-deobfuscator input.js -o deobfuscated.js --passes stringArray,constantFolding # 启用详细的 AST debugging 日志 js-deobfuscator input.js -o deobfuscated.js --debug # 导出概述所有已应用 transformations 的 JSON 报告 js-deobfuscator input.js -o deobfuscated.js --report report.json ``` ### 预期输出示例 #### 输入(已混淆): ``` var _0x5b6c = ["\x68\x65\x6c\x6c\x6f", "\x77\x6f\x72\x6c\x64"]; var _0x3e4f = { "add": function(a, b) { return a + b; } }; var a = 10 + 5; var res = _0x3e4f.add(_0x5b6c[0], _0x5b6c[1]); ``` #### 输出(反混淆后): ``` var num_1 = 15; var str_1 = "helloworld"; ``` ## 🛠️ 核心转换 Pass ### 1. 字符串数组解析器 (`stringArray`) 分析分配给字符串字面量数组的变量,识别关联的自调用 shift/rotation 函数,并使用我们自定义的 AST 解释器安全地模拟它们。评估并内联 decode helper 调用,返回实际的字符串字面量。 ### 2. 代理函数内联器 (`proxyInliner`) 定位代理对象和包装函数,这些函数的唯一功能是调用其他例程或评估算术表达式。将它们的表达式内联以清理调用栈层级。 ### 3. 常量折叠与传播 (`constantFolding`) 折叠像 `"a" + "b"`(变成 `"ab"`)或 `!![]`(变成 `true`)这样的静态操作,并传播被定义为常量且从未被重新赋值的变量。 ### 4. 控制流反平坦化 (`controlFlow`) 撤销控制流平坦化(即将顺序代码块封装在循环内的 switch 语句的 case 中)。顺序追踪执行路由并输出干净的线性块级作用域。 ### 5. 死代码消除 (`deadCode`) 移除 console 刷屏、debugging 行、空语句和无法到达的语句(例如 `return` 之后的代码,或 `if(false)` 块内部的代码)。 ### 6. 作用域感知重命名 (`renaming`) 利用 Babel 的作用域绑定,将像 `_0x2a3e` 这样被混淆的十六进制标识符重命名为干净的、派生自类型的变量名,例如 `str_1`、`num_2` 或 `func_1`,以保证名称隔离。 ## 🧪 运行测试 在 `tests/` 下配置了全面的单元测试套件,用于针对模拟的混淆代码模板运行每一个 pass。 ``` npm run test ``` ## ⚠️ 免责声明 此工具专为**安全研究、恶意软件分析和教育目的**而创建。在专有商业软件上使用此工具需遵守当地法律和许可协议。作者对滥用此工具不承担任何责任。
标签:CMS安全, DAST, JavaScript, MITM代理, 云安全监控, 云资产清单, 反混淆, 恶意软件分析, 自定义脚本, 逆向工程, 静态分析