[R] Information sur l'Antivirus

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
cbourdu57
Niveau 2
Niveau 2
Messages : 27
Enregistré le : mer. 24 avr. 2013 16:34
Status : Hors ligne

[R] Information sur l'Antivirus

#1

Message par cbourdu57 »

Bonjour,

J'aurai besoin d'une petite aide j'ai un script qui me permet de savoir si j'ai un antivirus activé sur l'ordi et son nom

Voici mon code

Code : Tout sélectionner

Local $avname
Global $state

If @OSVersion = "WIN_XP" Then
    $oWMI = ObjGet("winmgmts:\\localhost\root\SecurityCenter")
    $colItems = $oWMI.ExecQuery("Select * from AntiVirusProduct")

    For $objAntiVirusProduct In $colItems
        $state = $objAntiVirusProduct.onAccessScanningEnabled
    Next

    if $state = True Then
        MsgBox(0,"Info","AV activé")
    Else
        MsgBox(0,"Info","AV désactivé")
    EndIf
Else
    $oWMI = ObjGet("winmgmts:\\localhost\root\SecurityCenter2")
    $colItems = $oWMI.ExecQuery("Select * from AntiVirusProduct")
    For $objAntiVirusProduct In $colItems
        $state = $objAntiVirusProduct.productstate
    Next
    Dim $AvStatus = Hex($state)
    If StringMid($AvStatus, 5, 2) = "10" Or StringMid($AvStatus, 5, 2) = "11" Then
        MsgBox(0, "Info", "AV activé")
    ElseIf StringMid($AvStatus, 5, 2) = "00" Or StringMid($AvStatus, 5, 2) = "01" Then
        MsgBox(0, "Info", "AV désactivé")
    EndIf
EndIf

  For $objAntiVirusProduct In $colItems
        $avname = $objAntiVirusProduct.displayName
  Next
If $avname = False Then
  MsgBox(0,"","Pas d'antivirus installé")
Else
  MsgBox(0,"",$avname)
EndIf

 
Le code là fonctionne super bien mais je voudrais savoir également (en sachant qu'il faut que ça marche pour tout OS)
1) comment savoir s'il est a jour ou pas ?
2 ) faire le meme processus pour l'antispyware et le pare feu ... (si possible)

Si ça peut vous aider j'ai le script en vbs mais que pour les versions après Windows XP

Code : Tout sélectionner

Const ForAppending = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objLogFile = objFSO.OpenTextFile("Report.txt", ForAppending, True)
Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\SecurityCenter2")
     For Each obj in oWMI.ExecQuery("Select * from AntiVirusProduct")
     If InStr(2, Hex(obj.productState), "1", 0) = 2 Then enabled = " [Enabled" Else enabled = " [Disabled"
     If InStr(4, Hex(obj.productState), "0", 0) = 4 Then updated = "|Updated] " Else updated = "|Outdated] "
     objLogFile.Write("AntiVirus: " _
         & obj.displayName _
         & Enabled _
         & Updated _
         & vbCrLf )
Next
For Each obj in oWMI.ExecQuery("Select * from AntiSpywareProduct")
     If InStr(2, Hex(obj.productState), "1", 1) = 2 Then enabled = " [Enabled" Else enabled = " [Disabled"
     If InStr(4, Hex(obj.productState), "0", 1) = 4 Then updated = "|Updated] " Else updated = "|Outdated] "
     objLogFile.Write("AntiSpyware: " _
         & obj.displayName _
         & Enabled _
         & Updated _
         & vbCrLf )
Next
For Each obj in oWMI.ExecQuery("Select * from FirewallProduct")
     If InStr(2, Hex(obj.productState), "1", 1) = 2 Then enabled = " [Enabled] " Else enabled = " [Disabled] "
     objLogFile.Write("Firewall: " _
         & obj.displayName _
         & Enabled _
         & vbCrLf )
Next
 
J'ai vraiment besoin d'une aide là... Après multiples recherches je ne trouve pas ...
Modifié en dernier par cbourdu57 le ven. 24 mai 2013 10:25, modifié 1 fois.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Information sur l'Antivirus

#2

Message par mikell »

Tu as le script vbs et l'équivalent en autoit d'une partie, traduire ce qui manque ne devrait poser aucun problème
http://www.scriptinternals.com/new/us/S ... /41010.htm
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Information sur l'Antivirus

#3

Message par jguinch »

Salut
Pour savoir si l'AV est à jour, c'est le même principe : http://neophob.com/2010/03/wmi-query-wi ... tycenter2/
Pour XP :

Code : Tout sélectionner

For $objAntiVirusProduct In $colItems
   $state = $objAntiVirusProduct.onAccessScanningEnabled
   $updatodate = $objAntiVirusProduct.productUptoDate
Next
Pour Vista et +

Code : Tout sélectionner

If StringMid($AvStatus, 7, 2) = "00" Then
    MsgBox(0, "Info", "AV a jour")
ElseIf StringMid($AvStatus, 7, 2) = "10" Then
    MsgBox(16, "Info", "AV pas a jour")
Else
    MsgBox(48, "Info", "Impossible de savoir si l'AV est a jour")
EndIf
Comme dit Mikell, tu devrais pouvoir t'en sortir pour convertir le VBS, le principe est le même (on t'aidera si tu t'en sors pas).
Par contre juste une remarque, la reqûete WMI Select * from FirewallProduct ne sortira rien pour les postes qui utilisent le firewall Windows. De plus je ne suis pas sûr que les classes AntiSpywareProduct et FirewallProduct existent sous XP et inférieur...
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Information sur l'Antivirus

#4

Message par mikell »

FirewallProduct existe sous XP mais pas en dessous, AntiSpyware non (comme l'indique mon lien ^^)
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
cbourdu57
Niveau 2
Niveau 2
Messages : 27
Enregistré le : mer. 24 avr. 2013 16:34
Status : Hors ligne

Re: [..] Information sur l'Antivirus

#5

Message par cbourdu57 »

Merci pour toute vos réponses ! :D

Mais il n'est pas possible de différencier le faite qu'il n'y est aucun parefeu et le faite que c'est celui de windows qui est activé ?

Pour le reste je vais voir tout ça je vous tient au courant :)
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Information sur l'Antivirus

#6

Message par jguinch »

Salut.
Pour le firewall, tu peux faire en 2 étapes :
1) Requête WMI pour détecter un produit de type Firewall
2) Si pas de résultat avec la requête WMI, tu peux tester si le Firewall Windows est activé :
- soit avec la commande netsh (netsh firewall show state)
- soit par la base de registre HKLM\SYSTEM\CurrentControlSet\services\SharedAccess\Parameters\FirewallPolicy\DomainProfile | PublicProfile | StandardProfile
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Information sur l'Antivirus

#7

Message par jguinch »

La valeur productState est récupérée en décimal.
Une fois convertie en hexadécimal avec la fonction Hex, tu obtiens une valeur sur 8 chiffres

266240(dec) = 0x00041000(hex) = 0x41000(hex)
D'après le lien que je t'ai donnée et les différentes infos que j'ai pu trouver, on comprend qu'il faut décomposer la chaîne pour connaître la signification de cette valeur:
Donc on a 4 groupes : 00 04 10 00
- Le premier groupe "00" ne sert à rien ici (à la position 1 sur 2 caractères)
- Le deuxième groupe "04" correspondrait aux valeurs suivantes additionnées : (à la position 3 sur 2 caractères)
typedef enum _WSC_SECURITY_PROVIDER {
WSC_SECURITY_PROVIDER_FIREWALL = 1,
WSC_SECURITY_PROVIDER_AUTOUPDATE_SETTINGS = 2,
WSC_SECURITY_PROVIDER_ANTIVIRUS = 4,
WSC_SECURITY_PROVIDER_ANTISPYWARE = 8,
WSC_SECURITY_PROVIDER_INTERNET_SETTINGS = 16,
WSC_SECURITY_PROVIDER_USER_ACCOUNT_CONTROL = 32,
WSC_SECURITY_PROVIDER_SERVICE = 64,
WSC_SECURITY_PROVIDER_NONE = 0,
}
- Pour le troisième groupe "10" (à la position 5 sur 2 caractères) c'est un peu flou.
D'après ton code, 10 et 11 voudrait dire que l'AV est activé. Pour ma part j'ai essayé de désactiver puis activer mon AV (Kaspersky) et la valeur ne change pas (toujours 0x41000)
- Pour le quatrième groupe "00" (à la position 7 sur 2 caractères), 00 voudrait dire "à jour" et "10" "too old"

Aucune documentation n'est très claire à ce sujet, vu le nombre d'interrogations sur le web.



Pour l'antispyware, on est bien d'accord que ça ne fonctionnera que pour Vista et supérieur ?
► Afficher le texte
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
cbourdu57
Niveau 2
Niveau 2
Messages : 27
Enregistré le : mer. 24 avr. 2013 16:34
Status : Hors ligne

Re: [..] Information sur l'Antivirus

#8

Message par cbourdu57 »

Code : Tout sélectionner

   If @OSVersion = "WIN_XP" Then
        $oWMI = ObjGet("winmgmts:\\localhost\root\SecurityCenter")
        $AVcolItems = $oWMI.ExecQuery("Select * from AntiVirusProduct")

        For $objAntiVirusProduct In $AVcolItems
            $AVstate = $objAntiVirusProduct.onAccessScanningEnabled
            $AVname = $objAntiVirusProduct.displayName
            $AVuptodate = $objAntiVirusProduct.productUptoDate
        Next

        if $AVstate = True Then
            $AVactif=" [ Activé"
        Else
            $AVactif=" [ Désactivé"
        EndIf

        if $AVuptodate = True Then
            $AVajour=" | A jour ]"
        Else
            $AVajour=" | Obsolète ]"
        Endif

        Dim $FWcolItems = $oWMI.ExecQuery('Select * from FirewallProduct')
        For $FWObjItem In $FWcolItems
            $FWname = $FWObjItem.displayName
            $FWstate= $FWObjItem.enabled
        Next

        if $FWstate = True Then
            $FWactif=" [ Activé ]"
        Else
            $FWactif=" [ Désactivé ]"
        EndIf



    Else ;antivirus-----------------------
        $oWMI = ObjGet("winmgmts:\\localhost\root\SecurityCenter2")
        $AVcolItems = $oWMI.ExecQuery("Select * from AntiVirusProduct")

        For $objAntiVirusProduct In $AVcolItems
            $AVstate = $objAntiVirusProduct.productState
            $AVname = $objAntiVirusProduct.displayName
        Next


        Dim $AvStatus = Hex($AVstate)
         If StringMid($AvStatus, 5, 2) = "10" Or StringMid($AvStatus, 5, 2) = "11" Then
            $AVactif="[ Activé"
          ElseIf StringMid($AvStatus, 5, 2) = "00" Or StringMid($AvStatus, 5, 2) = "01" Then
            $AVactif="[ Désactivé"
        EndIf

        If StringMid($AvStatus, 7, 2) = "00" Then
            $AVajour=" | A jour ]"
        ElseIf StringMid($AvStatus, 7, 2) = "10" Then
            $AVajour=" | Obsolète ]"
        EndIf
; parefeu-------------------------------------------

        Dim $FWcolItems = $oWMI.ExecQuery('Select * from FirewallProduct')
        For $FWObjItem In $FWcolItems
            $FWname = $FWObjItem.displayName
            $FWstate= $FWObjItem.productstate
        Next

        Dim $FWStatus = Hex($FWstate)
         If StringMid($FWStatus, 5, 2) = "10" Or StringMid($FWStatus, 5, 2) = "11" Then
            $FWactif="[ Activé ]"
          ElseIf StringMid($FWStatus, 5, 2) = "00" Or StringMid($FWStatus, 5, 2) = "01" Then
            $FWactif="[ Désactivé ]"
        EndIf

    EndIf


    If $AVname = False Then
        GUICtrlSetData($Lbl_antivirus,"Pas d'antivirus installé")
    Else
        GUICtrlSetData($Lbl_antivirus,"Antivirus : " &$AVname & $AVactif & $AVajour)
    EndIf

    If $FWname= False Then
        GUICtrlSetData($Lbl_firewall,"Pas de parefeu installé ou celui de Windows")
    Else
        GUICtrlSetData($Lbl_firewall,"Parefeu : " &$FWname & $FWactif)
    Endif
Voilà le code mais j'ai une erreur : Dim $FWStatus = Hex($FWstate) , $FWstate Variable used without being declared ...
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Information sur l'Antivirus

#9

Message par jguinch »

Si la variable $FWstate n'est pas reconnue à cet endroit, c'est qu'elle n'a pas été initialisée.
Où est-elle initialisé ? => dans la boucle For $FWObjItem In $FWcolItems.
Donc c'est que la requête Select * from FirewallProduct n'a renvoyé aucun résultat.

A moins que tu sois sûr que la requête retourne obligatoirement un seul résultat, tu devrais regrouper ces quelques lignes dans la boucle :
► Afficher le texte
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
cbourdu57
Niveau 2
Niveau 2
Messages : 27
Enregistré le : mer. 24 avr. 2013 16:34
Status : Hors ligne

Re: [..] Information sur l'Antivirus

#10

Message par cbourdu57 »

Avec ton code, maintenant le problème est en dessous :

Code : Tout sélectionner

    
If $FWname=False Then
        GUICtrlSetData($Lbl_firewall,"Pas de parefeu installé ou celui de Windows")
    Else
        GUICtrlSetData($Lbl_firewall,"Parefeu : " &$FWname & $FWactif)
    Endif
 
Error : $FWname variable used without being declared ... toujours la meme erreur mais plus bas ...
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Information sur l'Antivirus

#11

Message par jguinch »

Essaye de comprendre ce qui n'allait pas le coup d'avant, c'est le même problème.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
cbourdu57
Niveau 2
Niveau 2
Messages : 27
Enregistré le : mer. 24 avr. 2013 16:34
Status : Hors ligne

Re: [..] Information sur l'Antivirus

#12

Message par cbourdu57 »

J'ai laissé tombé le firewall, l'antivirus et le spyware fonctionne super bien :)

Par contre, avec mon code il m'affiche l'antivirus et le spyware qu'il trouve en dernier (a cause du GUICtrlSetData ...), comment faire pour qu'il me les écrive tous(Créer un label pour chacun et écrire leur nom dedans) ?

Code : Tout sélectionner

        For $objAntiVirusProduct In $AVcolItems
            $AVstate = $objAntiVirusProduct.productState
            $AVname = $objAntiVirusProduct.displayName
        Next

    If $AVname = False Then
        GUICtrlSetData($Lbl_antivirus,"Pas d'antivirus installé")
    Else
        GUICtrlSetData($Lbl_antivirus,"Antivirus : " &$AVname)
    EndIf
 
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Information sur l'Antivirus

#13

Message par jguinch »

raaaah ...
Il faut gérer ça dans la boucle qui lit le résultat de la requête, sinon forcément la valeur de $AVname sera la dernière lue.
► Afficher le texte
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
cbourdu57
Niveau 2
Niveau 2
Messages : 27
Enregistré le : mer. 24 avr. 2013 16:34
Status : Hors ligne

Re: [..] Information sur l'Antivirus

#14

Message par cbourdu57 »

Super merci :D
Répondre