24
3

如何压缩(混淆)一个JavaScript文件

Author Jessica     Category JavaScript     Tags , ,

首先你得知道什么叫JS混淆..就是把代码整的人看不懂..

类似这样eval(function(p,a,c,k,e,r)….省略N行..

这样做基于两个好处

1.代码会被压缩..因为JS会在网上传输.所以体积越小越好.

2.混淆顾名思义就是使人难以理解.达到保护代码的作用.

我推荐一个在线的压缩网站.非常不错.我经常使用

http://javascriptcompressor.com/

但是使用过的人肯定会遇到这样的情况

混淆出来的代码不可以运行.但是不混淆就没事.

这是代码的问题?还是这份代码就不能被混淆吗??

答案当然是否定的..

那问题出在哪里呢??

很确定的说.

如果你的代码不能被压缩或者混淆.大部分的原因是由于JavaScript的代码不够规范!

我们来举一些例子

  1. function test () {  
  2.     alert('This is a test!!!');   

这段代码被混淆以后

  1. eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('1 0(){2(\'3 4 5 0!!!\')}',6,6,'test|function|alert|This|is|a'.split('|'),0,{})) 

这里附上一句.

有的人问你刚才不是说混淆后体积会缩小.为什么现在变大了好几倍?

是这样的..一般情况下..你的代码量越大..压缩比就越大..如果你代码量很小..这个压缩比就会成负的了..

可以看到.这个代码是无错的.是可以被执行的.

那么我改一下

  1. window.onload = function test () {  
  2.     alert('This is a test!!!');   
  3. }  
  4. alert('end');  //为什么加这句话.等下你就明白了. 

然后再去压缩一下

  1. eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('2.3=4 0(){1(\'5 6 7 0!!!\')}1(\'8\');',9,9,'test|alert|window|onload|function|This|is|a|fda'.split('|'),0,{})) 

结果令人失望..浏览器提示有错了..

这是为什么呢??

原来这样的代码是不规范的..下面我就把上面的代码规范的写一下

  1. window.onload = function test () {  
  2.     alert('This is a test!!!');   
  3. };   //注意这里的分号!!!  
  4. alert('ok'); 

如果你已经看到我的注释.你就会明白了.

当这次再压缩后,代码完美运行

  1. eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('2.3=4 0(){1(\'5 6 7 0!!!\')};1(\'8\');',9,9,'test|alert|window|onload|function|This|is|a|ok'.split('|'),0,{})) 

下面我们就能知道一些东西.

在规范的JavaScript代码中.如果你的function是基于一个事件的.就如上面的onload=function 这时候.JS会把这当成一句话.所以必须在后面加上一个分号.来表示本句结束..

知道了上面的结论后.我想大家已经可以完美的混淆自己的代码了..只要书写的时候注意这一点.我想你的JavaScript代码绝大部分情况下都会被完美的混淆的:)

3 Comments to “ 如何压缩(混淆)一个JavaScript文件 ”

  • 游客 2009年03月24日 于 13:21

    这个可以破解,最多可以做到变量名混淆。。。

  • la 2009年07月15日 于 01:47

    有没有 unpacker 呢?

  • la 2009年07月15日 于 01:50

    我找着了。谢谢

Post comment

分类目录

最近文章

近期评论

文章归档

标签

.net AJAX button Comet CSS Discuz! DIV+CSS Flash Form Google HTML编辑器 IE8 Java JavaScript jQuery JSP md5 MySQLReback OAuth Oracle PHP php-fpm PNG Punny SkiyoTabs tab TagCloud Vista Web2.0 Windows7 上传 加密 图标 本站原创 模板 模板引擎 源码 登录 短网址 石家庄 算法 编译 面向对象 魔术方法

链接表