//--------------------------------------------------------------------------------------------------------
//                  Désinfection du ver WScript.KakWorm
//
// suppkak.js            mode normal
// suppkak.js -s         mode silencieux : seule la proposition de redémarrage est affichée si besoin
//
// François Pirsch, 18 février 2000
//   5 mars 2000 : correction d'un bug mineur (plantage si Outlook n'est pas installé)
//   16 mars 2000 : correction d'un bug sur le nom du fichier hta placé par Kak dans le répertoire System
// fpirsch@waika9.com
//--------------------------------------------------------------------------------------------------------

fs = WScript.CreateObject("Scripting.FileSystemObject");
WshShell = WScript.CreateObject("Wscript.Shell");
env = WshShell.Environment('PROCESS');
WinDir = env('windir');

var silence = false;
if (WScript.Arguments.length > 0) silence = (WScript.Arguments(0) == '-s');

//---------------------------
// Effacement d'un fichier
//---------------------------
function erase (f) {
  try {fs.GetFile(f).Attributes = 0;
       fs.DeleteFile (f);
       cagou++}
  catch(e) {}
}

//-----------------------------------------------------------------------------------
// Fonction qui efface les clés et fichiers installés par Kak pour l'identité 'id'
//-----------------------------------------------------------------------------------
function nettoieIdentite (id) {
  var base = 'HKEY_CURRENT_USER\\Identities\\'+id+'\\Software\\Microsoft\\Outlook Express\\5.0\\';
  var keysFound = 0;
  try {WshShell.RegRead (base+'Signature Flags');
       WshShell.RegDelete (base+'Signature Flags');
       keysFound++}
  catch(e) {}
  try {WshShell.RegRead (base+'signatures\\Default Signature');
       WshShell.RegDelete (base+'signatures\\Default Signature');
       keysFound++}
  catch(e) {}
  try {WshShell.RegRead (base+'signatures\\00000000\\');
       WshShell.RegDelete (base+'signatures\\00000000\\');
       keysFound++}
  catch(e) {}
  erase (WinDir+'\\System\\'+id.substring(1,9)+'.hta');
  return (keysFound > 0);
}


if (!silence)
  bouton = WshShell.Popup ('Script de désinfection du ver WScript/KakWorm\n\nCe script est fourni sans garantie d\'aucune sorte. Voulez-vous continuer ?',0,'Avertissement',48+4);
if (silence || (bouton == 6)) {
//---------------------------------------------------------------------------
//                             Désinfection
//---------------------------------------------------------------------------
var reboote = false;     // Faut-il redémarrer après la désinfection ?
var cagou = 0;           // compte le nombre d'éléments du virus trouvés.
var fl;                  // dossier des indentités

iddir = WinDir + '\\Application Data\\Identities\\';                // On cherche les identités
try {fl=fs.GetFolder(iddir)}                                        // et on les nettoie une par une
catch (e) {}

if (fl) {
  sbf=fl.SubFolders;
  for(var mye=new Enumerator(sbf);!mye.atEnd();mye.moveNext()) {
    idd=mye.item();
    ids=new String(idd);
    if (nettoieIdentite (ids.slice(iddir.length))) {reboote = true; cagou++}
  }
}

// On cherche ensuite la clé qui lance Kak à chaque démarrage
try {WshShell.RegRead('HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\cAg0u');
     WshShell.RegDelete('HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\cAg0u');
     cagou++}
catch (e) {}

// On efface les fichiers restants
erase (WinDir+'\\kak.htm');
erase (WinDir+'\\Menu Démarrer\\Programmes\\Démarrage\\kak.hta');
erase (WinDir+'\\Start Menu\\Programs\\Startup\\kak.hta');

// On reprend l'Autoexec.bat d'origine
erase ('C:\\Ae.kak');
if (cagou) {
  f = fs.OpenTextFile('C:\\Autoexec.bat',1);       // On supprime toutes les lignes de l'Autoexec.bat
  contenu = f.Read(10000);                         // contenant "kak.hta".
  f.close();
  var rewrite = false;
  while (contenu.indexOf('kak.hta') >= 0) {
    rewrite = true;                                // indicateur de modifications
    i = contenu.indexOf('kak.hta');
    i1 = contenu.substring(0,i).lastIndexOf('\n') + 1;
    i2 = contenu.slice(i).indexOf('\n');
    if (i2 < 0) i2 = contenu.length-i-1;
    contenu = contenu.substr(0,i1)+contenu.slice(i2+i+1);
  }
  if (rewrite) {
    try {fs.GetFile('C:\\Autoexec.bak').Attributes = 0}
    catch(e) {}
    f = fs.GetFile('C:\\Autoexec.bat');
    f.Attributes = 0;                              // On écrit les modifications éventuelles
    f.Copy('C:\\autoexec.bak');                    // après avoir fait une sauvegarde de l'autoexec.
    f=fs.CreateTextFile('C:\\Autoexec.bat');
    f.write(contenu);
    f.close();
  }
}

if (cagou) {
  msg = 'Le ver WScript/KakWorm a été supprimé.';
  // Redémarrer
  if (reboote) {
    msg += '\n\nLes signatures sous Outlook ont été détruites, il faudra les reconfigurer.';
    bouton = WshShell.Popup (msg+'\n\nL\'ordinateur doit être redémarré pour que les modifications puissent être prises en compte.\nVoulez-vous redémarrer maintenant ?',0,'Terminé !',32+4);
    if (bouton == 6) WshShell.Run (WinDir + '\\rundll32.exe shell32.dll,SHExitWindowsEx');
  } else if (!silence) WScript.Echo (msg);
} else if (!silence) WScript.Echo ('Le ver WScript/KakWorm n\'a pas été trouvé sur cet ordinateur.');
}

