Thanks to visit codestin.com
Credit goes to github.com

Skip to content

让混淆不再成为逆向分析中的绊脚石。基于 Babel AST 的自动化 JS 反混淆工具,提供在线 Playground、命令行与可编程 API。

License

Notifications You must be signed in to change notification settings

kuizuo/js-deobfuscator

Repository files navigation

JS Deobfuscator

让混淆不再成为逆向分析中的绊脚石。基于 Babel AST 的自动化 JS 反混淆工具,提供在线 Playground、命令行与可编程 API。

在线体验

js-deobfuscator

功能亮点

  • 解密入口定位:按字符串数组长度、解密器调用次数或手动注入代码/解密器名称进行定位。
  • 字符串解密:识别字符串数组与旋转器,展开解密器封装并用明文替换调用点。
  • 控制流还原:展开控制流平坦化、移除死代码/花指令、合并对象属性与赋值。
  • 代码整形:unminify、美化、变量重命名(hex/short/custom),可选关键字标记。
  • 自卫清理:移除 self-defending / anti-debug 逻辑,支持多轮执行处理重度混淆。
  • 多形态使用:CLI、浏览器 Playground、TypeScript API,并附带真实案例集合。

快速开始

CLI / 本地

git clone https://github.com/kuizuo/js-deobfuscator
cd js-deobfuscator
pnpm install

# 处理单个文件并写入目录 (生成 output.js)
pnpm exec deob path/to/input.js -o ./out

# 也可通过 stdin 使用
cat path/to/input.js | pnpm exec deob > output.js

快速体验:将混淆代码放到 tmp/input.js,执行 pnpm tmp,结果会输出到 tmp/output.js

编程接口

import { readFileSync } from 'node:fs'
import { defaultOptions, Deob } from 'deob'

const code = readFileSync('input.js', 'utf8')
const deob = new Deob(code, {
  ...defaultOptions,
  decoderLocationMethod: 'callCount',
  decoderCallCount: 300,
  inlineWrappersDepth: 3,
  mangleMode: 'hex',
})

const { code: cleanCode, save } = deob.run()
await save('./out') // 写入 out/output.js

示例与案例

example/ 下收录了多组真实混淆样本,每个子目录包含:

  • index.ts: 配置/驱动脚本(建议使用 tsx 执行)。
  • input.js / output.js / pretty.js: 输入、还原结果与美化对比。
  • setupCode.js: 运行前注入的自定义代码。
  • errorCode.js: 替换失败时的错误片段输出。

项目结构

  • packages/deob: 核心 AST 变换与 CLI (deob 二进制)。
  • website: Nuxt 3 + Monaco 的在线 Playground。
  • example: 真实混淆案例与演示脚本。
  • tmp: 简单的本地快速体验目录。

致谢

该项目引用并受到 j4k0xb/webcrack 的启发,以及书籍 反爬虫 AST 原理与还原混淆实战

About

让混淆不再成为逆向分析中的绊脚石。基于 Babel AST 的自动化 JS 反混淆工具,提供在线 Playground、命令行与可编程 API。

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published