Hashes blocken?

  • Hallo,

    ich möchte fragen, wie ich es hinbekomme, das der MD5 Hash von einem Programm
    geblockt wird.

    Also nach dem Prinzip:
    Programm mit dem MD5 Hash "fca888fc8ae3cd7636925e7538ff91d6" wird geöffnet.
    In meinem Programm wird aber "fca888fc8ae3cd7636925e7538ff91d6" geblockt und beendet
    den Prozess mit diesem Hash.

    Danke schonmal. :)

    MfG,
    Valron

  • Ansatz: jeder neue Prozess wird erstmal angehalten: _ProcessSuspend
    dann wird die Datei gehasht (_ProcessGetFile oder so und dann MD5-en)
    Wenn in Sperrliste, dann ProcessClose, sonst _ProcessResume

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Mein Ansatz aus dem zitierten Thread hat dich wohl doch nicht so weiter gebracht?
    Nun dann mal einen wirklich großen Ansatz mit vielen Kommentaren.
    ProcessClose hab ich nicht eingebaut - das kannst du dir dann sicherlich selbst machen:

    Spoiler anzeigen
    [autoit]

    #include <Crypt.au3> ;Wird für die Funktion _Crypt_HashFile benötigt

    [/autoit] [autoit][/autoit] [autoit]

    Global $aProc, $sPath, $iHash ;Deklariere später genutzte Variablen - nicht unbedingt nötig - aber sauberer Programmierstil
    Global $iBlockHash = "0x2626FC9755BE22F805D3CFA0CE3EE727" ;Beispielhashwert meiner Explorer.exe

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1 ; Endlosschleife da das Programm ja die ganze Zeit laufen soll
    $aProc = ProcessList() ;Liest alle derzeit laufenden Prozesse in ein Array

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $aProc[0][0] ;Schleife um das eben erstellte Array durchzugehen
    $sPath = _ProcessGetPath($aProc[$i][1]) ;Ermittelt den Pfad des Prozesses an der derzeitigen Arrayposition und schreibt ihn in die Variable $sPath

    [/autoit] [autoit][/autoit] [autoit]

    If StringLen($sPath) > 3 Then ;Systemprogramme und Dienste geben keinen vernünftigen Pfad zurück - deswegen muss dieser Fall abgefragt werden
    $iHash = _Crypt_HashFile($sPath, $CALG_MD5) ;Ermittelt den Hashwert der Datei deren Pfad in $sPath steht mit dem MD5-Algorithmus

    [/autoit] [autoit][/autoit] [autoit]

    If $iHash = $iBlockHash Then ; Frage ab ob die ermittelte Hash der zu blockenden entspricht.
    MsgBox(0, "Gefunden", "Der Prozess wurde gefunden - seine PID für z.B. Processclose() lautet: " & $aProc[$i][1])
    EndIf
    EndIf
    Next
    Sleep(500) ; Kleine Atempause für den Rechner
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Funktion welche den Dateipfad eines Prozesses ausliest:
    Func _ProcessGetPath($PID)
    If IsString($PID) Then $PID = ProcessExists($PID)
    $Path = DllStructCreate("char[1000]")
    $dll = DllOpen("Kernel32.dll")
    $handle = DllCall($dll, "int", "OpenProcess", "dword", 0x0400 + 0x0010, "int", 0, "dword", $PID)
    $ret = DllCall("Psapi.dll", "long", "GetModuleFileNameEx", "long", $handle[0], "int", 0, "ptr", DllStructGetPtr($Path), "long", DllStructGetSize($Path))
    $ret = DllCall($dll, "int", "CloseHandle", "hwnd", $handle[0])
    DllClose($dll)
    Return DllStructGetData($Path, 1)
    EndFunc ;==>_ProcessGetPath

    [/autoit]