Aide : Patch anti sasser.b

juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 - 14 mai 2004 à 17:29
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 15 mai 2004 à 01:40
Bonjour,
Je me suis remis au developpement c++ sous dev cpp 4.
Je realise un patch contre sasser.b.worm, en suivant l'indication ;
http://www.symantec.com/region/fr/techsupp/avcenter/venc/data/fr-w32.sasser.b.worm.html
J'ai voulu utiliser un source qui permettez d'effacer directement une valeur à une clef sous le registre ;
http://www.cppfrance.com/code.aspx?ID=9265
Mais en étant encore trés debutant je n'y arrive pas à le mettre.
Sous un fichier .reg j'ai realiser ceci :
REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run]

"avserve2.exe"=- 

Comme le stipule symantec.
Ensuite mon code donne :
#include 
#include <stdio.h>
#include <stdlib.h>
bool fileexists(const char *filename)
{
FILE *fichier = NULL;
fichier = fopen(filename, "r");
if (fichier == NULL)
return false;
fclose(fichier);
return true;
}
int main()
{
if (fileexists("c:\\windows\\Avserve2.exe") == false)
{ 
cout << "Le fichier n existe pas." << endl;
system("PAUSE");
}
else
{
cout << "Une partie du virus vient d'etre trouver !\n" << endl;
cout << "Etape 1 : Effacement de la clef du registre..." << endl;

// ici tout se qui eneleve le truc du registre 

cout << "Etape 2 : Supression du programme infecteur..." << endl;

// ici se qui suprime c:\\windows\\Avserve2.exe

cout << "Etape 3 : Redemmarage foncé de windows pour terminer la desinfection." << endl;

// ici un genre de system("shutdown...";

system("PAUSE");
}

return 0;

}

Donc si vous pouviez m'aider à completer ce code, sa me servirais bien !
Tant pour créere ensuite d'autre patch, tant que pour comprend.
Merci d'avance.

13 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 mai 2004 à 17:41
Utilise RegOpenKeyEx et RegDeleteValue au lieu de ton fichier reg.
fileexists ets errone, deja dit moulte fois pourquoi, utilise GetFileAttributes pour savoir si existe.
Il faudra obtenir le hprocess et terminer le processus avant de pouvoir supprimer le fichier.

ciao...
BruNews, Admin CS, MVP Visual C++
0
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
14 mai 2004 à 18:02
A d'accord, donc c'est plus complexe que ce que je penser, c'est vrai que si le virus est sur le pc, il doit être rare que ce fichier n'est pas executer.
BruNews, tu peux alors me completer un peu le code ?
Car moi la partie qui m'intrigue le plus est ; comment effacer cette valeur du registre
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 mai 2004 à 18:11
char szSASSER[] = "avserve2.exe";

BOOL DelRegSasser()
{
HKEY hKey;
BOLL bOK = 0;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, &hKey)) return 0; BOOL bOK (RegDeleteValue(hKey, szSASSER) ERROR_SUCCESS);
RegCloseKey(hKey); return bOK;
}

ciao...
BruNews, Admin CS, MVP Visual C++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 mai 2004 à 18:12
OUP, enlever 2eme declaration BOOL de bOK.

ciao...
BruNews, Admin CS, MVP Visual C++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
14 mai 2004 à 23:29
Merci BruNews, mais je comprend pas, ce que c'est :/
C'est pour enlever la clef verolé (je devine) mais pourqoui avoir employer le fichier infecteur ?
0
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
14 mai 2004 à 23:33
Je vien de comprendre excuse moi, là je vais chercher sur cppfrance, un moyen de stoper ce prosesuce, sans vraiment savoir son nom, mais je pense que on commecant l'adrese du fichier qui à lancer le prossesuse sa doit passer :)
0
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
15 mai 2004 à 00:24
J'ai un soucis, en regardant plusieurs source pour arreter un processus, il faut utiliser la lib :
#include <tlhelp32.h>
Je dev sous windows xp avec Dev Cpp 4.
Il yatil une alternative pour stoper un processus juste avec :
ShellExit("avserve2.exe");
?
Merci d'avance.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 mai 2004 à 00:32
ShellExit, jamais entendu parler.
Faut bien entendu faire une enum des processus pour SI et ou il est charge. Si tu ne prends pas en charge les winbebes, on peut se passer de tlhelp32 et sera plus rapide, j'ai fait exemple avec API native mais je crains que tu ne trouves cela un peu complique.

ciao...
BruNews, Admin CS, MVP Visual C++
0
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
15 mai 2004 à 01:02
C'est pas vraiment mon langage ça, moi je suis plutot abstrait mdr
donc voila un peu se que j'ai fait :
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, PSTR, int)
{
  HANDLE hfl = CreateFile("c:\\windows\\Avserve2.exe", GENERIC_READ, 0, NULL,
                       OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);
  if(hfl != INVALID_HANDLE_VALUE) {

    CloseHandle(hfl);
    cout << "Le fichier infecteur vient d'etre detecter !\n\n" << endl;
     cout << "Tapez (s) pour continuer la desinfection\n" << endl;
     cout << "Tapez (e) pour sortir du programme\n" << endl;
      char choix1;
     cin >> choix1;
     if (choix1 == 's')
     {
      cout << "Suite de la desinfection...\n" << endl;
      system("PAUSE");
     }
     if (choix1 == 'e')
     {
       return -1;
      }
      else
      {
        cout << "Choix incorrect\nFermeture du programme" << endl;
      system("PAUSE");
               return -1;
         }
    

system("PAUSE");
  }
  return 0;
}

Donc ma politique :
- Stoper le processus
- Effacer le fichier infecteur
- Effacer la clef du registre
- Faire reboot par le simple system("shutdown...");
Donc BruNews peut-tu me "completer" un peu tout ça, car frachement sa m'interrese de faire mon propre patch mais le prossesus je n'arrive pas à la clore car j"ai pas la lib qu'il faut :/
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 mai 2004 à 01:10
nenni, jamais de prog complet tout fait.
Sinon sur commande et devis.
Je fais des exemples un peu de tout mais je laisse tout de meme recoller les morceaux aux interesses.

ciao...
BruNews, Admin CS, MVP Visual C++
0
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
15 mai 2004 à 01:14
Tout à fait raison, je prend entierment se que tu fait :)
Bon le seul probléme c'est que je comprend rien à:

"Faut bien entendu faire une enum des processus pour SI et ou il est charge. Si tu ne prends pas en charge les winbebes, on peut se passer de tlhelp32 et sera plus rapide, j'ai fait exemple avec API native mais je crains que tu ne trouves cela un peu complique."

:/
Va faloir se grater la tête un bon moment ...
En tout cas, grand merci BruNews.
0
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
15 mai 2004 à 01:34
Pourait-tu juste m'aider à injecter ton code :

char szSASSER[] = "avserve2.exe";

BOOL DelRegSasser()
{
HKEY hKey;
BOLL bOK = 0;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS, &hKey)) return 0;bOK (RegDeleteValue(hKey, szSASSER) ERROR_SUCCESS);
RegCloseKey(hKey); return bOK;
}


au niveau de :
cout << "Suite de la desinfection...\n" << endl;


svp
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 mai 2004 à 01:40
Fais donc un prog en mode GUI, no console.
Debute en WinMain et pas besoin de fenetre pour un patch, doit s'executer en quelques centiemes de seconde.
Une messagebox a la fin suffira. Si tu fais ainsi tu n'a rien a modifier a ce que je t'ai passe.

ciao...
BruNews, Admin CS, MVP Visual C++
0
Rejoignez-nous