网页解密
为什么会有网页脚本加密?网页脚本加密的背后到底有什么见不得人的事情呢?其实,网页脚本加密一般是用于网页木马的免杀,一般来说入侵者成功取得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,例如:
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%
我们复制到解密的网页上选择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\
我们称之为16进制的加密;
型如
<div style="background-image:url(javascript:eval(String.fromCharCode(97,108,101,114,116,40,39,120,115,115,39,41,59)))">
我们称之为10进制的加密。
这个只是随便的举的例子而已,实际中是不会有这种样子加密的,只是便于说明,选择相应的转换按钮就得到了答案。
无用字符串(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)”改成“简体GB
型如上面的就是ASCII加密,我们可以用ASCII代码速查表或者UltraEdit、C32Asm、WinHex来解码,我们将上面引号部分的编码放入C32Asm中,首先先新建立一个16进制文件,
文件->打开->新建16进制文件
然后将编码复制入剪切版,然后选择“编辑”->“特别粘贴”,接下来会弹出一个复选框
自己写的算法[脚本还原法、FSO还原法],这类加密方法比较难以解决,至少在我看来是这个样子的,面对这种我们需要的是耐心,以及JavaScript和 VBScript的FSO操作。这里举几个我见过的例子,顺带的也扩展上面所讲的东西。因为很多加密方式都是综合性的。
这是一个JavaScript加密的例子,对于JavaScript我们可以进行脚本还原,我们需要留意这么两个关键词“document.write”和“eval” 。“document.write”在JAVASCRIPT是一条打印语句,而“eval”指的是eval()函数,这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它。如果在JS的加密代码中碰上 document.write,我们一般把它改成“alert”,如果遇到“eval”一般改成“document.write”。
对于上面的例子来说,代码写得不是很整齐,我们将代码整理下以便于我们的分析:
将后面的“eval”改成“document.write”,然后存为脚本htm网页,预览就会得到加密前的代码。