这个工具能还原什么
许多 JavaScript 混淆器——包括本站自带的那一个——都是通过一小组机械化的静态变换来重写代码的:把每个字符串字面量搬进同一个数组,再把每处使用替换成对一个取值函数的调用;把普通字符转义成 \xNN 或 \uNNNN 序列;把简单的算术展开成等价但更长的表达式;把真正的代码包在一个恒真或恒假的 if 里;把 a.b 改写成 a['b']。这个工具正好还原这五件事:
- 字符串数组内联——找到形如
var _s = ["foo", "bar"]; function _g(i){ return _s[i]; }的结构,把每个索引是字面量数字的_g(0)调用替换成真实字符串,然后在数组和函数不再被其他地方引用时一并删除它们。 - 转义解码——把
\x48\x69显示成Hi,而不是保留转义形式。 - 常量折叠——把
1 + 2变成3、"a" + "b"变成"ab"等类似的字面量运算,凡是需要猜测的情形(比如除以字面量 0)一律跳过。 - 死分支删除——
if (true) { A } else { B }变成单纯的A;while (false) {}会被彻底移除。 - 方括号转点号——当
name是合法标识符时,obj['name']会变成obj.name。
这个工具做不到什么
这是基于 AST 的静态模式匹配,不是通用反混淆器。它不执行任何代码,因此无法解包基于 eval 的加载器,无法解出依赖运行时值的不透明谓词,也无法还原超出上述简单字面量 if/while/三元表达式之外的控制流平坦化。变量名会原样保留——_0x1a2b 依旧是 _0x1a2b。如果你的文件与“字符串数组+取值函数”这个结构不完全匹配,该阶段只会报告 0 次内联,而不会去猜测别的模式。
工作原理
代码先用 acorn 解析成 AST,再由手写的变换逐一遍历并改写——只有在某个值已经确定是字面量时才会动手——最后用 astring 重新生成源码。没有任何内容会上传到服务器:解析和改写全部在你的浏览器里完成。
使用方法
在编辑器里粘贴或输入 JavaScript 代码并运行。摘要会精确显示每个阶段各触发了多少次,方便你看清哪些变了、哪些没变。可以复制结果,也可以下载为 .js 文件。
Tiny Online Tools







