[VBS] supprimmer un fichier sans connaitre son emplacement exact [Résolu]

cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 8 juin 2009 à 14:20 - Dernière réponse : cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention
- 10 juin 2009 à 12:08
Bonjour à tous, j'espère ue je suis au bon endroit pour poser cette question.

j'aimerai savoir s'il est possible en avec un script vbs de supprimmer un fichier sur le disque dur sans connaitre son emplacement exact sur le disque.

Je m'explique, j'ai un fichier nommé "MechantVirus.exe" logé quelquepart sur le disque dur, mais je ne sais pas où exactement.

est-il possible de développer un petit script supprimant ce "MechantVirus.exe" peu importe son emplacement sur le disque?

Merci d'avance à ceux qui m'aideront



http://pc-system.fr
Afficher la suite 

Votre réponse

18 réponses

Meilleure réponse
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 9 juin 2009 à 21:19
3
Merci
Re,

Bon j'ai eu 5 minutes pour me pencher sur ton code, je t'ai pondu un script qui log, mais il comporte pas mal d'inconvénients que je te décris plus bas.

Voila le script :

'SCRIPT VBS SUPRESSION DE FICHIERS PAR APPEL RECURSIF
'
Dim LogFile
LogFile = "Cleaner.log"
'
Dim FSO
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
'
WriteLog "**** Suppression des fichiers ****" 
'
If FSO.FileExists(LogFile) then FSO.DeleteFile (LogFile)
'
For Each Drive In FSO.Drives
   '
   If Drive.IsReady Then
       '
       ' Ajouter ici les noms de fichiers à supprimer
       ' Model = KillFile Drive.DriveLetter & ":", "Virus.exe"
       '
       WriteLog "**** Lecteur: " &  Drive.DriveLetter & ": ****"
       KillFile Drive.DriveLetter & ":", "Virus.txt"
       KillFile Drive.DriveLetter & ":", "Text.txt"
       '
   End if



   '
Next



   ' demande de confirmation pour l'ouverture du journal.
   '
   Reponse = MsgBox ("Opération terminée, voulez vous ouvir le journal des événements ?", vbExclamation + vbYesNo, "Journal")
   '
If Reponse = vbYes Then
   set sh = createobject("wscript.shell" )
   sh.Run LogFile, 1, true
End If
'
Set FSO = Nothing
Sub KillFile (Directory, FileName)
    ' 
    Set rep=FSO.GetFolder(Directory)
    Set Files = rep.Files
    '
    For Each File In Files
       If FSO.GetFileName(File.Path) = FileName then   
          '         
          ' Tente la suppression du fichier
          Dim Fn
          FN = File.Path
          File.Delete (True)



          If err.number = 0 Then
             writeLog "Supprimé : " & FN     
          Else
             WriteLog "Erreur de suppression : " & FN
          End If
          '
       End If
       '
    Next
    '
    For each subFolder in rep.SubFolders
       KillFile subFolder, FileName
    Next
    '
End Sub
'
Sub WriteLog(Text)
   Set LogF = FSO.OpenTextFile(LogFile, 8, True)
   LogF.writeLine Text
   Set LogF = Nothing
End Sub



Donc, les lignes en rouge restent à modifier, tu peux en ajouter autant que tu veux, mais le problème c'est que le script effectue un scan complet de l'ordinateur par fichier, ce qui multiplie le temps d'execution par x Fichiers. La ligne en vert représente le chemin du log (dans le répertoire ou se trouve le script par défaut).

Le script n'est pas optimisé et très gourmand en ressources. Je te conseil donc d'en comprendre le fonctionnement pour le mettre à jour et ta sauce...

En ce qui concerne ton logiciel, je te conseil aussi le langage vb.Net, avec vb 2008 Express Edition qui est gratuit, c'est un langage simple, performant et stable avec beaucoup de possibilités et il est managé, et integre des fonctions de gestion du system de fichiers windows native et via le Framework.

En ce qui concerne les bases de données, vb les gère sous plusieur formes SQL, Access, Xml etc... De plus, graphiquement c'est propre et simple à mettre en place.

Tu serrais surement surppris par la facilité à mettre en place un utilitaire comme le tiens en vb.Net (quelque heures de travail pour quelqu'un qui maîtrise).


Voila, tien moi au courrant de l'évolution de ton projet au besoin si tu décide de passer au .Net je serais la pour te donner un coup de main (MP ou Forum).

Cordialement Mayzz.





                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <

Merci Mayzz 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de Mayzz
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 8 juin 2009 à 14:25
0
Merci
Bonjour,

je ne suis pas un exepert du vbs, mais il faut soit parcourir les disques et supprimer tout les fichiers dont le nom est "MechantVirus.exe", soit tu as le Hash ou CRC du fichier et la tu fais le tri dans la liste, pour ce qui est de l'implémentation du Hash/CRC... Aucune idée, je ne peux même pas te dire si c'est faisable en vbs... Par contre en postant une autre question sur le sujet quelqu'un te répondra certainement.

Mayzz.
                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
Commenter la réponse de Mayzz
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 8 juin 2009 à 14:30
0
Merci
Bonjour, merci pour ta réponse rapide, en fait, le script me servirait à supprimmer plusieurs dizaines de fichiers, mais la plupart a une taille variable, il n'y a que le nom qui est le même d'un pc à l'autre, donc impossible de travailler une un hash/CRC du fichier

j'aurai besoin d'un exemple ( si c'est réalisable) de ligne de coses pour supprimmer un fichier, ensuite j'adapterai le code a ma base de données . merci d'avance


http://pc-system.fr
Commenter la réponse de cs_zatox
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 8 juin 2009 à 14:43
0
Merci
Ce doit être un truc du genre :

Function KillFile(Directory, FileName)

Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
Set rep=FSO.GetFolder(Directory)

Set Files = rep.Files

For Each File In Files
    If FSO.GetName(File.Path) = FileName then File.Delete
Next
 
For each subFolder in rep.SubFolders 
   KillFile(subFolder)
Next

End function

à appeler comme suit : Function KillFile ("c:", "MechantVirus.exe")

Voila @+

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
Commenter la réponse de Mayzz
bigfish_le vrai 1839 Messages postés vendredi 13 mai 2005Date d'inscription 20 novembre 2013 Dernière intervention - 8 juin 2009 à 14:51
0
Merci
Salut,

il est courant en vbs de mixer avec MsDos pour ce genre de chose.
je te propose un batch que j'ai ecrit il y a quelque temps deja et qui permet de recherché toute les occurences d'un  fichier:

Explication du fonctionnement:

il est possible d'utiliser le joker(*) dans le nom du fichier recherché pour remplacer 0 ou plusieurs caracteres. Avec cette nouvelle version
l'utilisation du joker en plus le l'option /a permettra par exemple de retrouver touts les fichier text d'un repertoire.

par exemple en supposant que le batch se nome recherche.bat

recherche /a *.txt c:\windows "/d:c:\temp\resultat recherche.txt"

le code batch:

@echo off
rem -----------------------------------------------
rem commande batch search
rem cree par Bigfish alias Philippe E
rem le 08-08-08
rem mis a jour le 18-11-08
rem -----------------------------------------------

rem initialisation des variables
setmyfilepath=
setmultiresult=false
setcompteur=0
setdestination=
setin=
setnosearchpath=false

rem on verifi qu'un parametre a ete specifie
rem le signe ~ supprime les double-quotes du parametre
ifnot "%~1"=="" gotostart

rem si pas de parametre
gotoerror

:start
rem on recupere les parametres
if "%~1"=="/" gotoerror
if /i "%~1"=="/?" gotohelp
if /i "%~1"=="/a" (
    setmultiresult=true
    setmyfile=%~2
   
    rem y a t'il un 3ieme parametre ?
    if "%~3"=="" gotoinitin

    rem si un chemin a ete specifie
    setin=%~3

    call :parametre %3 %4
    gotonext
)else(
    setmyfile=%~1

    rem y a t'il un 2ieme parametre ?
    if "%~2"=="" gotoinitin

    rem le 2ieme parametre est-il le chemin de recherche ?
    setin=%~2

    call :parametre %2 %3
    gotonext
)

rem si pas de chemin specifie on recupere le disque systeme
:initin
setin=%SYSTEMDRIVE%\

:next
echo.
echo Searching for file "%myfile%" in "%in%"
echo Please Wait...
echo.

rem
 ces lignes recherchent myfile dans le disque ou chemin specifie et met
le resultat dans la variable myfilepath ou dans le fichier specifié
if %multiresult%==true for /r "%in%" %%i in(*"%myfile%")docall :multiresultat "%%i"
if %multiresult%==false for /r "%in%" %%i in(*"%myfile%")dosetmyfilepath=%%i

rem on verifi que quelque chose a bien ete trouve
if %multiresult%==true (
    if %compteur%==0gotorientrouve
    if %compteur%==1echo %compteur% file found
    if %compteur% gtr1echo %compteur% files found
)else(
    if /i "%myfilepath%"=="" gotorientrouve
    if /i not "%destination%"=="" echo %myfilepath%>"%destination%"
    echo %destination%
    echo %myfilepath%  
)
echo.
gotofin

rem si aucun fichier
:rientrouve
echo no file found !
echo please check the file or the path specified
echo.
gotofin

rem si l'option /a a ete specifiee
:multiresultat
set /a compteur=compteur+1
echo %~1
if /i not "%destination%"=="" (
    if%compteur%==1(echo%~1>"%destination%")elseecho %~1>>"%destination%"
)
gotofin

:parametre
setbob=%~1
setbob=%bob:~0,3%
if /i "%bob%"=="/d:" (
    setnosearchpath=true
    setin=%SYSTEMDRIVE%\
)else(
    setnosearchpath=false
)
if %nosearchpath%==true call :extractdestinationpath %1
if %nosearchpath%==false call :extractdestinationpath %2
gotofin

rem extraction du chemin de destination
:extractdestinationpath
if "%~1"=="" gotofin
setdestination=%~1
setdestination=%destination:~3%
gotofin

:help
setNomCommande=%~n0
echo%NomCommande% file
echo.
echo%NomCommande%/?/A filename [drive:][path]/D:destination
echo%NomCommande%/?/A "filename" ["drive:path"]["/D:destination"]
echo.
echo     /A           Returns all the files found. If omitted, only the
echo                  last one found will be returned
echo     filename     Specifies the file to search
echo     drive:       Optional if no path specified
echo.
echo     Note that if no drive and path have been specified,
echo     the research will be done in the system drive
echo.
echo     /D:          Destination switch
echo     destination  Specifies the location and name of the file in where the
echo                  results will be written.
echo.
echo     You can use a quoted string in order to specify a file name
echo     or path that contains space:
echo.
echo     %NomCommande% "My file.txt" "c:\program files" "/D:c:\My folder\Result file.txt"
echo.
echo     You can also use the asterisk(*) as a substitute for zero or more
echo     characters.
echo.
echo     %NomCommande% /A My*file*.txt "/D:c:\My folder\Result file.txt"
gotofin

:error
echo The syntax of the command is incorrect.
echo.
gotohelp

:fin
rem pause

rem @33ddI7IHd

Vous pouvez retrouver ce code ici

A+
Commenter la réponse de bigfish_le vrai
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 8 juin 2009 à 16:05
0
Merci
Merci à tous les deux, Bigfish, en batch je sais faire, et c'est justement pour éviter de'avoir recours à du batch que je je voudrai le faire en vbs, (en fait j'ai développé un tool de nettoyage en batch que j'essaye de transcrire en VBS) pour des raisons de facilité d'utilisation pour les utilisateurs.


Mayzz je teste ton script et je te tiens au courant ;)
Commenter la réponse de cs_zatox
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 8 juin 2009 à 16:18
0
Merci
bon je viens de tester, regardes, j'ai modifié comme tu l'a expliqué


Function KillFile ("C:", "VEGAVEGAVEGA.txt")

Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
Set rep=FSO.GetFolder(Directory)

Set Files = rep.Files

For Each File In Files
If FSO.GetName(File.Path) = FileName then File.Delete
Next

For each subFolder in rep.SubFolders
KillFile(subFolder)
Next

End function


mais celà ne semble pas fonctionner, j'ai ce message




ligne 1

caract 20

identificateur attendu

http://pc-system.fr
Commenter la réponse de cs_zatox
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 8 juin 2009 à 16:20
0
Merci
désolé pour la mise en page, mais si on doit commencer à écrire tous nos messages en HTML sur ce forum...
Commenter la réponse de cs_zatox
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 8 juin 2009 à 20:15
0
Merci
Re,

Bon du coup j'ai testé le script, il y avais deux ou trois erreurs que j'ai corrigé (dont l'appel à la fonction) et tout cela fonctionne.

KillFile "d:\Mayzz\Desktop","test.txt"


Function KillFile (Directory, FileName)
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
Set rep=FSO.GetFolder(Directory)
Set Files = rep.Files
For Each File In Files
If FSO.GetFileName(File.Path) = FileName then File.Delete
Next
For each subFolder in rep.SubFolders
KillFile subFolder, FileName
Next
End function

Ne change que l'appel à la focntion (la ligne en bleu)

@+





                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
Commenter la réponse de Mayzz
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 9 juin 2009 à 10:25
0
Merci
Merci beaucoup Mayzz


J'ai testé, et celà fonctionne à merveille.Meme si on doit connaitre le nom du repertoire, mais ce n'est pas grave pour l'instant


Je vais encore avoir besoin de ton aide,Comment modifier ce script pour supprimmer un deuxième fichier? j'ai essayé en dupliquant la ligne en bleu, mais celà ne fonctionne pas, j'ai aussi essayé en duplicant 2 fois tout le code en changeant juste le nom du fichier, masi celà ne fonctionne pas non plus


ensuite, comment faire pour afficher le nom et le repertoire des fichiers supprimmés dans un fichier texte.

Un grand merci à toi Mayzz





http://pc-system.fr
Commenter la réponse de cs_zatox
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 9 juin 2009 à 15:00
0
Merci
Salut

Bien, alors pour te donner un coup de main, je vais avoir besoin de quelques précisions sur ton projet si tu permet ?

Ce que je vousdrais savoir en faite, c'est si ce petit script va te servir pour faire par exemple des plugins d'antivirus ou autres truc du genre, c'est à dire, que tu vas saisir manuellement les scripts uns  à uns via le bloc note et faire des patchs pour tel et tel virus/malware. Ou bien si tu possede un programme qui va automatiquement générer ton fichier en se servant des fonctions d'I/O via le code que je t'ai fournis ?

En fait il y a plusieurs possibilités de modifications pour le script, mais cela dépendra de ta réponse. Pour ce qui est des fichiers supprimer, en vbs il n'y a pas de 'formulaire' ou d'écran/console (comme dans un batch) donc deux choix sont possibles. Le premier consiste à afficher un MsgBox (une boîte de dialogue modale avec un bouton ok et une icone d'information) avec le listing des fichiers, cependant cette solution est plus approprié lors ce que le nombre de fichiers est connu et peu important, la deuxième est de créer un fichier log dans lequel on enregistre ligne par ligne les fichiers trouvés et supprimés (il serait même possible de marquer le résultat de la suppression je pense), puis de lancer une instance du programme associé à l'extention de fichier (en l'occurence *.log ou *.txt, ce qui veut dire notepad ou wordpad mais cela dépend le la machine cliente...).

Pour ce qui est des répertoires il  y a aussi une possibilité de scanner tout les disques si c'est ce que tu recherche à faire.

Autre chose, si cela concerne toujours la sécurité informatique (en rapport à ton site), je répète que je ne suis pas un mordu de vbs (mon truc c'est le .Net et anciennement le vb6), mais il y a la possibilité de lecture/écriture dans le registre Windows, ce qui est primordiale pour une désinfection. 

Voila. J'attend plus de précisions de ta part.

@+ Mayzz
                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
Commenter la réponse de Mayzz
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 9 juin 2009 à 15:38
0
Merci
http://pc-system.fr

salut,encore un grand merci à toi, en fait, comme tu l'a remarqué, mon projet a en effet un rapport avec la sécurité informatique.



Comme tu a l'air de t'y connaitre un peu en la matière, tu dois savoir que chaque type d'infection se traite d'une manière différente, et que les antivirus ne suffisent pas toujours à éradiquer une ifection.


Je suis "helper" sur différents forums d'entraide informatique, et j'aide les gens a désinfectr leurs Ordinateurs.
Pour celà, j'utilise une multitude de petits fix en tout genre, qui s'entassent sur le PC des personnes que j'ai aidé à la fin de la désinfection.



étant donné que je ne suis pas le seul à utiliser ces nombreux fix, J'ai développé un programme (ToolsCleaner) tu peux le télécharger ici pour y jetter un oeil http://pc-system.fr/TC/ToolsCleaner2.exe

Ce programme sert à supprimmer toutes les traces de ces fix antivirus, qui, utilisés sans un minimum de précautions peuvent entrainner de graves dégats.



Il est actuellement codé en Delphi, mais je suis confronté a de légers beug de type buffer overflow, et autres erreurs de suppressions.


C'est pourquoi J'aimerai le réécrire en VBS certes moins puissant mais plus stable, dumoins la partie recherche/suppression, mais pour celà j'aurai besoin d'un coup de main car je suis débutant dans ce langage et j'explore plusieurs possibilités avant de trouver le langage définitif de réécriture de ceprogramme.

j'ai déja testé le batch, mais c'est pas franchement glorieux, C++ aussi mais c'est plutot lent, alors je me suis dit pourquoi pas en vbs...



Donc tu l'aura compris, il s'agit d'une base de donnée interne, et l'idée du fichier log me parait très apppropriée pour suivre les actions du programme.

Merci à toi
Commenter la réponse de cs_zatox
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 9 juin 2009 à 16:13
0
Merci
Pas de quoi  

Mais en fait tu n'as pas réelement répondu à ma question ^^

Ce que je voulais savoir, c'est si ton programme en Delphi, va lui même écrire les scripts en fonction de ce que tu rentreras (dans ta base de données) ou si tu vas écrire tou les vbs à la main et les spécifer ds ta base (genre "Malware.A", "Malware.A.vbs") et que ton programme lancera juste le script ?

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
Commenter la réponse de Mayzz
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 9 juin 2009 à 16:24
0
Merci
oups désolé pour l'oubli, non je vais coder tous les vbs a la main et pour les lancer je les appellerai depuis le programme
Commenter la réponse de cs_zatox
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 10 juin 2009 à 11:31
0
Merci
Ouah, un grand merci pour le temps que tu passes à m'aider, c'est parfait, je ne pense pas passer au .net tout de suite, mais j'y songerai certainement,quand le moment sera venu je te ferai signe .

Merci encore, cordialement Zatox
Commenter la réponse de cs_zatox
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 10 juin 2009 à 11:32
0
Merci
PS: c'est tout à fait ce que je voulais, ce script est parfait, je vais essayer de l'optimise tout seul ;)
Commenter la réponse de cs_zatox
Mayzz 2859 Messages postés mardi 15 avril 2003Date d'inscription 26 novembre 2013 Dernière intervention - 10 juin 2009 à 11:51
0
Merci
J'ai pas vraiment eu le temps mais...
 
Pour l'optimistation du script voila mes conseils :

  - Mettre les fichier dans un tableau et faire une boucle durant le scan, pour éviter d'avoir 36000 scan (1 par fichier actuellement)

  - Mettre une instruction de pause durant les boucles (DoEvents en vb6, en vbs ... ?)

  - Mettre un gestion des erreurs plus complète en cas d'impossibilité d'accès à un priphérique (Drive.IsReady) ne suffit pas il peut y avoir des problème d'acces autres (doits) ce qui provoque une erreur et stop le scan.

  - Enfin ajouter la gestion des clés/valeurs de registre (certain fix les modifient à tort).

  - Possiblité de marquage des fichiers en cours d'utilisation pour une supression au démarrage :
     En admettant que ce n'est que des restes de Fix, il ne possederons pas de clés de registre leurs permettant de booter au démarrage de windows, du coup, il faut faire en sorte que le script en crée un autre (inscrit dans le runonce) qui aura pour objectif de supprimer ces fichiers au prochain démarrage de la machine.

Voila @+ et bon dev !

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
Commenter la réponse de Mayzz
cs_zatox 79 Messages postés lundi 5 novembre 2007Date d'inscription 24 octobre 2017 Dernière intervention - 10 juin 2009 à 12:08
0
Merci
merci pour tous ces conseils, c'est noté A+ et bon surf
Commenter la réponse de cs_zatox

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.