JavaScript解压缩/反混淆工具

437

是否有任何命令行脚本和/或在线工具可以像Tidy清理可怕的HTML一样逆转缩小化效果?

(我特别想要反缩小化一个缩小过的JavaScript文件,所以变量重命名可能仍然是一个问题。)


4
可能有些人不知道,缩小代码(minification)会将内部变量名替换为单个字母并删除代码注释。撤销这些更改无法自动完成。 - Vivian River
@DanielAllenLangdon 很好的观点。我已经编辑了问题,所以它不再暗示缩小不会改变变量名。 - Andy Ford
12
JS NICE是一个网址,链接为http://www.jsnice.org/。FWIW表示“供参考”或“仅供参考”。 - Andy Ford
http://marcusjenkins.com/linux/de-minify-javascript-on-the-command-line/ 对我很有帮助。 - ychaouche
1
对于 @DanielAllenLangdon:jsnice.org 可以反混淆甚至30k的 AngularJS 代码。 - Green
17个回答

510
您可以使用这个工具:http://jsbeautifier.org/。但它取决于您使用的缩小方法,该工具只会使代码格式化,不会更改变量名称,也不会解压缩base62编码。
编辑:实际上,该工具可以拆包Dean Edward的packer打包的脚本:http://dean.edwards.name/packer/

你是不是想说Base64编码?我从来没听说过Base62编码... - rmeador
5
好的,我会尽力进行翻译。以下是需要翻译的内容:Nope, I said base 62: http://dean.edwards.name/packer/ 和 http://en.wikipedia.org/wiki/Base_62 - Fabien Ménager
4
有没有一种工具可以“更改变量名”,但仍然能够识别JavaScript语法,以避免破坏代码? - Jorge Vargas
太棒了!我刚刚解决了我的问题,然后向框架的作者发送了精确的修复方案邮件。 - Marcus Downing

161

Chrome 开发者工具自带此功能。打开开发者工具(按F12是一种方式),在“Sources”标签中,左下角有一组图标。其中“{}”图标即为“美化打印”,可以实现即时的代码格式转换。

更新:IE9 的“F12 开发者工具”也有“格式化 JavaScript”功能,在“Script”标签页下的“Tools”图标中找到。(参见第4条提示:F12 The best kept web debugging secret

enter image description here


1
对于我尝试反混淆的特定 .js 文件,这种方法效果最好,干杯。 - igneosaur
1
现在这个在“Sources”选项卡中,而不是“Scripts”选项卡中。 - mhenry1384
是的!(我们的应用程序没有我所知道的JS调试/开发模式 - 我们很幸运地没有缩短/转换变量名称。) - Steven Lu
天啊,太棒了。 - Michael Haren
2
提醒一下:Chrome有时会搞乱JavaScript代码。例如,if (a) /regex/.match(foo); 会被漂亮地打印成 if (a)\n / /regex/ .\nmatch(foo); 这是一个语法错误。 - amphetamachine
显示剩余2条评论

58

明白了! JSBeautifier正好可以做到这一点,你甚至还可以选择自动格式化的选项。


5
使用“stackoverflow-then-google”代替“google-then-stackoverflow”? :)))) (注:该提问者询问的是在编程过程中,是否应该先查找 Stack Overflow 上的解答,而不是直接去谷歌搜索。) - dfa
我在谷歌上搜索了“在线JavaScript格式化程序”。 - cgp
1
这个 FireFox 插件使用 JSBeautifier 来取消压缩 JavaScript,以便您可以在 FireBug 的 js 调试器中设置断点!!链接:https://addons.mozilla.org/zh-CN/firefox/addon/javascript-deminifier/ - B T

16

把以下编程相关内容从英文翻译成中文。只返回翻译后的文字:回答正确再加1分。Fabien恰好先回复了。 - Andy Ford
这只回答了问题中的“解压缩”部分。 - Jorge Vargas
不好意思,这个不行。它会破坏代码... :( - Ramesh

14
在 Firefox、SpiderMonkey 和 Rhino 中,您可以将任何代码包装到匿名函数中并调用其toSource方法,这将为您提供一个格式良好的函数源代码。 toSource 还会删除注释。
例如:
(function () { /* Say hello. */ var x = 'Hello!'; print(x); }).toSource()

将被转换为字符串:

function () {
    var x = "Hello!";
    print(x);
}

P. S.: 这不是一个"在线工具",但所有关于一般美化技术的问题都被关闭为此问题的重复。


有趣。我2.5年前提出了这个问题,所以我觉得现在修改标题已经太晚了,但我仍然喜欢看到在线和离线选项。感谢你的回应。+1 - Andy Ford
似乎在Firefox上不再起作用了。 - Anand Bhushan

10

如果你有Mac并且使用TextMate - 一种简单的JavaScript格式化替代方法如下:

  1. 用TextMate打开文件。
  2. 点击 > Bundles > JavaScript > Reformat Document
  3. 打开啤酒。

2
啤酒正在现在被提供 :) - dgilperez

7

大多数集成开发环境也提供自动格式化功能。例如,在NetBeans中,只需按下CTRL+K。


5
作为替代方案(因为我直到现在才知道jsbeautifier.org),我使用了一个书签小工具,重新启用了Dean Edward的Packer中的解码按钮。
我在这里找到了说明和书签小工具。
这是书签小工具(以防网站无法访问)。
javascript:for%20(i=0;i<document.forms.length;++i)%20{for(j=0;j<document.forms[i].elements.length;++j){document.forms[i].elements[j].removeAttribute(%22readonly%22);document.forms[i].elements[j].removeAttribute(%22disabled%22);}}

5

5
Stone的回答类似,但适用于Windows/.NET开发人员:
如果您有Visual Studio和ReSharper - 格式化Javascript的简单替代方法是:
  • 使用Visual Studio打开文件;
  • 单击ReSharper > 工具 > 清理代码(Ctrl+E, C);
  • 选择“默认:重新格式化代码”,然后单击确定;
  • 喝上一杯啤酒。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接