关于JS加密解密,eval方式的js加密可以这样解密。

关于JS加密解密,eval方式的js加密可以这样解密。

js加密是很多做前端开发的小伙伴们关心的,因为要防止自己的代码被别人盗用或理解其中的逻辑,所以在发布js代码前,要对js代码加密。

js加密


js加密方法当中,eval方法是常见的一种。

类似于下面这样的js加密代码,肯定你在研究前端JavaScript脚本时遇到过:

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}
('0("1 2");',3,3,
'alert|Hello|World'.split('|'),0,{}))

很多朋友以为这段js代码是“加密”的,其实这谈不上是加密,只能算是一种编码(Encode)或者也可以称为是一种打包(packer),类似于base64这样的编码,都是可以以一定方式还原的,当然也就是js解密了。

我们仔细分析这一段js加密代码,不难发现代码开头都是eval,特征字符串是function(p,a,c,k,e,r)或者是function(p,a,c,k,e,d),其实这样的pack方式是dean edwards提出的,这是一名js加密高手,你可以访问其个人主页以获取这方面的最新信息。后来还有一些编码打包方式也是eval开头,但是特征字符串p,a,c,k,e,r(d)改变了,我们姑且称为是这种打包方式的一个变种吧,一种变像的js加密方法,其实解密很简单,我们回顾一下JavaScript脚本中eval含义及用法。

检查 JavaScript 代码并执行。
eval(codeString)
必选项 codestring 参数是包含有效 JavaScript 代码的字符串值。这个字符串将由 JavaScript 分析器进行分析和执行。

其实这种代码的js密解就是调用JavaScript分析解释器处理有效的js脚本字符串,注意我这里提到的是字符串,有点类似于ASP的Execute方法。好,既然eval执行的字符串,那么function(p,a,c,k,e,r)函数肯定返回的是字符串,究竟是什么内容呢?你猜对了,就是我们要解密的js源代码,其实function(p,a,c,k,e,r)相当于是个自解码函数,返回的就是解密好的js源代码,然后传递给eval,那么这段解码后的字符串脚本就执行了。

到这里,突破点就有了,那就是function(p,a,c,k,e,r)这样的js自解密函数,我们要获取其返回的字符串,怎么办?很简单,替换eval函数就可以了,比如替换成alert或者document.write,那么明文是不是显示出来了?刚开始讲到的代码可以变成这样:

alert(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}
('0("1 2");',3,3,
'alert|Hello|World'.split('|'),0,{}))

很好,原文已经显示出来了,可见这样的js加密强度并不高,只有稍有常识的js前端程序员,都可以解密这种js加密代码。

最后,这里推荐大家使用真正的专业js加密平台:JShaman,这可能是国内目前唯一专业做JS代码加密的在线平台,使用也非常简单方便,只要提交js代码,出来的就是JS加密代码。

js加密


当然,Jshaman加密的结果并不是简单的eval,而是很专业的加密结果。做js开发的朋友们,可以收藏这个网站,相信很多时候都用的着。