压缩后的JS代码怎样解压缩?

JavaScript032

压缩后的JS代码怎样解压缩?,第1张

一般压缩都经过混淆,如果你看到变量名都是A,B,C,D之类的无规则的命名,那就是被混淆过的,一般来说也很难阅读,就算你 还原了格式。

如果是没有混淆的,你可以试试用js的格式化工具来重新格式化一下的,比如:

/* 美化:格式化代码,使之容易阅读 */

/* 净化:去掉代码中多余的注释、换行、空格等 */

/* 压缩:将代码压缩为更小体积,便于传输 */

/* 解压:将压缩后的代码转换为人可以阅读的格式 */

/* 混淆:将代码的中变量名简短化以减小体积,但可读性差,经混淆后的代码无法还原 */

/* 如果有用,请别忘了推荐给你的朋友: */

/* javascript在线美化、净化、压缩、解压:http://tool.lu/js */

/* 以下是演示代码 */

var Inote = {}

Inote.JSTool = function(options) {

this.options = options || {}

}

Inote.JSTool.prototype = {

_name: 'Javascript工具',

_history: {

'v1.0': ['2011-01-18', 'javascript工具上线'],

'v1.1': ['2012-03-23', '增加混淆功能'],

'v1.2': ['2012-07-21', '升级美化功能引擎'],

'v1.3': ['2014-03-01', '升级解密功能,支持eval,window.eval,window["eval"]等的解密'],

'v1.4': ['2014-08-05', '升级混淆功能引擎'],

'v1.5': ['2014-08-09', '升级js压缩引擎'],

'v1.6': ['2015-04-11', '升级js混淆引擎']

},

options: {},

getName: function() {return this._name},

getHistory: function() {

return this._history}

}

var jstool = new Inote.JSTool()

1、首先新建一个html文件,命名为test.html。

2、在test.html文件内,使用img标签创建一张图片显示,并设置其id属性为pic。

3、在test.html文件内,使用button标签创建一个按钮,按钮名称为“改变图片样式”。

4、在test.html文件内,给button绑定onclick点击事件,当按钮被点击时,执行cha()函数。

5、在test.html文件内,在js标签内,创建cha()函数,在函数内,使用getElementById()方法获得img元素对象,再使用setAttribute()方法设置img对象的class属性为imagecss。

6、在test.html文件内,使用css定义imagecss的样式,设置为红色5px边框,宽度为300px,就可以了。

js的不可读化处理分为三个方面:压缩(compression)、混淆(obfuscation) 和加密(encryption)。

1. 压缩

这一操作的目的,是让最终代码传输量 (不代表代码量, 也不代表文件体积)尽可能小。压缩js的工具,常见的有:YUI Compressor、UglifyJS、Google Closure Compiler 等。

通常在代码压缩的过程中,只改变代码的语法,代码的语义和控制流不会有太大改变。

常见做法是把局部变量缩短化,把一些运算进行等价替换等。代码压缩对于代码保护有一些帮助,但由于语义和控制流基本没变,起不了太大作用。

在压缩层面上,代码不可读只是一种附带伤害,不是最终目的。

2. 混淆

这一操作的目的,是让代码尽可能地不可读,主要用作代码保护。

让代码不可读,增加分析的难度,这是唯一目的。混淆过后文件体积变大一倍也没关系,代码量变多也没关系,运算慢50% 也没关系。

常见的做法有:分离常量、打乱控制流、增加无义代码、检查运行环境如果不对就罢工,等等。

在混淆层面上,代码不可读是最终目的。

值得一提的是,Google Closure Compiler 的 Advance Level Compression 会压缩类和对象的成员,其压缩结果很难分析,也可以认为是一种混淆,但兼容性不太好。

3. 加密

有加密就有解密,意味着加密操作可逆,密文可以明文化。

在Web界,可以称之为加密的东西包括:HTTPS传输、JavaScript实现对称加密或者不对称加密等等。