Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/ejfkdev/jd
静态分析动态分析 (沙盒)代码分析逆向工程恶意软件分析实用工具与框架
GitHubejfkdev/jd

jd

Go CLI,用于反混淆 javascript-obfuscator (obfuscator.io) 的输出,并通过 AST 转换、静态解码和 goja 沙箱回退来反压缩 JavaScript。

查看仓库
2201个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

jd

CI Release License Go Version Release zread

English

jd 是一个 Go 工具,用于反混淆 javascript-obfuscator (obfuscator.io) 输出并还原 JavaScript 代码的可读性。它是 webcrack 和 synchrony 的 Go 移植版。

功能

obfuscator.io 反混淆

检测并还原 javascript-obfuscator 输出:

  • 字符串数组检测 (函数包装形式和简单数组形式,支持 var/const/let)
  • 数组旋转器检测 (push/shift IIFE + break 条件)
  • 解码器检测 (索引偏移、Base64/RC4/自定义编码、双参数解码器)
  • 包装器别名解析 (var/函数别名)
  • 混合解码 — 静态模拟 (SIMPLE/Base64/RC4) 优先,goja 沙箱兜底支持自定义编码
  • 辅助函数移除 — 解码后移除字符串数组、旋转器和解码器声明

可读性还原 (Unminify)

20+ 个可读性变换:

变换示例
计算属性还原console["log"] → console.log
字符串合并"a" + "b" → "ab"
布尔值还原!0 → true, !1 → false
数字表达式折叠1 + 2 → 3
void 转 undefinedvoid 0 → undefined
原始字面量0x1 → 1
序列拆分a(), b(), c() → 独立语句
变量声明拆分var a=1, b=2 → var a=1; var b=2
块语句包裹单语句体包裹 { }
逻辑转 ifa && b() → if (a) b()
三元转 ifa ? b() : c() → if (a) b() else c()
合并 else-ifelse { if (...) } → else if (...)
for 转 whilefor(;;) → while(true)
尤达反转5 === x → x === 5
无穷大1/0 → Infinity
反转布尔逻辑!(a == b) → a != b
一元表达式移除无意义 void/!/typeof
移除双重否定!!true → true

ES Module 支持

goja 的解析器不支持 ES module 语法 (import/export)。jd 会预先提取 import/export 语句,解析剩余脚本,执行变换后,将语句重新添加到输出开头。动态 import() 表达式能正确区分于 import 声明。

正则安全格式化

对于 goja 无法完整解析的文件 (如 Monaco 编辑器语言定义中大量正则),jd 回退到源码级格式化:tokenizer 按分号拆分,同时保留正则字面量、字符串和注释原文。

安装

macOS (Homebrew)

brew install ejfkdev/tap/jd

预编译二进制

从 GitHub Releases 下载 (Linux/macOS/Windows, x86_64/ARM64)。

源码编译

go build -o jd .

用法

# 反混淆单个文件 (输出到 stdout)
jd obfuscated.js

# 写入到文件
jd obfuscated.js -o cleaned.js

# 从 stdin 读取
cat obfuscated.js | jd -

# 处理目录 — 递归处理所有 .js/.mjs/.cjs 文件,
# 将目录结构镜像到输出目录。
jd src/ -o dist/

# 目录模式默认输出: 在输入目录同级创建 <输入目录>-deobfuscated
jd src/

# 指定文件扩展名
jd src/ -o dist/ --ext .js,.mjs

# 并行处理 (N 个 worker,默认 CPU 核数)
jd src/ -o dist/ -j 8

# 跳过非代码文件 (只输出处理后的 JS)
jd src/ -o dist/ --copy-noncode=false

# 只反混淆,不做可读性还原
jd --unminify=false obfuscated.js

# JSON 输出 (含警告)
jd --json obfuscated.js

参数

参数默认值说明
-o, --outputstdout输出文件或目录 (目录默认: <输入目录>-deobfuscated)
--deobfuscatetrue运行 obfuscator.io 反混淆
--unminifytrue运行可读性还原变换
--sandboxauto解码器执行方式: auto (静态优先再沙箱), only (始终沙箱), off (仅静态)
--timeout10s单文件沙箱超时时间
--ext.js,.mjs,.cjs目录模式下处理的文件扩展名
-j, --workers0 (=CPU)目录模式并行 worker 数
--copy-noncodetrue复制非代码文件到输出目录
-v, --verbosefalse输出诊断信息到 stderr
--jsonfalse输出 {code, warnings} JSON

架构

jd/
├── main.go                     # CLI 入口
├── internal/
│   ├── cli/                    # cobra CLI (中英文 i18n)
│   ├── deobfuscator/           # 顶层 pipeline + ES module 预处理
│   ├── jsast/                  # AST 遍历器 (Cursor, Replace, Remove, Clone)
│   ├── codegen/                # AST → JavaScript 打印器 (pretty/compact)
│   ├── scope/                  # 作用域 & 绑定分析
│   ├── sandbox/                # goja VM 沙箱 (解码器执行)
│   ├── decoder/                # 静态解码: Base64/RC4/旋转模拟
│   ├── deobfuscate/            # 字符串数组/旋转器/解码器检测 + 变换
│   ├── unminify/               # 20 个可读性变换 + fixpoint runner
│   └── transform/              # Transform 抽象 + ApplyFixpoint
└── testdata/samples/           # 测试样本

流水线

解析 → 模块语句分离 → 反混淆 → 可读性还原 → 生成
  1. 解析 — goja 解析器,启用 IgnoreRegExpErrors;无法解析时回退到源码级格式化
  2. 反混淆 — 检测 obfuscator.io 字符串数组/旋转器/解码器,解码所有调用点 (静态优先,沙箱兜底),移除辅助函数
  3. 可读性还原 — fixpoint 循环 (≤20 轮) 合并可读性变换
  4. 生成 — pretty 模式 codegen,运算符优先级和正确括号

混合解码

解码器使用两阶段方案:

  1. 静态路径 (synchrony 方式): 通过 push/shift 模拟数组旋转,在纯 Go 中解码 SIMPLE/Base64/RC4 — 快速且确定性。
  2. 沙箱兜底 (webcrack 方式): 提取字符串数组、旋转器和解码器代码,在 goja VM 中执行,配有 Interrupt 超时、SetMaxCallStackSize、确定性随机/时间源,且无 setInterval/setTimeout — 处理静态路径无法解码的自定义编码器。

依赖

  • goja — 纯 Go JavaScript 解析器 & 运行时 (无 CGO)
  • cobra — CLI 框架

许可证

MIT

下载工具