Tiny Online Tools logoTiny Online Toolssearch搜索工具…grid_view全部工具
首页chevron_right逆向工程工具chevron_rightJavaScript 反混淆助手JavaScript 反混淆助手

JavaScript 反混淆助手

还原常见的静态 JavaScript 混淆手法:字符串数组内联、转义解码、常量折叠、死分支删除,以及把方括号访问改写成点号访问。

info这只能还原常见的静态混淆手法:字符串数组、转义字面量、字面量算术、恒真/恒假分支和方括号访问。它不执行任何代码,因此无法解包基于 eval 的加载器、无法解出依赖运行时的条件,也无法还原超出简单字面量测试之外的控制流平坦化。变量名会保持不变。混淆的 JavaScript

相似工具

JavaScript 混淆器

JavaScript 混淆器

重命名局部变量、隐藏字符串字面量并扁平化 JavaScript 的控制流——全部在浏览器本地完成,不上传任何内容。

JavaScript 死代码分析器

JavaScript 死代码分析器

粘贴一个 JS 打包文件,找出文件中没有任何静态引用的顶层函数——这是一种可达性启发式分析,而非确定结论。

JavaScript 格式化工具

JavaScript 格式化工具

格式化 JavaScript 代码以提高可读性。

PDF JavaScript 检查器

PDF JavaScript 检查器

找出 PDF 内部的每一段脚本——文档动作、页面与注释事件、表单计算——并在不执行的前提下阅读它们。

PDF 页面尺寸分析器

PDF 页面尺寸分析器

在浏览器中找出 PDF 里混杂的 Letter、A4、A3 与自定义页面尺寸、异常旋转以及被裁切的页面。

YAML 格式化工具

YAML 格式化工具

使用可配置缩进和键排序来格式化并美化 YAML。

PDF 图层检查器

PDF 图层检查器

查看并切换技术类 PDF 的可选内容图层,找出永不打印的图层,并按当前可见状态导出一份压平副本。

apps

更多工具

浏览我们完整的免费在线工具集合。

这个工具能还原什么

许多 JavaScript 混淆器——包括本站自带的那一个——都是通过一小组机械化的静态变换来重写代码的:把每个字符串字面量搬进同一个数组,再把每处使用替换成对一个取值函数的调用;把普通字符转义成 \xNN\uNNNN 序列;把简单的算术展开成等价但更长的表达式;把真正的代码包在一个恒真或恒假的 if 里;把 a.b 改写成 a['b']。这个工具正好还原这五件事:

  1. 字符串数组内联——找到形如 var _s = ["foo", "bar"]; function _g(i){ return _s[i]; } 的结构,把每个索引是字面量数字的 _g(0) 调用替换成真实字符串,然后在数组和函数不再被其他地方引用时一并删除它们。
  2. 转义解码——把 \x48\x69 显示成 Hi,而不是保留转义形式。
  3. 常量折叠——把 1 + 2 变成 3"a" + "b" 变成 "ab" 等类似的字面量运算,凡是需要猜测的情形(比如除以字面量 0)一律跳过。
  4. 死分支删除——if (true) { A } else { B } 变成单纯的 Awhile (false) {} 会被彻底移除。
  5. 方括号转点号——当 name 是合法标识符时,obj['name'] 会变成 obj.name

这个工具做不到什么

这是基于 AST 的静态模式匹配,不是通用反混淆器。它不执行任何代码,因此无法解包基于 eval 的加载器,无法解出依赖运行时值的不透明谓词,也无法还原超出上述简单字面量 if/while/三元表达式之外的控制流平坦化。变量名会原样保留——_0x1a2b 依旧是 _0x1a2b。如果你的文件与“字符串数组+取值函数”这个结构不完全匹配,该阶段只会报告 0 次内联,而不会去猜测别的模式。

工作原理

代码先用 acorn 解析成 AST,再由手写的变换逐一遍历并改写——只有在某个值已经确定是字面量时才会动手——最后用 astring 重新生成源码。没有任何内容会上传到服务器:解析和改写全部在你的浏览器里完成。

使用方法

在编辑器里粘贴或输入 JavaScript 代码并运行。摘要会精确显示每个阶段各触发了多少次,方便你看清哪些变了、哪些没变。可以复制结果,也可以下载为 .js 文件。