euverve Posted January 15, 2009 Posted January 15, 2009 Good morning to all...I just wanted to ask for help.I wanted to perform a md5 check and delete.For example: Quote $a = "2DDE0E8E105E98527E1E55AC19C9E34B"$b = "c:\sample.exe"if filehash($ = $a then filedelete($endifI hope you help me guys...
tip Posted January 15, 2009 Posted January 15, 2009 Hi,Take a look at this http://www.autoitscript.com/forum/index.ph...=76976&st=0Cheers,Tip [center]MsgBox_Tipped: Eye candy msgboxes/inputboxes/loginboxes. | CreateBlankBox: Semi-transparent layers with borders and rounded corners.[/center]
euverve Posted January 16, 2009 Author Posted January 16, 2009 Thanks for the link, UDF credits to Ward.I have created a file md5, sha1, crc32 checker... Quote #include <ButtonConstants.au3>#include <EditConstants.au3>#include <GUIConstantsEx.au3>#include <StaticConstants.au3>#include <WindowsConstants.au3>; hashing files#include "md5.au3"#include "sha1.au3"#include "crc32.au3"Global $Filename#Region ### START Koda GUI section ### Form=C:\Documents and Settings\Thatskie\Desktop\Autoit Projects\File Hash Checker\Form1.kxf$Form1 = GUICreate("File Hash Checker 1.0 | Team Pinoy Geeks", 387, 187, -1, -1)GUISetBkColor(0xFFFBF0)$Group1 = GUICtrlCreateGroup("Browse File", 8, 8, 369, 57)$Button1 = GUICtrlCreateButton("...", 344, 32, 27, 25, 0)GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")$Label4 = GUICtrlCreateLabel("File:", 24, 38, 28, 17)GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")$Input1 = GUICtrlCreateInput("File Hash Checker By euverve, © 2009 - 2010", 72, 34, 265, 21, BitOR($ES_CENTER,$ES_AUTOHSCROLL))GUICtrlCreateGroup("", -99, -99, 1, 1)$Group2 = GUICtrlCreateGroup("Hash Results", 8, 72, 369, 105)$Label1 = GUICtrlCreateLabel("MD5:", 24, 98, 34, 17)GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")$Label2 = GUICtrlCreateLabel("SHA1:", 24, 126, 40, 17)GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")$Label3 = GUICtrlCreateLabel("CRC32:", 24, 150, 47, 17)GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")$Input2 = GUICtrlCreateInput("", 72, 96, 297, 21)$Input3 = GUICtrlCreateInput("", 72, 120, 297, 21)$Input4 = GUICtrlCreateInput("", 72, 144, 297, 21)GUICtrlCreateGroup("", -99, -99, 1, 1)GUISetState(@SW_SHOW)#EndRegion ### END Koda GUI section ###While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $Button1 $message = "Open file." $Filename = FileOpenDialog($message, @ScriptDir & "\", "Any file (*.*)" , 1) GUICtrlSetData($Input1, $Filename) If @error Then MsgBox(4096,"","No File(s) chosen") ContinueLoop Else md5hash() sha1() crc32() EndIf EndSwitchWEndfunc md5hash() Dim $BufferSize = 0x20000 $FileHandle = FileOpen($Filename, 16) $MD5CTX = _MD5Init() For $i = 1 To Ceiling(FileGetSize($Filename) / $BufferSize) _MD5Input($MD5CTX, FileRead($FileHandle, $BufferSize)) Next $Hash = _MD5Result($MD5CTX) FileClose($FileHandle) GUICtrlSetData($Input2, $Hash)EndFuncfunc sha1() Dim $BufferSize = 0x20000 $FileHandle = FileOpen($Filename, 16) $SHA1CTX = _SHA1Init() For $i = 1 To Ceiling(FileGetSize($Filename) / $BufferSize) _SHA1Input($SHA1CTX, FileRead($FileHandle, $BufferSize)) Next $Hash = _SHA1Result($SHA1CTX) FileClose($FileHandle) GUICtrlSetData($Input3, $Hash)EndFuncfunc crc32() Dim $BufferSize = 0x20000 Dim $CRC32 = 0 $FileHandle = FileOpen($Filename, 16) For $i = 1 To Ceiling(FileGetSize($Filename) / $BufferSize) $CRC32 = _CRC32(FileRead($FileHandle, $BufferSize), BitNot($CRC32)) Next GUICtrlSetData($Input4, Hex($CRC32, 8))EndFuncMy question is how could i perform a file hash compare, like i posted in the first post. I wanted to delete a file based on its hashes. Please help....Thanks
euverve Posted January 16, 2009 Author Posted January 16, 2009 *bump*Here's what I wanted to implement. Quote #include "md5.au3"$a = "2DDE0E8E105E98527E1E55AC19C9E34B"$b = "c:\sample.exe"if filehash($ = $a then filedelete($endifAn input guys... Thanks
trancexx Posted January 16, 2009 Posted January 16, 2009 Thatskie said: *bump* Here's what I wanted to implement. An input guys... ThanksYou are kind of confusing. This helps? expandcollapse popup$sFile = "c:\sample.exe" $hFile = FileOpen($sFile, 16) $bFile = FileRead($hFile) FileClose($hFile) $sHash = "2DDE0E8E105E98527E1E55AC19C9E34B" If Not (_Crypt_HashData($bFile) = $sHash) Then FileDelete($sFile) EndIf ;=============================================================================== ; Function Name: _Crypt_HashData() ; Description: Calculate hash from data ; Syntax: ; Parameter(s): $vData - data to hash, can be binary or a string ; $iAlgID - hash algorithm identifier, can be one of the following: ; 0x8001 = MD2 ; 0x8002 = MD4 ; 0x8003 = MD5 (default) ; 0x8004 = SHA1 ; also see http://msdn.microsoft.com/en-us/library/aa375549(VS.85).aspx ; Requirement(s): ; Return Value(s): Success = Returns hash string ; Failure = Returns empty string and sets error: ; @error -1 = error opening advapi32.dll ; @error 1 = failed CryptAcquireContext ; @error 2 = failed CryptCreateHash ; @error 3 = failed CryptHashData ; Author(s): Siao ; Modification(s): ;=============================================================================== Func _Crypt_HashData($vData, $iAlgID = 0x8003) Local $iLen = BinaryLen($vData), $hContext, $hHash, $aRet, $sRet = "", $iErr = 0, $tDat = DllStructCreate("byte[" & $iLen + 1 & "]"), $tBuf DllStructSetData($tDat, 1, $vData) $aRet = DllCall("advapi32.dll", 'int', 'CryptAcquireContext', 'ptr*', 0, 'ptr', 0, 'ptr', 0, 'dword', 1, 'dword', 0xF0000000) ;PROV_RSA_FULL = 1; CRYPT_VERIFYCONTEXT = 0xF0000000 If Not @error And $aRet[0] Then $hContext = $aRet[1] $aRet = DllCall("advapi32.dll", 'int', 'CryptCreateHash', 'ptr', $hContext, 'dword', $iAlgID, 'ptr', 0, 'dword', 0, 'ptr*', 0) If $aRet[0] Then $hHash = $aRet[5] $aRet = DllCall("advapi32.dll", 'int', 'CryptHashData', 'ptr', $hHash, 'ptr', DllStructGetPtr($tDat), 'dword', $iLen, 'dword', 0) If $aRet[0] Then $aRet = DllCall("advapi32.dll", 'int', 'CryptGetHashParam', 'ptr', $hHash, 'dword', 2, 'ptr', 0, 'int*', 0, 'dword', 0) ;HP_HASHVAL = 2 $tBuf = DllStructCreate("byte[" & $aRet[4] & "]") DllCall("advapi32.dll", 'int', 'CryptGetHashParam', 'ptr', $hHash, 'dword', 2, 'ptr', DllStructGetPtr($tBuf), 'int*', $aRet[4], 'dword', 0) $sRet = Hex(DllStructGetData($tBuf, 1)) Else $iErr = 3 EndIf DllCall("advapi32.dll", 'int', 'CryptDestroyHash', 'ptr', $hHash) Else $iErr = 2 EndIf DllCall("advapi32.dll", 'int', 'CryptReleaseContext', 'ptr', $hContext, 'dword', 0) Else $iErr = 1 EndIf Return SetError($iErr, 0, $sRet) EndFunc ;==>_Crypt_HashData btw, error checking is needed outside the function and maybe to check if $iLen <> 0 inside the function. ♡♡♡ . eMyvnE
euverve Posted January 17, 2009 Author Posted January 17, 2009 (edited) Thanks for the function and example... This works... Quote $sFile = "c:\sample.exe" $hFile = FileOpen($sFile, 16) $bFile = FileRead($hFile) FileClose($hFile) $sHash = "93D6C4A9122F6E7F86C6D790ECBCA237" If (_Crypt_HashData($bFile) = $sHash) Then FileDelete($sFile) EndIf ;=============================================================================== ; Function Name: _Crypt_HashData() ; Description: Calculate hash from data ; Syntax: ; Parameter(s): $vData - data to hash, can be binary or a string ; $iAlgID - hash algorithm identifier, can be one of the following: ; 0x8001 = MD2 ; 0x8002 = MD4 ; 0x8003 = MD5 (default) ; 0x8004 = SHA1 ; also see http://msdn.microsoft.com/en-us/library/aa375549(VS.85).aspx ; Requirement(s): ; Return Value(s): Success = Returns hash string ; Failure = Returns empty string and sets error: ; @error -1 = error opening advapi32.dll ; @error 1 = failed CryptAcquireContext ; @error 2 = failed CryptCreateHash ; @error 3 = failed CryptHashData ; Author(s): Siao ; Modification(s): ;=============================================================================== Func _Crypt_HashData($vData, $iAlgID = 0x8003) Local $iLen = BinaryLen($vData), $hContext, $hHash, $aRet, $sRet = "", $iErr = 0, $tDat = DllStructCreate("byte[" & $iLen + 1 & "]"), $tBuf DllStructSetData($tDat, 1, $vData) $aRet = DllCall("advapi32.dll", 'int', 'CryptAcquireContext', 'ptr*', 0, 'ptr', 0, 'ptr', 0, 'dword', 1, 'dword', 0xF0000000) ;PROV_RSA_FULL = 1; CRYPT_VERIFYCONTEXT = 0xF0000000 If Not @error And $aRet[0] Then $hContext = $aRet[1] $aRet = DllCall("advapi32.dll", 'int', 'CryptCreateHash', 'ptr', $hContext, 'dword', $iAlgID, 'ptr', 0, 'dword', 0, 'ptr*', 0) If $aRet[0] Then $hHash = $aRet[5] $aRet = DllCall("advapi32.dll", 'int', 'CryptHashData', 'ptr', $hHash, 'ptr', DllStructGetPtr($tDat), 'dword', $iLen, 'dword', 0) If $aRet[0] Then $aRet = DllCall("advapi32.dll", 'int', 'CryptGetHashParam', 'ptr', $hHash, 'dword', 2, 'ptr', 0, 'int*', 0, 'dword', 0) ;HP_HASHVAL = 2 $tBuf = DllStructCreate("byte[" & $aRet[4] & "]") DllCall("advapi32.dll", 'int', 'CryptGetHashParam', 'ptr', $hHash, 'dword', 2, 'ptr', DllStructGetPtr($tBuf), 'int*', $aRet[4], 'dword', 0) $sRet = Hex(DllStructGetData($tBuf, 1)) Else $iErr = 3 EndIf DllCall("advapi32.dll", 'int', 'CryptDestroyHash', 'ptr', $hHash) Else $iErr = 2 EndIf DllCall("advapi32.dll", 'int', 'CryptReleaseContext', 'ptr', $hContext, 'dword', 0) Else $iErr = 1 EndIf Return SetError($iErr, 0, $sRet) EndFunc ;==>_Crypt_HashData Edited January 17, 2009 by Thatskie
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now