Windows Speicherschutz ausschalten. (DEP-Policy)

  • DEP (Data Execution Prevention) ist ein Feature, das mit WinXPSP2 eingeführt wurde. Es soll das Ausführen von Schadcode dahingehend behindern, dass bestimmte Speicherblöcke unzugänglich gemacht werden. Einige Anwendungen schneiden aber manchmal den geschützten Speicherbereich und crashen dann einfach. Mit dieser Funktion kann DEP abgeschaltet (und auch wieder angeschaltet) werden.

    Spoiler anzeigen
    [autoit]

    ConsoleWrite("!> Enable: " & SetProcessDEPPolicy(1) & @CRLF)
    ConsoleWrite("!> Disable: " & SetProcessDEPPolicy(0) & @CRLF) ; Einmal eingeschaltet, lässt es sich nicht deaktivieren.

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

    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: SetProcessDEPPolicy
    ; Description ...: Enables or disables DEP for the current AutoIt3 process.
    ; Syntax ........: SetProcessDEPPolicy($iBool)
    ; Parameters ....: $iBool - 0 or 1
    ; Return values .: Kernel32 Errorcode:
    ; 0 = Fail
    ; 1 = Success
    ; Author ........: minx
    ; ===============================================================================================================================
    Func SetProcessDEPPolicy($iBool)
    $iReturn = DllCall("Kernel32.dll", "long", "SetProcessDEPPolicy", "long", $iBool)
    Return $iReturn[0]
    EndFunc

    [/autoit]
  • Das scheint eine nützlich Funktion zu sein. Wann weiß ich denn, wann mir DEP ein Strich durch die Rechnung macht und mein Programm zum Absturz bringt?

  • Tja so einfach ist das nicht. Wenn du nicht direkt im Speicher arbeitest ist das nicht wirklich relevant. Es sollte immer als letzes zu lösendes Problem übrig bleiben ^^

  • Wenn du Code in einem Speicherbereich ausführst, der nicht mit dem executeable-Flag gekennzeichnet ist, könnte es sein, dass Windows was dagegen hat. Grundsätzlich ist VirtualAlloc und VirtualProtect die bessere Lösung. Aber wenn das nicht klappt, kannst du das hier noch probieren. In Autoit hab ich schon viele DllStruct "ausgeführt", nie ist es abgestürzt, demnach ist diese Funktion für Autoit meiner Meinung nach irrelevant, wenn du im eigenen Prozess bleibst