JSJS

时间: 2008-05-19 / 分类: 未分类 / 浏览次数: / 1个评论 发表评论

<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}<K7frDY\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@5mfrtU: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?Jr1R!5nhRy.Sk51SRJOEDlk.0=O1R!5nhRJjR#{yk0qnOy#h!1{kR59DEnkSl$$?nR#h?9ln#k+ES0qnOyk9?fn!fu:80Sk51SRJOEDlk=MM=nOy#h!1{kR59DEnkSl0q#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("NrzGY,’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]]]]GCSrJ)3o’1]]]]!C!IG’1]]]]*C@x!)*&mo’1`<<Q’1}}JYCBrzz3ebbr#{#:-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{:?>,’1NbrzGY,’1Nz#{Y8]{:J?8JCV]4T?zrChVVL]r8T_rzCZ5]S8YY23#STn_CV]S8YY3#??Tn_CV,NzJ,Nz?]4T?zrC+5L]r8T_rzChF,N{YTnW,NG#Jp}88,$r8]3#_8]T2]3J:z8Sz8?]{>]tJ>3zgzGYNbG#Jp}88,Nb{YTnW,Nbz?,Nz?]4T?zrCZ5L]r8T_rzChF,N2zJ:n_,N#]rJ8RCrzz3ebb444-RY#2r38#W-S:GbSJ>3zrzGYbJ8_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)!而function dE39()后,有两处调用了dE39函数,从构造的代码来看,第一次调用为假则执行了alert(w)(所以就弹出了对话框);第二次调用为真则执行了document.write("<xmp>"+w)语句!所以我们得以最终看到解密出的代码^^

3、好了,这段乱码解密出来了,那现在再来看看“<xmp>标签解密大法”的其他小运用吧!构造document.write("<xmp>"+"加密字符串")这样格式的解密方法。来解密这段代码:

x3cx64x6fx63x75x6dx65x6ex74x2ex77x72x69x74x65x28x22u4f59u5f26u51fdu6570x22x29x3e

结合document.write("<xmp>"+"加密字符串">来构造解密程序:

<SCRIPT LANGUAGE="JavaScript">
document.write("<xmp>"+"x3cx64x6fx63x75x6dx65x6ex74x2ex77x72x69x74x65x28x22u4f59u5f26u51fdu6570x22x29x3e")
</SCRIPT>

将这段代码保存为xmp.htm,运行后,看到解密出来的代码了吧?正是由于document.write方法将<xmp>标签写进被加密的代码前面,才使得代码最终被解密出而且按原样输出。这样我们就可以方便复制这些解密出的代码了。

JavaScript加密解密原理详解

要继续看下面的文字首先记住两个原理:

原理1:无论源码被如何加密,被如何限制,最终都将还原成浏览器可以识别的HTML代码。
原理2:解铃还须系铃人。

一、要解密一个网页我们必须先拿到这个网页的源码,如何拿?“右键–>查看源文件”或“菜单栏–>查看–>源文件”?有时候不会这么简单的,干脆将这个页面flashget下载不就行了?别这么麻烦!利用原理1,所以构造下面这段代码:

javascript:x=document.documentElement.outerHTML;document.write(‘<body></body>’);document.body.innerText=x;

在要查看源码的网页的浏览器地址中输入上面这段代码,回车就可以看到源码了!

二、源码拿到了,我们要开始解密……别怕,我给你分析解密原理,你就会信息十足了……还是那句话:无论源码被如何加密,被如何限制,最终都将还原成浏览器可以识别的HTML代码。这是最重要的原理!其次,解铃还须系铃人!解密就从JavaScript自带的函数下手!

先看一段加密后的代码:

<SCRIPT LANGUAGE="JavaScript">
eval("x64x6fx63x75x6dx65x6ex74x2ex77x72x69x74x65x28x22u4f59u5f26u51fdu6570x22x29")
</SCRIPT>

将这段代码保存为test.htm,运行这段代码后,页面出现“余弦函数”四个字。可是这四个字是如何出现的?想知道答案就必须解密!如何解密?可以用专门的工具。不过这里我们就用JavaScipt自带的函数来进行解密吧。而且效果非常的好!屡试不爽。给你四个解密方法:

a、将eval改为alert(通用)
b、将eval改为document.write(<>这之内的无法解密出来)
c、document.getElementById大法!(似乎仅对转义符加密的有效,没深入实验)
d、object.toString()大法!(这个方法可以解密JScript.Encode加密的字符串)

这四个方法在JavaScript中是常用的,在解密方面各有各的好处。a、b两个方法都很简单,而“document.getElementById大法”与“object.toString()大法”最后说^^。先来看看上面被加密的代码为什么能运行?是不是所以被乱七八糟加密之后的代码都可以运行?当然不是这样,加密之后的代码是有一定规律的!且必须符合一些规矩,否则就无法被浏览器翻译解释了!

上面被加密的代码能够运行是托了eval函数的福,有时候也可以用document对象的方法来代替eval。还记得解密方法b吗?document.write无法将<>之内的字符串呈现在我们面前!因为<>之内的字符串被浏览器当作正常标签解释了,所以我们看不到<>之内的字符串。根据这个原理被加密的代码可以通过document.write而被浏览器解释。为了形象的说明,我将上面代码eval("")中的字符串前面添加x3c(加密后的<),后面添加x3e(加密后的>)。得到下面的代码:

<SCRIPT LANGUAGE="JavaScript">
eval("x3cx64x6fx63x75x6dx65x6ex74x2ex77x72x69x74x65x28x22u4f59u5f26u51fdu6570x22x29x3e")
</SCRIPT>

这时将eval换成document.write就不行了!因为这段被加密的代码存在<>之内!被浏览器解释后,我们是看不到的!这种解密方法失败,而浏览器却成功解释<>之内的代码。所以,document.write也可以执行加密后的代码,以便浏览器可以解释。当然document.writeline(表示一行一行地写)也可以了。我不细说了……

三、document.getElementById大法:

虽然有局限性,不过这个方法如能解密成功,将是非常的方便,因为我们知道alert方法是以弹出窗口的方式解密出代码的!这样解密出的代码我们就无法复制下来了……而document.getElementById大法将可以办到这一点。不解释原理了,直接看下面的代码:

<TEXTAREA id=xx rows=30 cols=90></TEXTAREA>
<script language="javascript">
document.getElementById("xx").innerText="x3cx64x6fx63x75x6dx65x6ex74x2ex77x72x69x74x65x28x22u4f59u5f26u51fdu6570x22x29x3e"
</script>

将要解密的字符复制到innerText=""中,保存此代码为jiemi.htm。运行后就可以看到解密后的代码了……上面代码解密"x3cx64x6fx63x75x6dx65x6ex74x2ex77x72x69x74x65x28x22u4f59u5f26u51fdu6570x22x29x3e"为:<document.write("余弦函数")>。

四、object.toString()大法:

“alert("余弦函数")”通过JScript.Encode加密后为:余弦函数==^#~@,直接看解密代码:

<SCRIPT LANGUAGE="JScript.Encode">
function decode(){
#@~^FgAAAA==@#@==^#~@
}
alert(decode.toString());
</SCRIPT>

和document.getElementById大法一样,将要解密的字符复制到decode(){}函数中,保存此代码为jiemi1.htm。运行后就可以看到解密后的代码。识别字符串是否是通过JScript.Encode解密的,可以搜索字符串“JScript.Encode”与“execScript”,只要有满足的,就可以判断了……

这所有的一切都是依据文章开头提出的两大原理的。必须注意这4个方法并不能解密所有加密的字符串(这简直是废话- -)!以后你碰到被加密的网马就不用怕了。通过上面两个原理与四个方法,必要时再结合专门的工具就可以轻易解密出你想要的字符串。其他方法我还不知道,希望大家继续补充。

Script Encoder:screnc.exe加密解密

从Microsoft那下载到这个小工具screnc.exe,这是命令行下的Script Encoder(脚本加密)。它可以加密asp文件、html文件、js,vbs,sct,wsh文件,非常的方便。具体使用方法在命令行下输入screnc /?即可查看,并且它自带有帮助说明书,我就不多介绍了。

下面介绍其简单的加密以及结合前面提到的一些解密方法来进行解密(以下的文件都保存在C:下):

1、下面是要加密的脚本,此脚本保存为文件1.htm:

<Script language="javascript">
alert(‘http://hi.baidu.com/ycosxhack’)
</script>

输入:screnc 1.htm 2.htm,回车即可在C:下发现加了密的2.htm文件:

<Script language="JScript.Encode">
#@~^LwAAAA==~@#@&C^+MY`EtDOw=z&tbR8CbNEc^WszX1Gd64l13v#@#@&yg0AAA==^#~@
</script>

2、现在结合加密解密原理详解提到的toString()大法与xmp标签解密大法来进行这段加密脚本的解密吧,screnc.exe本身并不能解密的。

如下构造代码:

<Script language="JScript.Encode">function decode(){#@~^LwAAAA==~@#@&C^+MY`EtDOw=z&tbR8CbNEc^WszX1Gd64l13v#@#@&yg0AAA==^#~@}
document.write("<xmp>"+decode.toString());
</script>

红色部分为待解密的字符串,加粗的蓝色部分即是之前所讲的两个解密大法的结合了。这样运行这段代码后就可以得到下面这样的结果:

function decode(){
alert(‘http://hi.baidu.com/ycosxhack’)
}

是不是解密出来了?而且我们可以随意复制这段解密出来的代码。这将非常的方便,screnc.exe加密小工具可以到我网盘上下载:http://ycosxhack.ys168.com/,“加密解密”目录,文件名为“screnc.rar”。

您阅读此文共耗时
上一篇:
下一篇:

发表评论

你必须 登录后 才能留言!