工具
decode-js JavaScript 反混淆 AST 工具
基于 Babel AST 的处理工具,可把混淆过的 JavaScript 还原为可读源码,每次运行选择一个目标:javascript-obfuscator(obfuscator.io)、JS-Confuser 2.x(直至 high 预设)、sojson 及其面向 jsjiami.com.v7 的 v7 变体、sojson 风格的 jjencode,以及处理不可达代码、嵌套代码块和常量表达式的通用目标。另一个按版本区分的 obfuscator.io 目标会报告检测到的编码器版本区间;遇到无法读取的字符串数组层时,它不输出结果并说明原因,而不是给出解了一半的程序。JS-Confuser 文档逐项列出可还原的变换,以及变量重命名等会丢失信息、无法恢复的变换。
使用条件与局限
- 仓库未发布 Release 或标签;所审阅的 main 分支提交日期为 2026-10-17,需从源码运行。package.json 要求 Node.js 26.x,以配合原生依赖 isolated-vm 7;README 提醒先查看 isolated-vm 的构建要求。执行 npm i 后,可通过 npm run decode -- -t <目标> 运行命令行工具,并可指定输入和输出路径,也可使用 deob、deobx、dejsc、deso、desov7 等快捷命令。
- 输入为单个混淆脚本,默认是 input.js;README 说明该文件中不能夹杂其他未混淆的代码。适用范围取决于混淆器及其版本:按版本区分的目标覆盖 javascript-obfuscator 2.x 各阶段和 5.5.0,3.0.0–4.2.2 尚未验证,落在该区间的样本会报告为未知;JS-Confuser 目标无法还原 RenameVariables、RenameLabels 和 ObjectExtraction。
- 解码时会执行输入中的部分代码:字符串数组解码函数和 JS-Confuser 运行时辅助函数在 isolated-vm 沙箱中运行,但 obfuscator、sojson 和 sojsonv7 目标会在解码器自身进程中用 Node.js 的 eval 解开最外层的 eval 包装。应把输入视为不受信任的代码,还原出的字符串和控制流也需对照原始脚本核实。
- CI 在 Node.js 26 上运行 Vitest 测试套件;测试样例针对 JS-Confuser、obfuscator.io 和 sojson v7 目标,把混淆样本(大多由仓库内附的源文件生成)与预期解码结果配对,检验的是解码器在项目样例上的表现,而非任意真实脚本。README、LICENSE 和 package.json 均声明 GPL-3.0-or-later。本次未对任何脚本进行反混淆,也未运行测试。
关于此条目
- 类型
- 工具
- 类别
- 网站分析工具
- 关联
- 基础工具
- 目标
- 网站
来源复核于
说明已依据一手来源复核;这不代表已运行验证、经过安全审计或确认兼容。
一手来源
- README.md GitHub · echo094/decode-js · 修订 ca4690a
- package.json GitHub · echo094/decode-js · 修订 ca4690a
- docs/jsconfuser.md GitHub · echo094/decode-js · 修订 ca4690a
- src/main.js GitHub · echo094/decode-js · 修订 ca4690a
- src/plugin/eval.js GitHub · echo094/decode-js · 修订 ca4690a
- src/plugin/obfuscator.js GitHub · echo094/decode-js · 修订 ca4690a
- src/visitor/obfuscator/string-array.js GitHub · echo094/decode-js · 修订 ca4690a
- test GitHub · echo094/decode-js · 修订 ca4690a
- .github/workflows/test.yml GitHub · echo094/decode-js · 修订 ca4690a
- LICENSE GitHub · echo094/decode-js · 修订 ca4690a