[VBScript] [RESOLU] Checksum, vérifier l'intégrité d'un fichier vbs

Checksum, vérifier l'intégrité d'un fichier vbs [VBScript] [RESOLU] - VB/VBA/VBS - Programmation

Marsh Posté le 14-02-2006 à 13:02:06    

Bonjour,
 
je voudrais être capable de tester un fichier vbs avant de l'éxécuter grace a un checksum, pour voir s'il n'a pas été modifié et que je n'éxécute pas une version vérollée.
 
 
merci d'avance !
 
 
j'ai trouvé un petit utilitaire
 
md5sums.exe

Message cité 1 fois
Message édité par anthony0000 le 21-02-2006 à 12:56:52
Reply

Marsh Posté le 14-02-2006 à 13:02:06   

Reply

Marsh Posté le 14-02-2006 à 14:33:47    

Et tu veux le tester via un autre fichier VBS... que tu devras aussi contrôler ?

Reply

Marsh Posté le 14-02-2006 à 15:18:56    

non, l'autre fichier vbs sera en lecture seule.
enfin je ne sais pas trop comment m'y prendre mais c'est un script qui sera lancé en tant qu'admin, donc je dois etre sur qu'il n'aura pas été modifié avant. je prefere la solution la + simple.
j'avais commencé a comparer la taille du fichier par rapport a un autre fichier (le meme mais copié ailleurs) mais c'est pas suffisemment sécurisé.
 

Reply

Marsh Posté le 14-02-2006 à 16:47:22    

Voici le code permettant de faire un CRC32 sur une chaine (y compris un fichier pas trop volumineux)
 

' déclaration
Dim Crc32Table(255) As Long
 
' code
Public Function CRC32(sTexte As String) As String
    ' calcul de CRC (Cyclic Redundancy Checking)) sur 4 octets
    Dim lCrc32Value As Long
    On Error Resume Next
    lCrc32Value = CRC32_Init()
    lCrc32Value = CRC32_Ajout(sTexte, lCrc32Value)
    CRC32 = Hex$(lCrc32Value Xor &HFFFFFFFF)
End Function
Private Function CRC32_Init(Optional ByVal Seed As Long = &HEDB88320, Optional ByVal Precondition As Long = &HFFFFFFFF) As Long
    '// Declare counter variable iBytes, counter variable iBits, value variables lCrc32 and lTempCrc32
    Dim iBytes As Integer, iBits As Integer, lCRC32 As Long, lTempCrc32 As Long
    '// Turn on error trapping
    On Error Resume Next
     
    '// Iterate 256 times
    For iBytes = 0 To 255
        '// Initiate lCrc32 to counter variable
        lCRC32 = iBytes
        '// Now iterate through each bit in counter byte
 
 
        For iBits = 0 To 7
            '// Right shift unsigned long 1 bit
            lTempCrc32 = lCRC32 And &HFFFFFFFE
            lTempCrc32 = lTempCrc32 \ &H2
            lTempCrc32 = lTempCrc32 And &H7FFFFFFF
             
            '// Now check if temporary is less than zero and then mix Crc32 checksum with Seed value
            If (lCRC32 And &H1) <> 0 Then
                lCRC32 = lTempCrc32 Xor Seed
            Else
                lCRC32 = lTempCrc32
            End If
        Next
        '// Put Crc32 checksum value in the holding array
        Crc32Table(iBytes) = lCRC32
    Next
     
    '// After this is done, set function value to the precondition value
    CRC32_Init = Precondition
     
End Function
Private Function CRC32_Ajout(ByVal sTexte As String, ByVal lCRC32 As Long) As Long
    Dim bCharValue As Byte, iCpt As Integer, lIndex As Long
    Dim lAccValue As Long, lTableValue As Long
    On Error Resume Next
 
    For iCpt = 1 To Len(sTexte)
        bCharValue = Asc(Mid$(sTexte, iCpt, 1))
        ' Right shift an Unsigned Long 8 bits
        lAccValue = lCRC32 And &HFFFFFF00
        lAccValue = lAccValue \ &H100
        lAccValue = lAccValue And &HFFFFFF
        ' Now select the right adding value from the holding table
        lIndex = lCRC32 And &HFF
        lIndex = lIndex Xor bCharValue
        lTableValue = Crc32Table(lIndex)
        ' Then mix new Crc32 value with previous accumulated Crc32 value
        lCRC32 = lAccValue Xor lTableValue
    Next
    ' Set function value the new Crc32 checksum
    CRC32_Ajout = lCRC32
End Function


 
Je n'ai pas vérifié en détails si toutes les déclarations sont là
Si tu recontres un problème, n'hésite pas à demander
 
Il n'empêche, il va te falloir stocker ton CRC32 quelquepart pour procéder à une vérification ultérieure. Ou alors ton prog en lecture seule contiendra en dur le CRC32 qu'il doit trouver


Message édité par tegu le 14-02-2006 à 16:49:34
Reply

Marsh Posté le 15-02-2006 à 10:59:39    

je pense que je mettrais en dur le crc, enfin ça dépend de comment ça marche exactement, la je n'ai pas réussi, il bloque dès la 1ere ligne, a cause de "as long".

Reply

Marsh Posté le 15-02-2006 à 11:43:09    

La première ligne doit aller dans la partie Déclaration de ton module.
Si tu copies/colles tout ça à la suite au milieu de tes fonctions, c'est sûr que ça peut faire la gueule

Reply

Marsh Posté le 15-02-2006 à 14:38:25    

je pense que je comprendrais mieux avec un exemple.
j'avoue ne pas savoir comment l'integrer.
 
je te donne le code d'un des petits scripts sur lequel je voudrais par exemple tester le crc.
 
(c'est le code pour ecrire dans un fichier qu'on m'a donné justement sur ce forum)
 
 
Const forAppending = 8, forwriting = 2  
Const ModeAscii = 0, ModeUnicode = -1  
Set objFSO = CreateObject("Scripting.FileSystemObject" )  
Set fso = CreateObject("Scripting.FileSystemObject" )  
'On Error Resume Next  
   
datejour = Date  
datejour = Replace(datejour,"/", "-" )  
' fichierLOG = "d:\Scripts\_FINI\ISA\ErreurEnvoiMail.Log"  
fichierLOG = "writedate1ascii.Log"  
   
If Not objFSO.FileExists(fichierLOG) Then  
 Set File = fso.CreateTextFile(fichierLOG, forWriting, ModeAscii)  
 File.WriteLine "Le rapport du " & datejour & " n'a pu être envoyé."  
 File.Close  
Else  
 set File = fso.OpenTextFile(fichierLOG, forAppending, True, ModeAscii)  
 file.WriteLine "Le rapport du " & datejour & " n'a pu être envoyé."  
 file.Close  
End If  

Reply

Marsh Posté le 16-02-2006 à 09:43:05    

Attends, si je te précise que mon code est du VB6 et pas du VBS, peut-être que ça t'aidera. Il y a peut-être des conversions à faire pour les types. Je suis pas spécialiste VBS.
 
L'objectif est de lire le contenu d'un fichier et de placer ce contenu dans une variable de type chaine. Tu passes cette variable en paramètre de la fonction CRC32 et le tour est joué.


Message édité par tegu le 16-02-2006 à 09:43:26
Reply

Marsh Posté le 16-02-2006 à 11:00:13    

d'accord, je vois la marche a suivre, mais je ne vois pas comment convertir tout ça, c'est le seul probleme qui reste.
je te remercie quand même pour ton code, je vais voir ce que je peux faire :)

Reply

Marsh Posté le 16-02-2006 à 16:21:53    

anthony0000 a écrit :

Bonjour,
 
je voudrais être capable de tester un fichier vbs avant de l'éxécuter grace a un checksum, pour voir s'il n'a pas été modifié et que je n'éxécute pas une version vérollée.
 
 
merci d'avance !


 
Salut!
 
Tu va peut être me trouver nul mais bon tanpis : c'est quoi exactement un checksum et quand tu parles de version verollée, qu'est ce que tu veux dire exactement?et encore un petit soucis : CRC32 qu'est ce que c'est ?
 
Merci d'avance


Message édité par Sboubinette62 le 16-02-2006 à 16:22:50
Reply

Marsh Posté le 16-02-2006 à 16:21:53   

Reply

Marsh Posté le 17-02-2006 à 09:49:34    

je voudrais vérifier que le fichier vbs que je vais lancer n'a pas été modifié (si c'est le cas ça pourrait faire bcp de mal), donc je veux tester son intégrité, mais je ne sais pas trop comment ça marche.
 
pour moi, j'ai un fichier de base qui ne peut pas etre modifié, sauf par un admin, de l'autre coté, j'ai le vbs qui s'execute (qui ne s'execute donc pas en admin du domaine) qui vas lire les info sur mon 1er fichier qu'il ne peut pas modifier (donc le checksum reste le vrai) et si c'est bon, execute la suite du script (qui le connect ensuite en admin et effectue diverse operations)
 
a l'origine du probleme : supprimer un fichier en local, j'utilise la bibliotheque WMI mais meme avec l'admin local il a besoin de se connecter je sais pas ou et pourquoi (par rapport a wmi) et seul un admin du domaine peut executer ce script correctement.
 
j'ai encore peu de connaissance en wmi et je ne comprend pas vraiment comment ça marche.

Reply

Marsh Posté le 17-02-2006 à 10:46:03    

tu peux utiliser la signature de script, voici un lien avec quelques exemples pour t'aider sur le sujet :
 
http://www.activexperts.com/activm [...] /security/


---------------
Envie de scripting ? Lisez donc "Scripting Windows" aux Editions Eyrolles ! tout pour apprendre le scripting orienté infrastructure Microsoft, en français dans les textes et exemples.  http://www.eyrolles.com/Informatiq [...] 212116922/
Reply

Marsh Posté le 17-02-2006 à 10:53:57    

merci encore pour ta réponse ,
j'ai compris comment ça peut fonctionner, mais la où je bloque c'est au niveau des certificats:
 
 
"Requires a valid digital certificate."
 
 
le pb, c'est que j'ai aucune idée de comment utiliser de certicats avec des scripts

Reply

Marsh Posté le 17-02-2006 à 13:18:00    

Pour Sboubinette62, quelques explications sur le CRC (32 parce que l'implémentation proposée renvoit une valeur sur 32 bits) :
http://fr.wikipedia.org/wiki/Contr [...] e_cyclique

Reply

Marsh Posté le 17-02-2006 à 14:28:27    

je vais faire de la mauvaise pub de bas étage, mais j'ai fait tout un chapitre dans mon bouquin sur la gestion des certificats avec des vbs :D  
 
pour être plus productif et constructif, il faudrait que je reregarde ça pour te donner la réponse, je n'ai plus en tête la méthode exacte.  
 


---------------
Envie de scripting ? Lisez donc "Scripting Windows" aux Editions Eyrolles ! tout pour apprendre le scripting orienté infrastructure Microsoft, en français dans les textes et exemples.  http://www.eyrolles.com/Informatiq [...] 212116922/
Reply

Marsh Posté le 17-02-2006 à 14:48:34    

d'accord !
 
en tout cas merci pour ton aide ^_^

Reply

Marsh Posté le 20-02-2006 à 12:59:58    

j'ai encore une petite question :
 
je ne vois toujours pas comment utiliser ce script si je veux faire un checksum sur un vbs.
 
est que je dois intégrer ce code dans mon script ?
est ce que dans le code je peux indiquer le fichier a "checker" ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed