Dream Maker 老漂 不要有和人斗的心,你要赢的是你自己!

如何解密eval(function(p,a,c,k,e,r)……)

下面是一段加密后的代码,很晕吧,但事实上只是使用了障眼法,把换行取消掉了而已,让我们排版一下再来看看到底是什么?

eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(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 t;1 y=R;1 i=l;1 f=x;1 8=2.K;1 6=\'\';5 C(a){i=l;f=x;8=2.13;y=Z;6=a;v();u()}5 u(){k(t!=q){t.L.J=6;t.r()}}5 j(){k(t==q){3.4("7").B="7";3.4("7").9.1a="18";t=12 10.X(\'h\',{8:8,T:i,S:f,Q:i,P:f,O:\'7\',6:6});k(!3.N.M){o();t.r()}}}5 v(){p.n(I,\'H\',j);p.n(3.4("h"),\'G\',j)}5 o(){1 a=3.4("7");1 b=3.4("F");1 c=0;1 d=0;1 e=b.m;E(e.D!="V"){c=c+e.W;d=d+e.A;e=e.m}c=c+Y/2+3.4("h").19/2;d=d+3.4("h").z-17(a.9.z);a.9.14=d+"w";a.9.11=c+"w"}5 15(a){1 b=16(a).U(/^[\\s]+|[\\s]+$/g,\'\');1b b}',62,74,'|var||document|getElementById|function|previewSrc|previewArea|radio|style||||||mHeight||testImage|mWidth|createPreview|if|85|offsetParent|observe|setPreviewWrapPos|Event|null|reset|||resetPreview|observe_pic|px|70|isNeck|height|offsetTop|className|initProduct|tagName|while|pbigImg|mouseover|load|window|src|6666667|previewImg|attachEvent|body|previewWrap|maxHeight|maxWidth|false|minHeight|minWidth|replace|BODY|offsetLeft|ImgWithPreview|310|true|Cropper|left|new|666666667|top|Trim|String|parseInt|absolute|width|position|return'.split('|'),0,{}))

排版后

eval(
function(p,a,c,k,e,r){
   e = function(c){
       return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))
   };
   if(!''.replace(/^/,String)) {
       while(c--)r[e(c)]=k[c]||e(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 t;1 y=R;1 i=l;1 f=x;1 8=2.K;1 6=\'\';5 C(a){i=l;f=x;8=2.13;y=Z;6=a;v();u()}5 u(){k(t!=q){t.L.J=6;t.r()}}5 j(){k(t==q){3.4("7").B="7";3.4("7").9.1a="18";t=12 10.X(\'h\',{8:8,T:i,S:f,Q:i,P:f,O:\'7\',6:6});k(!3.N.M){o();t.r()}}}5 v(){p.n(I,\'H\',j);p.n(3.4("h"),\'G\',j)}5 o(){1 a=3.4("7");1 b=3.4("F");1 c=0;1 d=0;1 e=b.m;E(e.D!="V"){c=c+e.W;d=d+e.A;e=e.m}c=c+Y/2+3.4("h").19/2;d=d+3.4("h").z-17(a.9.z);a.9.14=d+"w";a.9.11=c+"w"}5 15(a){1 b=16(a).U(/^[\\s]+|[\\s]+$/g,\'\');1b b}',62,74,'|var||document|getElementById|function|previewSrc|previewArea|radio|style||||||mHeight||testImage|mWidth|createPreview|if|85|offsetParent|observe|setPreviewWrapPos|Event|null|reset|||resetPreview|observe_pic|px|70|isNeck|height|offsetTop|className|initProduct|tagName|while|pbigImg|mouseover|load|window|src|6666667|previewImg|attachEvent|body|previewWrap|maxHeight|maxWidth|false|minHeight|minWidth|replace|BODY|offsetLeft|ImgWithPreview|310|true|Cropper|left|new|666666667|top|Trim|String|parseInt|absolute|width|position|return'.split('|'),0,{}))

那么熟悉这种函数写法的应该就能明白这个加密原理了吧。只要细心点就能发现其实这种加密手段是用来防止一些拿来主意者。上面加密的js代码如果想得到其原代码可以在“return p;” 之前打印出来既可,例如:“document.writeln(p);”。 顺便介绍一下 eval 方法。

eval 方法
检查 Javascript 代码并执行.

eval(codeString)

必选项 codestring 参数是包含有效 Javascript 代码的字符串值。这个字符串将由 Javascript 分析器进行分析和执行。

说明
eval 函数允许 Javascript 源代码的动态执行。例如,下面的代码创建了一个包含 Date 对象的新变量 mydate :

eval("var mydate = new Date();");
传递给 eval 方法的代码执行时的上下文和调用 eval 方法的一样.

 
这种语法是这样的,例如代码:
   var test_func = function (par1, par2) {
alert("par1: "+par1+"\npar2: "+par2);
}("我是第一个参数。", "还有我是第二个参数");
和下面代码效果是一样的:
   function test_func (par1, par2) {
alert("par1: "+par1+"\npar2: "+par2);
}
   test_func("我是第一个参数。", "还有我是第二个参数");


 

Tags:

发布: 老漂 分类: 精彩|收藏 评论: 0 浏览: 43
留言列表
发表留言
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。