Wie kann ich DEP / NX und ASLR in einer ausführbaren Datei von Delphi 2006 oder früher aktivieren?

8

Delphi 2007 (und neuer) unterstützt die Aktivierung von DEP und ASLR über eine dieser drei Methoden :

  • Fügen Sie beim Kompilieren mit dcc32
  • den Befehlszeilenschalter –dynamicbase hinzu
  • Fügen Sie den Präprozessorbefehl {$DYNAMICBASE ON} zum Quellcode
  • hinzu
  • manuell ODER im Bit in der Kopfzeile, mit {$SETPEOPTFLAGS } im Quelltext

Ich möchte mit Delphi 2006 und C ++ Builder 2006 (auch bekannt als BDS 2006) das Gleiche machen können. Weiß jemand, wie man das macht?

    
Mick 09.11.2011, 14:12
quelle

2 Antworten

10

Legen Sie PE-Kennzeichen fest

Sie können {$SetPEOptFlags } verwenden, um das DEP-Flag festzulegen, und {$SetPEOptFlags 0} , um das ASLR-Flag festzulegen. Verwenden Sie {$SetPEOptFlags 0} .

Wenn Sie eine Version von Delphi mit den notwendigen Definitionen in der Windows.pas-Einheit haben, können Sie die viel besser lesbaren verwenden:

%Vor%

Normalerweise fügen Sie die Einstellung $SetPEOptFlags in die .dpr-Datei ein. Daher müssen Sie sicherstellen, dass Windows in der .dpr-Datei uses-Klausel für diese IMAGE_XXX -Konstanten verfügbar ist.

Festlegen der DEP-Richtlinie zur Laufzeit

Für Versionen, die PE-Flag-basierte Ansätze nicht unterstützen, können Sie diese Funktion früh bei der Initialisierung Ihrer App aufrufen:

%Vor%

Dies wird für jede Version von Delphi funktionieren.

Sie können das ASLR-Flag nicht zur Laufzeit setzen, da es Einfluss darauf hat, wie das Modul geladen wird. Daher kann ASLR nur mit PE-Flags gesetzt werden.

Ändern von PE-Flags für sehr alte Versionen von Delphi

Ältere Versionen von Delphi unterstützen $SetPEFlags und $SetPEOptFlags nicht. Für solche Versionen müssen Sie ein externes Tool verwenden, um den ausführbaren Post-Build zu modifizieren. Als ich diese Antwort ursprünglich schrieb, nahm ich an, dass EDITBIN von der MS-Toolchain die Aufgabe übernehmen würde. Für DEP wird es ausreichen, die Option /NXCOMPAT zu verwenden. Für ASLR müssen Sie einen anderen PE-Flag-Editor verwenden. Meine Websuche ergab peflags von cygwin.

%Vor%

Ich bin mir sicher, dass andere PE-Flag-Bearbeitungsoptionen verfügbar sind.

    
David Heffernan 09.11.2011, 14:55
quelle
6

'{$ DYNAMICBASE ON}' ist neu in Delphi2007, '{$ SETPEOPTFLAGS $ 40}' war eine bestehende Anweisung: info

{$ SetPEOptFlags $ 40} funktioniert in Delphi2006

    
Arjen van der Spek 09.11.2011 14:48
quelle

Tags und Links