Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

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

工具目录

分类

查看所有分类
Loading categories
jsdeob-workbench — 以可视化方式逆向混淆的JavaScript。链式转换,检查AST变化,编写可重用的反混淆插件。 | Kitploit
工具/GitHubGitHub/owl4444/jsdeob-workbench
静态分析代码分析逆向工程脚本与自动化调试器恶意软件分析二进制分析学习与教育
GitHubowl4444/jsdeob-workbench

jsdeob-workbench

以可视化方式逆向混淆的JavaScript。链式转换,检查AST变化,编写可重用的反混淆插件。

查看仓库
1181027个月前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

jsdeob-workbench

一个用于反混淆JavaScript的可视化工作台。构建转换链,逐步执行,编写自己的插件。

img

img

YouTube演示

  • https://www.youtube.com/watch?v=7zuqKoJT2BM
  • https://www.youtube.com/watch?v=bOVnPIfjoco

这是什么?

此应用程序展示了JavaScript程序的抽象语法树(AST)。这个想法源于分析一个与obfuscatio.io相关的恶意软件样本,最终让我学习了更多关于使用BabelJS进行反混淆的知识。如果您曾尝试逆向工程混淆后的JS(例如:webpack捆绑包、obfuscator.io输出、打包的恶意软件样本),您知道这很痛苦。这个工具让您可以:

  • 基于BabelJS编写转换脚本
  • 从ASTViewer快速引用AST
  • 可视化地将多个转换链接在一起,并查看摘要以了解更改
  • 与协作者共享插件(手动)并导出配置
  • 编写可能再次使用的模式,作为插件重复利用
  • 在分析其他JS样本时保存项目

快速开始

root@kitploit:~
npm install
npm start
# 打开 http://localhost:3000

就是这样。

界面

左侧边栏 – 所有可用的转换(内置插件 + 您的配方插件),包括配方链(想想Cyberchef)

中间 – 输入/输出编辑器。将混淆代码粘贴到左侧,在右侧查看转换后的代码。

右侧面板 – AST查看器、作用域分析器、易于查看的摘要。

img

作用域分析

BabelJS允许我们查看作用域和绑定。这对于查看是否存在未使用的变量尤其有用。此视图还允许我们查找变量被引用的位置。

img

编写转换

点击+按钮或按Ctrl+N打开脚本编辑器。转换只是具有以下访问权限的JS代码:

root@kitploit:~
// Available globals:
ast        // The parsed Babel AST
traverse   // Walk the tree: traverse({ Identifier(path) { ... } })
t          // Babel types: t.isStringLiteral(node), t.identifier('x')
config     // User config from the recipe card
stats      // Track your changes: stats.replaced = 5
parser     // Parse code: parser.parse('var x = 1')
generate   // Generate code: generate(node).code
run        // Eval helper: run('1+1') => 2 (DANGER. THIS IS MEANT TO BE RUN ON YOUR OWN MACHINE IN A SANDBOX)

示例 – 删除所有"debug"字符串(StringLiteral):

root@kitploit:~
// The following two will appear as parameter in recipe chain as seen in the next screenshot
const targetValue = config.targetValue || 'debug';
const removeMatches = config.removeMatches !== false;

traverse({
  StringLiteral(path) {
    if (path.node.value === targetValue) {
      if (removeMatches) {
        path.remove();
        stats.removed = (stats.removed || 0) + 1;
      }
    }
  }
});

您可以选择:

  • 直接通过(CTRL + ENTER)运行此脚本进行快速测试
  • 将编写的脚本添加到配方链中,而不保存为插件(如截图中所示)。之后可以保存
  • 一旦确定它有效并且想要与他人共享此插件,将其保存为插件

下面的截图显示了:

  1. 脚本编辑器(点击左上角的新建按钮,或使用Ctrl+E快捷键)
  2. 编写完BabelJS脚本后,将其添加到配方链中
  3. 在配方中,通过检测到的参数,我们可以修改插件的行为
  4. 输出编辑器显示成功转换

img

内置转换

请注意,这些转换可能因混淆技术而失败,可能需要自定义脚本。您也可以修改它们并另存为新自定义脚本。

插件

将自己的 .js 文件放入 plugins/<category>/ 子文件夹中。它们会按文件夹分组显示在侧边栏中。

img

例如:

  • 名称:从文件名派生(Bracket-to-dot-notation.js → "Decode Strings")
  • 类别:子文件夹名称(plugins/Utilities/ → 类别 "nyx")
root@kitploit:~
/**
 * Bracket to Dot Notation
 * Changes things like  console["log"] to console.log
 * 
 * Category: utilities
 */

// Script Editor - Ctrl+Enter to run, Ctrl+E to close
// Use traverse(visitor) to modify the AST
// Access 't' for Babel types

traverse({
  MemberExpression(path) {
    if(path.node.computed === true){
      // this is the bracket notation
      
      prop = path.node.property
      if(t.isStringLiteral(prop)  &&
          /^[a-zA-Z_][a-zA-Z_0-9]*$/.test(prop.value)
       ){

        path.node.computed = false; // step 1

      // step 2 change literal to identifier
        path.node.property = t.identifier(prop.value)
      

      }
    }
  }

});

有两种添加参数的方法:

  1. (优先级高且强烈推荐)按以下格式在代码中编写,脚本编辑器会尝试创建两个参数(targetValue 和 removeMatches)
root@kitploit:~
const targetValue = config.targetValue || 'debug';
const removeMatches = config.removeMatches !== false;
  1. 如果由于边界情况而遗漏了某些参数,保存为插件时允许添加可能遗漏的额外参数。

img

主要摘要

包括:

  • 每个插件运行所花时间
  • 代码大小变化统计
  • 可视化变化的图表

img

键盘快捷键

键动作
Ctrl+E切换脚本编辑器
Ctrl+Shift+E切换eval面板(危险)
Ctrl+S保存项目

构建独立可执行文件

请注意,如果存在大量嵌套节点,独立版本可能会出现一些问题。解决方法有时可能无效。

要使用npm构建,可以使用以下命令

root@kitploit:~
npm run build        # 仅限Windows

输出到 dist/ 目录。如果您想要自定义转换,请将 plugins/ 文件夹复制到exe旁边。

堆栈大小问题

深度嵌套的代码(如JSFuck)可能导致堆栈溢出。构建脚本会尝试在Windows上自动增加堆栈大小。如果遇到堆栈溢出,请尝试通过 npm start 从源代码运行(使用 --stack-size=65536)。

我还没有弄清楚如何在构建为独立可执行文件时增加堆栈大小。如果您知道方法,请告诉我!

致谢

使用以下工具构建:

  • Babel – AST解析和转换
  • Monaco Editor – 代码编辑器
  • Express – 后端服务器

img

有疑问?有问题?请提交GitHub issue.

下载工具
名称功能
Beautify美观地格式化代码
Constant Folding1 + 2 → 3,"a" + "b" → "ab"
Decode Strings解码 \x48\x65\x6c\x6c\x6f → "Hello"
Inline Array Values内联简单的数组元素访问
Inline String Array内联混淆器使用的字符串数组
Opaque Predicate Removal移除始终为真/假的条件
Remove Comments删除代码中的所有注释
Remove IIFE解包 (function(){...})() 包装器
Remove Unused Code删除死变量和函数
Simplify Literals!0 → true,void 0 → undefined