Dark-Captcha/JS-Deobfuscator
GitHub: Dark-Captcha/JS-Deobfuscator
一个基于 Rust 和 Oxc 构建的高性能 JavaScript 去混淆工具,支持常量折叠、控制流还原和字符串解码等多种语义变换。
Stars: 6 | Forks: 3
# JS-Deobfuscator
基于 [OXC](https://oxc.rs) 构建的通用 JavaScript 去混淆工具。逐层处理字符串编码、控制流扁平化、常量混淆、代理函数和字符串数组轮转。
## 安装
```
cargo install --path .
```
## CLI 用法
```
# 文件输入
deob input.js -o output.js --stats
# Stdin
cat input.js | deob > output.js
# 使用全局上下文
deob input.js --globals '{"window":{"secret":"abc123"}}'
# 禁用转换
deob input.js --no-fold # skip static folding
deob input.js --no-transforms # skip semantic transforms
```
## 库用法
```
use js_deobfuscator::engine::api::JSDeobfuscator;
let result = JSDeobfuscator::new()
.deobfuscate("var x = 1 + 2; console.log(x);")?;
assert!(result.code.contains("console.log(3)"));
assert!(result.converged);
```
### 带选项
```
let result = JSDeobfuscator::new()
.max_iterations(100)
.global("window", serde_json::json!({"key": "value"}))
.deobfuscate(&source)?;
```
### 自定义模块
```
use js_deobfuscator::engine::module::Module;
struct MyTransform;
impl Module for MyTransform { /* ... */ }
let result = JSDeobfuscator::new()
.add_common(Box::new(MyTransform)) // runs in convergence loop
.add_locked(Box::new(MyLockedPass)) // runs once after convergence
.deobfuscate(&source)?;
```
## 功能
| 变换 | 示例 |
|-----------|---------|
| 常量折叠 | `1 + 2` → `3` |
| 字符串拼接 | `"hello" + " world"` → `"hello world"` |
| 内置方法 | `Math.floor(1.7)` → `1`, `atob("SGVsbG8=")` → `"Hello"` |
| Typeof/void/not | `typeof "x"` → `"string"`, `!0` → `true` |
| 三元运算符 | `true ? a : b` → `a` |
| 逻辑短路 | `false \|\| x` → `x` |
| 常量传播 | `var x = 5; f(x)` → `f(5)` |
| 别名内联 | `var e = Yp; e(1)` → `Yp(1)` |
| 代理内联 | `function f(a,b){return g(b,a)} f(1,2)` → `g(2,1)` |
| 对象解析 | `var t={F:445}; t.F` → `445` |
| 成员简化 | `obj["key"]` → `obj.key` |
| 死代码消除 | `if(false){...}` → 已移除 |
| 全局注入 | `window.secret` → `"abc123"` (用户提供) |
| 字符串数组解码 | obfuscator.io 轮转模式 → 已解码字符串 |
| 语句拆分 | `var a=1, b=2` → `var a=1; var b=2;` |
| 大括号包裹 | `if(x) return 1` → `if(x) { return 1; }` |
## 架构
逐层架构,每一层仅依赖于其下层:
```
value/ ← Pure JS computation (no OXC)
ast/ ← OXC AST helpers (zero-copy extraction)
scope/ ← Symbol resolution (wraps OXC Scoping)
fold/ ← Static expression folding (operators, builtins, methods)
eval/ ← Dynamic evaluation (Node.js subprocess, optional)
transform/ ← Semantic transforms (propagation, inlining, dead code)
engine/ ← Convergence loop + public API
format/ ← Output normalization
```
双阶段收敛:公共模块循环直至稳定,锁定模块运行一次,若产生更改则重启。
## 依赖项
- **OXC v0.124.0** — 解析器、AST、语义分析、代码生成
- **无嵌入式 V8** — 用于动态 eval 的 Node.js 子进程 (可选)
- **230 个测试**,clippy 无警告
## 许可证
Apache-2.0
标签:CMS安全, JavaScript, MITM代理, Oxc, Rust, Web安全, 云安全监控, 云资产清单, 代码优化, 代码转换, 代码还原, 去混淆, 反混淆, 可视化界面, 字符串解码, 常量折叠, 恶意代码分析, 控制流平坦化, 数据可视化, 符号执行, 编译原理, 网络流量审计, 蓝队分析, 逆向工程, 通知系统, 配置文件, 静态分析, 静态求值