Einzelnen Beitrag anzeigen

rob74

Registriert seit: 13. Sep 2006
Ort: München
22 Beiträge
 
Delphi XE Starter
 
#5

AW: Data Execution Prevention (DEP) aktivieren

  Alt 7. Aug 2010, 16:42
Ich habe mich auch in letzter Zeit mit diesem Thema beschäftigt. Die einfachste Möglichkeit ist, die Compiler-Direktive {$SetPEOptFlags $0140} (am besten im Projekt-Quelltext) zu verwenden - dies setzt den DllCharacteristics-Wert des Optional PE Headers (Siehe MSDN). $0100 heißt IMAGE_DLLCHARACTERISTICS_NX_COMPAT (aktiviert DEP), $0040 heißt IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE (aktiviert ASLR). Das funktioniert sogar in älteren Delphi-Versionen (ich weiß nicht seit wann es SetPEOptFlags gibt, aber in Turbo Delphi funktioniert's problemlos).

Das Ganze hat leider einen Haken: diese Flags werden nur unter Vista und 7 ausgewertet, unter XP nicht. Das heißt, unter XP (ab SP2) entscheidet das System, welcher Prozess DEP kriegt und welcher nicht - außer das Programm benutzt die Funktion SetProcessDEPPolicy. Diese Funktion gibt es leider aber erst ab XP SP3 (und in Vista erst ab SP1). Um DEP auch unter XP SP2 nutzen zu können, kann man es wie der Chromium-Browser machen: die rufen die undokumentierte Funktion NtSetInformationProcess mit den Parametern ProcessExecuteFlags= PROCESS_INFORMATION_CLASS=$22 und ProcessInformation=MEM_EXECUTE_OPTION_PERMANENT | MEM_EXECUTE_OPTION_ENABLE=$9 auf (Quellcode zu sehen bei Google Code Search).

ASLR gibt's unter XP übrigens gar nicht, erst unter Vista.

Geändert von rob74 ( 7. Aug 2010 um 16:44 Uhr)
  Mit Zitat antworten Zitat