如何解析被压缩过的Js文件?eval(function(p,a,c,k,e,d){.....,{}))

狮子 2007-09-13 05:33:53
随着ajax的流行,大家一下子明白过来,原来js能够完成这么强大的功能,然后就是JS代码原来越复杂,js文件体积越来越大,同样也增加了安全隐患。

现在网上比较普遍的流行一些代码混淆和代码压缩工具:

JSConfusion<http://editor.lionsky.net/JSConfusionWebDemo/default.aspx> 代码混淆工具,本人做的Big Smile

Javascript compressor<http://javascriptcompressor.com/> 代码压缩工具,提供了一种特有的压缩算法对JS的代码进行减肥,也是我看到较早的一个工具,现在经常和JSConfusion结合去使用(当然是先混淆后压缩)

JSObfuscator<http://www.moralsoft.cn/WebFrame/CwmPage/CwmPage.htm?fc=JSObfuscator> 集混淆/压缩一体的工具,虽然功能比较多,但在压缩的时候效果不是很好,经过我测试会有时压缩过的代码不能运行

这些是见过的比较好的几个工具,如果你还见过哪些不错功能类似的工具,可以在后面补充~~~~

大家应该都知道这样一个理论:加密可以反加密,而混淆却无法反混淆.

混淆也可以叫颠倒是非、混淆黑白,无非就是去掉缩进、空格、空行和注释,改表代码中的非保留字为简单的字母、符号、乱码什么的,这样做只是为了加大代码的阅读难度,提高阅读成本,所以反混淆只有根据你对JS的了解程度去进行变量/方法/属性/类的替换。当然代码少你到是可以这样做,如果代码很多(可以看这个混淆后的项目<http://editor.lionsky.net/>),你就会知道什么叫 "生气、愤怒、疯狂、哭笑不得<http://idoall.org/blogs/ian/archive/2007/09/12/21791.aspx>"

上面为基础知识,下面进行正题:

alert("Welcome idoall.org");

被压缩过以后是下面的样子:

eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--)d[ c]=k[ c]||c;k=[function(e){return d[ 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}('3("2 1.0");',4,4,'org|idoall|Welcome|alert'.split('|'),0,{}))

那么我们如何从压缩过的代码中提取出原文?

不管她会压缩混淆成什么样子,最终都是要被浏览器认可,解析,执行的。我们可以跟踪代码的运行,会发现最关键的位置在这里.....p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),kCoffee);return p
这里的变量 p 就是用来保存最终后的代码,我们可以在返回 p 的前面将值输出,就会得到alert("Welcome idoall.org");

本文的目的是回答一位网友的问题<http://www.cnblogs.com/dxxhh/archive/2007/09/11/889874.html>,顺便提供相关的思路,有助于大家的思考
...全文
1223 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liguan1987 2011-05-09
  • 打赏
  • 举报
回复
学习中!!
qinchua08 2011-02-25
  • 打赏
  • 举报
回复
与open source背道而驰
No_Data_Found 2008-06-17
  • 打赏
  • 举报
回复
学习
btbtd 2007-09-13
  • 打赏
  • 举报
回复
唉...俺的宗旨是, 让一切变得简单...这个不合俺胃口...
btbtd 2007-09-13
  • 打赏
  • 举报
回复
跳过...貌似即将有一场口水战...
ChaoticLife 2007-09-13
  • 打赏
  • 举报
回复
学习
hongqi162 2007-09-13
  • 打赏
  • 举报
回复
jf
hongqi162 2007-09-13
  • 打赏
  • 举报
回复
mark

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧