网页解密

为什么会有网页脚本加密?网页脚本加密的背后到底有什么见不得人的事情呢?其实,网页脚本加密一般是用于网页木马的免杀,一般来说入侵者成功取得Webshell权限以后就会对整个网站进行批量挂马,其中挂马的语句大多是“iframe”,也有些为了隐蔽会插入Flash(geturl)或者js里面等等。常见的主要以“下载者”和QQ盗号木马居多,大多利用的都是IE的漏洞,如MS06014和MS07004,可见打好补丁的关键性和选择一个好的浏览器的安全性。本文只是简单对小聪、蛊毒、Tkabc的脚本界秘方法做了个总结,如有错误和遗漏之处请予以指正!

首先我们要了解常见的一些加密方式,基本的加密方式主要以:Unescape、ASCII、oct/hex/det、无用字符(NUL、TAB等等)、Script Encoder、US-ASCII、Urlencode为主。额外的还有自己写的算法。

Unescape,是通过Unicode码的转换实现的,型如unescape("Hello%7B%5BWorld%5D%7D")这个形式的我们称之为escape加密。这种加密的方式实际就是escape/unescape转义到反向转义的转换过程,在韩总的网上有在线解密的http://www.hzqedison.cn/jm.htm,例如:

我们选择上面打红圈的“unescape解密”后就会出现加密前的代码:

Script Encoder,是通过JScript.Encode或者VBscript.Encode脚本的转换实现的。型如:#@~^IQAAAA==jDl.DPAxmKN ~5KE.Pkm.raYP4nD @#@&2woAAA==^#~@ 我们称之为Script Encoder这类的加密是Microsoft引入的Script Encoder使用的加密算法,编码后的代码运行前IE会先对其进行解码,如果把加密的代码放入一个自定义函数中对自定义函数调用toString()方法,得到的将是解码后的代码。这里要特别记住的是#@~^l这个是Script Encode的特征,同理,我们可以使用一个名为“游戏代码人助手”的软件来辅助解码或者可以在网上搜索响应的解密网页,我们以“游戏代码人助手”的软件来举例,例如:

我们选择其中的打红圈的地方JS代码àJScript.Encode解密,然后就会得出加密前的代码:

Urlencoder码,型如:%3Ciframe%3Ehttp://www.wulin7.cn/sys/1.htm%3C/iframe%3E我们称之为Urlencode,它实际上是HTMLEncode/Decode的互转,这种编码比较简单,在韩总的解密页http://www.hzqedison.cn/jm.htm上有相应的解密代码,例如:

我们复制到解密的网页上选择Urlencode解密就可以得到原始的代码:

16进位/10进位/8进位/编码,ASCII是美国信息交换标准码,这种加密方式是对代码进行ASCII编码转换。而转义字符"/"这个符号在JavaScript代码中后面可以和8进制、10进制、16进制的数字混淆代码。

型如  

<SCRIPT LANGUAGE="JavaScript">

eval("\141\154\145\162\164\50\42\u4ee3\u7801\u6d4b\u8bd5\42\51\73")

我们称之为8进制的加密;

型如  

<DIV STYLE="background-image:\0075\0072\006C\0028\006A\0061\0076\0061\0073\0063\0072\0069\0070\0074\003A\0061\006C\0065\0072\0074\0028\0027\0058\00

我们称之为16进制的加密;

型如

<div style="background-image:url(javascript:eval(String.fromCharCode(97,108,101,114,116,40,39,120,115,115,39,41,59)))">

我们称之为10进制的加密。

这类型的加密我们可以通过ASCII转义符来进行解密,给以在韩总的网页http://www.hzqedison.cn/jm.htm上得到答案。例如:

这个只是随便的举的例子而已,实际中是不会有这种样子加密的,只是便于说明,选择相应的转换按钮就得到了答案。

无用字符串(NUL、换行、空格、TAB、转义字符""等,在HTML中任意位置添加"空字符",即NUL(16进制00H),IE能正常显示其中内容,其实在JS代码中加入无用字符串,甚至加入换行、空格、TAB一样能被IE识别。所以我们只需要把相应的空格,TAB等等去掉就可以了。型如:<S   C  R I   P  T> a l er t ("露露") ; < / SC R I P T>称之为NUL空字符混淆。去掉NUL的方法有很多,我们可以使用一些十六进制编辑工具,把Hex 码是 00 (即是NUL) 都去掉就行,比如:UltraEdit、C32Asm、WinHex等等。当然韩总的http://www.hzqedison.cn/jm.htm也有!就不多举例子了。

S-ASCII码,型如:艰繇炀姞俭泸轲魻灬铉踽珏舰致鱼蜷痿婔麋旖泞婔妁鼋 趑殍舰龄 鳄舰镤 稆珂舰猱 礤蹁舰郁 沅祢舰蝈 骧骝舰犴 蹴鲠舰镳 痄赧舰孱 黹舰予 镫祯舰屐 狃犋舰飚 铞趄舰琉 痿麒舰痨 骣忭舰殂 踱蝼舰狒 鲨驷舰轱 铈钼舰睥婛篥锝恽婑腱踅棰婗祯蚪 簪婔桦杲㈤睥婌珩罱㈢ 婋溻旖棰婎铠憬㈧澧婇遽踅 婋聍 簪婁泖饨㈠恝婐镡 猗婗梏杲㈥澧婄牿窠 簪婒钼 我们称之为US-ASCII加密,导致乱码就是编码把7bit转换为8bit,而不是平常的gb简体编码,解密只要把每个字节的高位置0即可,其实也可以在语言选项将“西欧(windows)”改成“简体GB2312”然后另存为新的网页。这种加密的方式的解密可以用一个叫“ASCII Decoder的工具来进行转换,也可以在网上搜索相应在线解密网页,例如:

我们用ASCII Decoder来进行解密,将代码存到一个记事本里,然后将把ASCII Decoder和记事本文件放在同一个盘符内,执行ASCII Decoder.exe (记事本的名字).txt,然后就可以了。
ASCII编码,ASCII是美国信息交换标准码,这种加密方式是对代码进行ASCII编码转换

型如上面的就是ASCII加密,我们可以用ASCII代码速查表或者UltraEdit、C32Asm、WinHex来解码,我们将上面引号部分的编码放入C32Asm中,首先先新建立一个16进制文件,

文件->打开->新建16进制文件

然后将文件的大小写上,不能太小以免装不下,然后选择16进制,“00”填充,就可以了。

然后将编码复制入剪切版,然后选择“编辑”->“特别粘贴”,接下来会弹出一个复选框

这里我们选择Ascill Hex然后点确定就可以。然后我们就看到加密前的代码。

自己写的算法[脚本还原法、FSO还原法],这类加密方法比较难以解决,至少在我看来是这个样子的,面对这种我们需要的是耐心,以及JavaScript和 VBScript的FSO操作。这里举几个我见过的例子,顺带的也扩展上面所讲的东西。因为很多加密方式都是综合性的。

JavaScript还原脚本法

这是一个JavaScript加密的例子,对于JavaScript我们可以进行脚本还原,我们需要留意这么两个关键词“document.write”和“eval” 。“document.write”在JAVASCRIPT是一条打印语句,而“eval”指的是eval()函数,这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它。如果在JS的加密代码中碰上 document.write,我们一般把它改成“alert”,如果遇到“eval”一般改成“document.write”。

对于上面的例子来说,代码写得不是很整齐,我们将代码整理下以便于我们的分析:

我们可以看到代码中有两个“eval”,前面的“eval”是定义运行Function()这个函数的这个不能修改而后面的则是调用参数用的,我们可以修改这个。

将后面的“eval”改成“document.write”,然后存为脚本htm网页,预览就会得到加密前的代码。

posted on 2008-11-21 18:06  一江水  阅读(2993)  评论(1编辑  收藏  举报