如何压缩(混淆)一个JavaScript文件
首先你得知道什么叫JS混淆..就是把代码整的人看不懂..
类似这样eval(function(p,a,c,k,e,r)….省略N行..
这样做基于两个好处
1.代码会被压缩..因为JS会在网上传输.所以体积越小越好.
2.混淆顾名思义就是使人难以理解.达到保护代码的作用.
我推荐一个在线的压缩网站.非常不错.我经常使用
http://javascriptcompressor.com/
但是使用过的人肯定会遇到这样的情况
混淆出来的代码不可以运行.但是不混淆就没事.
这是代码的问题?还是这份代码就不能被混淆吗??
答案当然是否定的..
那问题出在哪里呢??
很确定的说.
如果你的代码不能被压缩或者混淆.大部分的原因是由于JavaScript的代码不够规范!
我们来举一些例子
- function test () {
- alert('This is a test!!!');
- }
这段代码被混淆以后
- 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,{}))
这里附上一句.
有的人问你刚才不是说混淆后体积会缩小.为什么现在变大了好几倍?
是这样的..一般情况下..你的代码量越大..压缩比就越大..如果你代码量很小..这个压缩比就会成负的了..
可以看到.这个代码是无错的.是可以被执行的.
那么我改一下
- window.onload = function test () {
- alert('This is a test!!!');
- }
- alert('end'); //为什么加这句话.等下你就明白了.
然后再去压缩一下
- 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,{}))
结果令人失望..浏览器提示有错了..
这是为什么呢??
原来这样的代码是不规范的..下面我就把上面的代码规范的写一下
- window.onload = function test () {
- alert('This is a test!!!');
- }; //注意这里的分号!!!
- alert('ok');
如果你已经看到我的注释.你就会明白了.
当这次再压缩后,代码完美运行
- 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文件 ”
Post comment
分类目录
- ActionScript (2)
- CSS (25)
- Java (3)
- JavaScript (41)
- PHP (108)
- 心情杂谈 (34)
- 收集整理 (77)
- 本站原创 (58)
最近文章
- [演讲稿]OAuth1.0协议
- 在sae中利用SaeFetchurl进行豆瓣的OAuth授权
- OAuth 1.0a与1.0协议的改进…
- 深入理解OAuth与豆瓣OAuth test
- include_path+__autoload与数组+__autoload的比较
- 将google ssl设置为IE8的默认搜索引擎..
- 我们来做一个会呼吸的菜单吧!!
- 在编译php-fpm0.6的时候需要注意的一些问题
- 使用PHP将大文件导入到数据库中..
- 关于用PHP调用WebService中参数为complexType的问题
- 神奇的两次按位非运算符
- 百路推免费短网址服务..首创”收藏夹获取短网址”..
- 哥学社正式上线..
- jQuery中getJSON跨域原理详解
- Web辅助工具条(原名:河蟹工具条CrabBar)0.1发布
近期评论
- Gonten 在 在sae中利用SaeFetchurl进行豆瓣的OAuth授权 上的评论
- Amaranth 在 [演讲稿]OAuth1.0协议 上的评论
- 胖子 在 [演讲稿]OAuth1.0协议 上的评论
- 老飞的小窝 在 jQuery中getJSON跨域原理详解 上的评论
- Jackie.Hamos 在 将google ssl设置为IE8的默认搜索引擎.. 上的评论
- Elmer Zhang 在 在sae中利用SaeFetchurl进行豆瓣的OAuth授权 上的评论
- 茶叶蛋 在 一个PHP+AJAX留言板的完整例子.非常简单! 上的评论
- 9527 在 我们为什么要抛弃模板引擎?? 上的评论
- hikurasai 在 Flash TagCloud中文版. 上的评论
- lx 在 PHP上传进度条深度解析 上的评论
文章归档
- 2010 年九月 (1)
- 2010 年八月 (4)
- 2010 年七月 (3)
- 2010 年六月 (4)
- 2010 年五月 (2)
- 2010 年四月 (9)
- 2010 年三月 (12)
- 2010 年二月 (1)
- 2010 年一月 (3)
- 2009 年十二月 (2)
- 2009 年十一月 (3)
- 2009 年十月 (3)
- 2009 年九月 (5)
- 2009 年八月 (4)
- 2009 年七月 (6)
- 2009 年六月 (8)
- 2009 年五月 (8)
- 2009 年四月 (16)
- 2009 年三月 (19)
- 2009 年二月 (22)
- 2009 年一月 (20)
- 2008 年十二月 (38)
- 2008 年十一月 (22)
- 2008 年十月 (7)
- 2008 年九月 (3)
- 2008 年八月 (24)
标签
.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
上传
加密
图标
本站原创
模板
模板引擎
源码
登录
短网址
石家庄
算法
类
编译
面向对象
魔术方法

Jessica

这个可以破解,最多可以做到变量名混淆。。。
有没有 unpacker 呢?
我找着了。谢谢