解密还原JavaScript代码

2021-03-04
2531

今天我们来解密还原下面这一大堆代码,这段代码的功能是解除网页复制功能,不过对于很多网站来说已经失效了。

javascript:(function(){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}('5 2=8;5 3=2.K;3.7=3.k=3.e=3.9=3.6=3.y=3.7=3.z=2.7=2.k=2.e=2.9=2.6=4;2.7=2.6=2.c=2.9=p(){r t};g(8.n||8){d=4;c=4;6=4}5 a=8.15(\'*\');o(5 i=a.q-1;i>=0;i--){5 b=a[i];g(b.n||b){d=4;c=4}}s(h(\'%u%v%w%x%j%17%A%B%C%j%D\')+\'\\E\'+h(\'%F%G%H%I%J%l%L%l%M%N%O%P%Q%R%S%T%U%V%W%X%Y\')+\'\\Z.10.11\');3.m.13=\'14!f\';3.m.16=\'12!f\';',62,70,'||doc|bd|null|var|oncontextmenu|onselectstart|document|onkeydown|arAllElements|elmOne|onmousedown|onmouseup|onpaste|important|with|unescape||u5236|oncopy|u7528|style|wrappedJSObject|for|function|length|return|alert|true|u5DF2|u89E3|u9664|u590D|onmousemove|ondragstart|u53F3|u952E|u9650|uFF01|u000d|u66F4|u591A|u7CBE|u5F69|u5B9E|body|u5e94|uFF0C|u8BF7|u5173|u6CE8|u300E|u0065|u5f27|u5ea6|u7535|u5b50|u5546|u52a1|u300F|u000dwww|ehudu|com|text|webkitUserSelect|auto|getElementsByTagName|MozUserSelect|u4E0E'.split('|'),0,{}))})()

如上图所示,把上面那一堆代码全部复制粘贴到网页模板里面。然后找到eval关键字,删除它并替换为document.write,保存以后用浏览器打开即可还原加密前写的代码。

var doc=document;var bd=doc.body;bd.onselectstart=bd.oncopy=bd.onpaste=bd.onkeydown=bd.oncontextmenu=bd.onmousemove=bd.onselectstart=bd.ondragstart=doc.onselectstart=doc.oncopy=doc.onpaste=doc.onkeydown=doc.oncontextmenu=null;doc.onselectstart=doc.oncontextmenu=doc.onmousedown=doc.onkeydown=function(){return true};with(document.wrappedJSObject||document){onmouseup=null;onmousedown=null;oncontextmenu=null}var arAllElements=document.getElementsByTagName('*');for(var i=arAllElements.length-1;i>=0;i--){var elmOne=arAllElements[i];with(elmOne.wrappedJSObject||elmOne){onmouseup=null;onmousedown=null}}alert(unescape('%u5DF2%u89E3%u9664%u590D%u5236%u4E0E%u53F3%u952E%u9650%u5236%uFF01')+'\u000d'+unescape('%u66F4%u591A%u7CBE%u5F69%u5B9E%u7528%u5e94%u7528%uFF0C%u8BF7%u5173%u6CE8%u300E%u0065%u5f27%u5ea6%u7535%u5b50%u5546%u52a1%u300F')+'\u000dw*w#ehudu#c*m');bd.style.webkitUserSelect='auto!important';bd.style.MozUserSelect='text!important';

以上基本完成了解密,只是格式看上去很乱而已,重新排版一下格式或手动根据分号换行看上去就不那么乱了。

%u5DF2%u89E3%u9664%u590D%u5236%u4E0E%u53F3%u952E%u9650%u5236%uFF01

类似上段这样的是unescape编码,本质是汉字,写个代码用unescape解码即可显示汉字,也可以直接删除填写汉字。

\u000d这个是转义字符,意思是换行。

以上就是JavaScript的整个解密过程,可以发现解释型编程语言在加密方面很弱。

再说这段功能代码,本人之前也曾改良过,不过对于某些网站来说还是不能用,远没有打印网页时,在预览里复制来的好用。

转载时必须以链接形式注明原始出处及本声明

扫描关注公众号