//--------------------------------------------------------------------------------------------------------
//                  Désinfection du ver Win32/Ska
//
// suppSka.js            mode normal
// suppSka.js -s         mode silencieux : seule la proposition de redémarrage est affichée si besoin
//
// suppSka.js -r         mode "reboote" : en cours de désinfection, après le redémarrage.
//
// François Pirsch, 20 mars 2000
// fpirsch@waika9.com
//--------------------------------------------------------------------------------------------------------

fs = WScript.CreateObject("Scripting.FileSystemObject");
WshShell = WScript.CreateObject("Wscript.Shell");
env = WshShell.Environment('PROCESS');
WinDir = env('windir');

var silence = false;
var reboote = false;
if (WScript.Arguments.length > 0) {
  silence = (WScript.Arguments(0) == '-s');
  reboote = (WScript.Arguments(0) == '-r');
}

//---------------------------
// Effacement d'un fichier
//---------------------------
function erase (f) {
  try {fs.GetFile(f).Attributes = 0;
       fs.DeleteFile (f);
       compteur++}
  catch(e) {}
}

if ((!silence) && (!reboote))
  bouton = WshShell.Popup ('Script de désinfection du ver Win32/Ska\n\nCe script est fourni sans garantie d\'aucune sorte. Voulez-vous continuer ?',0,'Avertissement',48+4);
if (silence || reboote || (bouton == 6)) {
//---------------------------------------------------------------------------
//                             Désinfection
//---------------------------------------------------------------------------
var compteur = 0;        // compte le nombre d'éléments du virus trouvés.
var msg;
var termine = true;
var f, contenu, demander = false, copier = false, partiel = false;

// On nettoie la clé qui lance Ska, au cas où on prendrait l'infection assez tôt
try {WshShell.RegRead('HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce\\Ska.exe');
     WshShell.RegDelete('HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce\\Ska.exe');
     compteur++}
catch(e) {}

// On nettoie les 3 fichiers Ska.exe et Ska.dll et liste.ska
erase (WinDir+'\\System\\Ska.exe');
erase (WinDir+'\\System\\Ska.dll');
erase (WinDir+'\\System\\liste.ska');

// On n'a plus qu'à s'occuper de Wsock32.dll, c'est le plus dur
f = fs.OpenTextFile('C:\\Windows\\System\\WSock32.dll',1);          // On ouvre wsock32.dll
contenu = f.Read(100000);
f.close();
if (contenu.indexOf('Ska.dll') >= 0) {                              // est-il infecté ?
 // on essaie de récupérer une version propre de WSock32.dll        // oui
  if (fs.FileExists(WinDir+'\\System\\WSock32.ska')) {              // y a-t-il un fichier WSock32.ska ?
    f = fs.OpenTextFile('C:\\Windows\\System\\WSock32.ska',1);      // oui, on l'ouvre
    contenu = f.Read(100000);
    f.close();
    if (contenu.indexOf('Ska.dll') >= 0) demander = true;     // infecté ? On propose d'effacer le dll
      else copier = true;                                     // propre ? On va remplacer le dll par le ska
  } else demander = true;                           // wsock32.ska n'existe pas, on propose d'effacer le dll

  bouton = 6;
  if (demander & !silence & !reboote) bouton = WshShell.Popup ('Impossible de désinfecter le fichier'
    + ' wsock32.dll (indispensable à la connexion Internet)\nLe ver Win32/Ska ne sera complètement'
    + ' supprimé que si ce fichier est effacé.\n'
    + 'Pour rétablir votre connexion à Internet, il faudra en réinstaller une version "propre".\n\n'
    + 'Voulez-vous effacer le fichier wsock32.dll (conseillé) ?',0,'Avertissement',48+4);
  if (bouton == 6) {
    erase (WinDir+'\\System\\WSock32.dll');                           // on essaie d'effacer wsock32.dll
    if (fs.FileExists(WinDir+'\\System\\WSock32.dll')) {              // il est toujours là ?
      msg = 'Le ver Win32/Ska a été partiellement supprimé.';
      WScript.Echo (msg + '\nL\'ordinateur doit être redémarré pour terminer la désinfection.');
      WshShell.RegWrite ('HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce\\suppSka',WScript.ScriptFullName+' -r');
      termine = false;          // On va rebooter, affaire à suivre...
      copier = false;           // On annule l'ordre de copie, de toute façon c'est pas possible maintenant.
      WshShell.Run (WinDir + '\\rundll32.exe shell32.dll,SHExitWindowsEx 2');
    }
  } else partiel = true;
// éventuellement, on récupère la version saine de wsock32.dll
  if (copier) fs.CopyFile (WinDir+'\\System\\wsock32.ska',WinDir+'\\System\\wsock32.dll');
}

if (termine) {                                                // Si on ne reboote pas, que tout est terminé,
  erase (WinDir+'\\System\\wsock32.ska');                     // on efface wsock32.ska,
  if (compteur) {                                             // et on affiche le message de fin.
    if (!silence) {
      if (!partiel) WScript.Echo ('Le ver Win32/Ska a été supprimé.');
      else WScript.Echo ('Le ver Win32/Ska a été partiellement supprimé.');
    }
  } else if (!silence) WScript.Echo ('Le ver Win32/Ska n\'a pas été trouvé sur cet ordinateur.');
}

}
