< xmp>标签解密大法
来源:余弦函数
在JavaScript网页的解密中。<xmp>标签居然也起到很重要的作用!因为这对<xmp></xmp>标签内的HTML元素将被渲染为文本,按原样输出。将下面代码保存为xmp.htm,你试试就知道了:)
<xmp>
<html>
<head>
<title>JavaScript解密/title>
</head>
<body>
xmp内的所有标签将被显示!
</body>
</xmp>
1、根据这个原理,我们就可以开始构造代码,以将HTML中被加密了的代码解密出来,这样解密出的代码是可以直接复制的,这个灵感来自好友阿郎提供的那段加密代码:http://www.asptop.cn/article/article_144_1.asp,这是经过CryptHTML加密的:
<html><head><Meta Name=Encoder Content=HTMLSHIP>
<!--The page is protected by CryptHTML XP(Unregistered Version)--><noscript><iframe></iframe></noscript><script language="javascript"><!--
sB73="\{\+se5\{w",tZ25="\{\+\*p\*s\[ep";7.852054E-02,nP19="0.6484527",tZ25='j\^J9x\#5tg\,MpR\'\/\<\rIW\\e1o\=\&7bmL2G\;szadwq\%6Hv\`\}Bk\[\nuO\?\*QhFl4\~\{\)8AT\|ySPE\+\"U\(Y\!N\_0Vfni\@\$\]KDcr\ \-Z\.\:C3\>X',sB73='\|\;\/\%F\[U5z\_\&\@3\(PbN\'xak8h\:CI\+\{G\`Z\=l2E\#\?4pL\~gAM\^sW61\}\<K7f\rDY\\q0oHi\$\n\>\*Q\ \.By\)urjXVORnT\"vwd\!SJ\]c9\-etm\,';function dE39(jK57){"\{\+\[\[\ne\*5",l=jK57.length;'V\-\+\+\~HV\+Z',w='';while(l--)"\{\+5\*w\*\*\ne",o=sB73.indexOf(jK57.charAt(l)),'V\-F\\VVF\\5',w=(o==-1?jK57.charAt(l):tZ25.charAt(o))+w;"p\+Z\*\*sZZz\.\{p",sB73=sB73.substring(1)+sB73.charAt(0),document.write(w);'Z\-VZ\+5\+\+\ cVZ'};dE39("bl\!Sn\@5JDERz1Ezk\:\|EgEl\!Sn\@5mf\rtU\:Lt\`I\=nOy\#h\!1\{kR59EDD0qO1R\!5nhRJj\#\{y0qSk51SRJOEDlkM\=O1R\!5nhRJj\{\#\{y0q\#h\!1\{kR59hR\!hR5kF5\{kR1\:j\#\{\=lk5in\{kh15y\.j\{\#\{y0\.\_oXX0M\=j\{\#\{y0\=M\#h\!1\{kR59hR\!hR5kF5\{kR1\:Rk\?J\r1R\!5nhRy\.Sk51SRJOEDlk\.0\=O1R\!5nhRJjR\#\{yk0qnOy\#h\!1\{kR59DE\nkSl\$\$\?nR\#h\?9ln\#k\+ES0qnOyk9\?fn\!fu\:80Sk51SRJOEDlk\=MM\=nOy\#h\!1\{kR59DE\nkSl0q\#h\!1\{kR59\!E\@51SkQgkR5lyQgkR59\&\}B\>Qd\}xr0\=\#h\!1\{kR59hR\{h1lk\#h\?R\:jR\#\{\=MkDlkq\#h\!1\{kR59hR\{h1lk1\@\:jR\#\{\=M\=zi\%U\:IYIX\=\{\^LU\:Yt\`\%\=O1R\!5nhRJj\#\#ly0qnOy\#h\!1\{kR59EDD0q\#h\!1\{kR59hRlkDk\!5l5ES5\:O1R\!5nhRJy0qSk51SRJOEDlkM\=lk5in\{kh15y\.j\#\#ly0\.\_IXX0MM\=j\#\#ly0\=D\}\`U\:UYI\`\=R\>tI\:L8t\=\#eY\`\:tYI\`\=hVY\%\:UIUY\=\@HYL\:\`XYY\=\=jDn\!kRlk\#j5hj\:\.\.\=bPl\!Sn\@5m")//--></script><Script lAnguage=jAVAsCRiPT>dE39("N\rzGY\,\'1N\{\:\?\>\,\'1N2SJT3z\]z\>38CBz8\[zb\;2SJT3zB\,\'1R\}nSzT\:n\]TnTz\)o\]0\'1\?\:S\}G8nz\-4JTz8\)BBol\^\'14Tn\?\:4\-\:nY\:\#\?\]C\]TnTzl\'1Nb2SJT3z\,\'1N2SJT3z\]Y\#n\_\}\#\_8CBOs\*SJT3zB\,\'1\*CBV\!Vi\~D\~\ ZV\~5\+Z\+Z\~D\+ZZV\+Z\~5\+m\+5\~\!\~5ZV\~\ \~5\+H\+\\V\!ViB\'1\*C\*\.B\~\~\~\ \~h\~\!\~5mhm\!ZZ\+V\~5Z\ \~5\+H\~5ZZV\!Vi\~\~\~\ \~h\~\!\~5mZm\!ZZ\+V\~5Z\ \+\~\~Z\+mZZV\!ViB\'1\*C\*\.B5m\~5\+\\ZV\~\\\~\~ZVm\!ZV\~\\\~D\~m\+5\~\!\~5\~\ \+\\Z\ \~m\+Z\~5\~h\+\\\~5\\5\~t\~5\~\!\~5\~\ \+\\ZHZZ\~D\~Z\~i\~5\~m\+\\ZZZFV\!Vi\~\\\~\~Z\ \+m\~5\+\\\\h\+\\\+\\\+Z\~F\~Z\+5\+\\\~5ZVZZ\~m\~t\~h\+m\+m\~F\~\\ZZZtZVZZ\~m\~t\+m\~F\~\\mi\\Z\\\\mFm\~\\mm5m5m\~Z\!m\~m5\\hmmZ\!mhmh\\\\mVZ\!mFmHmm\\hB\'1\*C\*\.BZ\!mVmV\\mmVm\\\\\~\\mmZmF\\5mmm\~ZZV\!Vi\+m\+\\\+Zm\!ZZ\\\!\~F\~m\+Z\~D\+m\~D\~\~\+\\Z\ 5H\\\!\\t\\H5\\5\\5VZZV\!Vi5m\~5\+\\ZV\+HZVm\!ZV\~\\\~\~Z\ \\m\+Z\~5\~h\+\\\~5\\D\~Z\~i\~5\~m\+\\ZH\+m\+\\\+ZZtZZZZZFV\!Vi\\mmhm\!ZZ\\h\~\\\~DZZV\!Vi\\mmZm\!ZZ\~\\\~ZZ\ ZZV\!Vi\\mmmm\!ZZ\+m\+\\B\'1\*C\*\.B\+ZZZV\!Vi\\mm\\m\!ZZ\~5\~h\~\!ZZV\!Vi\+m\+\\\+Zmhm\!\\mmhZ\~\\mmZZ\~\\mmmZ\~\\mm\\V\!Vi\+m\+\\\+Zm5m\!\+m\+\\\+ZmhV\!Vi\+m\~5\+\\ZV5mZVm\!ZV\~\\\~\~Z\ \~m\+Z\~5\~h\+\\\~5\~D\~Z\~i\~5\~m\+\\ZH\+m\+\\\+Zm5ZtZZZZZFV\!Vi5mZ\ \+\\\+F\+V\~5ZVm\!ZVmhV\!Vi\+m\+\\\+Zm\~m\!ZZ\\\+\\55\\ZZV\!B\'1\*C\*\.BVi\+HZ\ \\D\+V\~5\~\ ZV\+m\+\\\+Zm\~ZtZV\~m\+5\+Z\~tZtZV\\\~\~h\~t\+m\~5V\!Vi\+HZ\ 5m\~5\~\ \~\\V\!Vi\+mmhm\!ZZ5m\~m\+Z\~F\+V\+\\ZZV\!Vi\+mmZm\!ZZ\~F\~\ \~\+Z\ ZZV\!Vi\+mmmm\!ZZ\\\~\~F\~t\~5ZZV\!Vi\+mm\\m\!ZZ5m\+F\+m\+\\\~5\~\!\\D\~Z\~i\~5\~m\+\\ZZV\!Vi\+mmVm\!\+mmhZs\+mmZZs\+mmmB\'1\*C\*\.BZs\+mm\\V\!Vi\+m\~5\+\\ZV\\\~ZVm\!ZV\~\\\~\~Z\ \~m\+Z\~5\~h\+\\\~5\~D\~Z\~i\~5\~m\+\\ZH\+mmVZtZZZZZFV\!Vi\+m\~5\+\\ZV\+\\\~\!\+VZVm\!ZV\\\~Z\ \\\+\~5\+\\5m\+V\~5\~m\~F\~h\~t\\\~\~D\~t\~\\\~5\+ZZHmZZFV\!Vi\~\~\~\ \~h\~\!\~5mhm\!ZV\\\~Z\ \\Z\+5\~F\~t\~\\5V\~h\+\\\~HZH\+\\\~\!\+VZt\~\~\~\ \~h\~\!\~5mhB\'1\*C\*\.BZFV\!Vi5mZ\ \~D\+V\~5\~\ V\!Vi5mZ\ \+\+\+Z\~F\+\\\~5ZV\+HZ\ \+Z\~5\+m\+V\~D\~\ \+m\~5\\Z\~D\~\\\+FV\!Vi5mZ\ \+m\~h\+\~\~5\+\\\~D\~\~\~F\~t\~5ZV\~\~\~\ \~h\~\!\~5mhZtmZV\!Vi5mZ\ \~m\~t\~D\+m\~5V\!Vi\~\~\~\ \~h\~\!\~5mZm\!ZV\\\~Z\ \\Z\+5\~F\~t\~\\5V\~h\+\\\~HZH\+\\\~\!\+VZt\~\~\~\ \~h\~\!\~5mZZFV\!ViB\'1\*C\*\.B5m\~5\+\\ZV\+\\\+mZVm\!ZV\\\~Z\ \\D\+V\~5\~\ 5\\\~5\+H\+\\\\\~\~F\~t\~5ZH\~\~\~\ \~h\~\!\~5mZZtZVmZZtZV5\\\+Z\+5\~5ZFV\!Vi\+\\\+mZ\ 5\+\+Z\~F\+\\\~5\\t\~F\~\ \~5ZVZZ5m\~5\+\\ZV5m\~H\~5\~t\~tZVm\!ZV\\m\+Z\~5\~h\+\\\~5\\D\~Z\~i\~5\~m\+\\ZHZZZZ5m\~H\~5\~t\~tZ\ \\h\+V\+V\~t\~F\~m\~h\+\\\~F\~D\~\ B\'1\*C\*\.BZZZZZFZZV\!Vi\+m\+h\~tm\!ZZ5m\~H\~5\~t\~tZ\ 5m\~H\~5\~t\~t\\5\+H\~5\~m\+5\+\\\~5ZVZZZZZZZs\~\~\~\ \~h\~\!\~5mhZsZZZZZZZtZZZZZZZZZtZZZZZZZZZtZZZZ\~D\+V\~5\~\ ZZZZZtmVZZV\!Vi\+\\\+mZ\ 5\+\+Z\~F\+\\\~5\\t\~F\~\ \~5ZV\+m\+h\~tV\!Vi\+\\\+mZ\ \~m\~t\~D\+m\~5V\!Vi\~F\~\~ZV\\\~B\'1\*C\*\.BZ\ \\\~\~F\~t\~5\\5\+H\~F\+m\+\\\+mZH\~\~\~\ \~h\~\!\~5mhZFm\!\+\\\+Z\+5\~5ZV\+\\\~H\~5\~\ V\!Vi\~F\~\~ZV\\\~Z\ \\\~\~F\~t\~5\\5\+H\~F\+m\+\\\+mZH\~\~\~\ \~h\~\!\~5mZZFm\!\+\\\+Z\+5\~5ZV\+\\\~H\~5\~\ V\!ViZVZVZVZV\+m\~5\+\\ZV5hZVm\!ZV\~\\\~\~Z\ \~m\+Z\~5\~h\+\\\~5\~D\~Z\~i\~5\~m\+\\ZHZZ5m\~H\~5\~t\~tB\'1\*C\*\.BZ\ \\h\+V\+V\~t\~F\~m\~h\+\\\~F\~D\~\ ZZZtZZZZZFV\!ViZVZVZVZV5hZ\ 5m\~H\~5\~t\~t\\5\+H\~5\~m\+5\+\\\~5ZV\~\~\~\ \~h\~\!\~5mZZtZZZZZtZZZZZtZZ\~D\+V\~5\~\ ZZZtmVV\!Vi\~5\~\ \~\\ZV\~F\~\~V\!Vi\~5\~\ \~\\ZV\~F\~\~V\!ViB\'1\!CBB\'1\!\<\]agx\`\ \]\`\ j\)\*o\,h\'1\]\]\]\]WCBIgB\.\`\ D\$\)\*\&Zo\'1\]\]\]\]3Ct\`n\_\)Wo\'1\]\]\]\]GCS\rJ\)3o\'1\]\]\]\]\!C\!IG\'1\]\]\]\]\*C\@x\!\)\*\&mo\'1\`\<\<Q\'1\}\}JYCB\rzz3ebb\r\#\{\#\:\-GzA\{Y\:\_\-Snb3\:34Tnb2\:Rzb8\+m5Z8\?FZ\#HZF\#\?R\-8\[8B\'12z\}CBS\}JYCBBB\]I\]\}\}JY\]I\]BBBB\'1\!C2z\}I\!\'1\ \|\ ty\$\ \]\!\'1Nb2SJT3z\,\'1Nb\{\:\?\>\,\'1Nb\rzGY\,\'1Nz\#\{Y8\]\{\:J\?8JCV\]4T\?z\rChVVL\]\r8T\_\rzCZ5\]S8YY23\#STn\_CV\]S8YY3\#\?\?Tn\_CV\,NzJ\,Nz\?\]4T\?z\rC\+5L\]\r8T\_\rzChF\,N\{YTnW\,NG\#Jp\}88\,\$\r8\]3\#\_8\]T2\]3J\:z8Sz8\?\]\{\>\]tJ\>3zgzGYNbG\#Jp\}88\,Nb\{YTnW\,Nbz\?\,Nz\?\]4T\?z\rCZ5L\]\r8T\_\rzChF\,N2zJ\:n\_\,N\#\]\rJ8RC\rzz3ebb444\-RY\#2\r38\#W\-S\:GbSJ\>3z\rzGYbJ8\_T2z8J\-\rzG\,Q\:48J\]\{\>\]tJ\>3zgzGYNb\#\,Nb2zJ\:n\_\,Nbz\?\,NbzJ\,Nbz\#\{Y8\,")</script></head><body><noscript><b><font color=red>This page requires a javascript enabled browser!!!</font></b></noscript></body></html>
这段乱码看了都头晕,不过注意我用颜色标记的字符即可。function定义了dE39()这个函数,有两处调用了dE39函数,并且在function定义dE39函数内出现document.write!还记得我前面说过的document.write大法吗?并且我说过将document.write换为alert即可解密。你试试就会知道了(建议断网测试,否则中毒别来找我^^)。这是经典的alert大法!不过这样解密就糟了,因为解出的代码无法被复制……
2、所以现在我介绍<xmp>标签解密大法。其实<xmp>标签不闭合也行(即不要</xmp>)。很明显function定义的dE39函数具有解密功能,否则浏览器如何解释那些乱七八糟的字符?请记住我在JavaScript加密解密原理详解中提到的两大原理。不多说了,看<xmp>标签是如何解密的:
将上面红色标记的document.write(w);改为(w.length>1000)?document.write("<xmp>"+w):alert(w);。运行后就会看到解密效果了。真正有价值的不是alert(w)弹出的信息,而是document.write写出来的信息。为什么要这样构造?这样构造的原因是CryptHTML加密代码本身的限制。我解释下(w.length>1000)?document.write("<xmp>"+w):alert(w);的意思:
其实这行代码是一条件判断语句,结构是这样的:(条件判断)?表达式1:表达式2。即当w.length>1000为真则执行document.write("<xmp>"+w),为假则执行alert(w)!而functiondE39()后,有两处调用了dE39函数,从构造的代码来看,第一次调用为假则执行了alert(w)(所以就弹出了对话框);第二次调用为真则执行了document.write("<xmp>"+w)语句!所以我们得以最终看到解密出的代码^^
3、好了,这段乱码解密出来了,那现在再来看看“<xmp>标签解密大法”的其他小运用吧!构造document.write("<xmp>"+"加密字符串")这样格式的解密方法。来解密这段代码:
\x3c\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\x22\u4f59\u5f26\u51fd\u6570\x22\x29\x3e
结合document.write("<xmp>"+"加密字符串">来构造解密程序:<SCRIPT LANGUAGE="JavaScript">
document.write("<xmp>"+"\x3c\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\x22\u4f59\u5f26\u51fd\u6570\x22\x29\x3e")
</SCRIPT>
将这段代码保存为xmp.htm,运行后,看到解密出来的代码了吧?正是由于document.write方法将<xmp>标签写进被加密的代码前面,才使得代码最终被解密出而且按原样输出。这样我们就可以方便复制这些解密出的代码了。