Set PE flagi
Możesz użyć {$SetPEOptFlags $40}
, aby ustawić flagę DEP, i {$SetPEOptFlags $100}
, aby ustawić flagę ASLR. Aby ustawić oba ustawienia, użyj {$SetPEOptFlags $140}
.
Jeśli masz wersję Delphi z niezbędnych definicji w jednostce Windows.pas można użyć dużo bardziej czytelny:
{$SetPEOptFlags IMAGE_DLLCHARACTERISTICS_NX_COMPAT or
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE }
Zazwyczaj można to ustawienie w pliku .dpr $SetPEOptFlags
. Musimy więc upewnić się, że Windows
jest w pliku .dpr używa klauzuli dla tych stałych , które będą dostępne.
Set polityka DEP w czasie wykonywania
Dla wersji, które nie obsługują podejść flaga PE opartych można wywołać tę funkcję na początku inicjalizacji Twojej aplikacji:
procedure EnableDEP;
const
PROCESS_DEP_ENABLE: DWORD=$00000001;
var
SetProcessDEPPolicy: function(dwFlags: DWORD): BOOL; stdcall;
begin
SetProcessDEPPolicy := GetProcAddress(GetModuleHandle(kernel32),
'SetProcessDEPPolicy');
if Assigned(SetProcessDEPPolicy) then begin
//don't bother checking for errors since we don't need to know if it fails
SetProcessDEPPolicy(PROCESS_DEP_ENABLE);
end;
end;
To będzie działać na każdej wersji z Delphi.
Nie można ustawić flagi ASLR w czasie wykonywania, ponieważ wpływa ona na sposób ładowania modułu. Tak więc ASLR można ustawić tylko za pomocą flag PE.
Modyfikowanie flagi PE o bardzo starych wersjach Delphi
starsze wersje Delphi nie obsługują $SetPEFlags
i $SetPEOptFlags
. W przypadku takich wersji należy użyć zewnętrznego narzędzia, aby zmodyfikować wykonywalny post-build. Kiedy początkowo napisałem tę odpowiedź, założyłem, że wykonanie zadania będzie możliwe za pomocą narzędzia EDITBIN
. W przypadku DEP wystarczy, używając opcji /NXCOMPAT
. W przypadku ASLR należy użyć innego edytora flag PE. Moje websearch ujawniło peflags
od cygwin.
peflags --dynamicbase=true --nxcompat=true MyApp.exe
Jestem pewien, że dostępne są inne opcje edycji flag PE.
To działa bardzo dobrze. Dziękuję Ci! – Mick
Link edytora jest uszkodzony – OnTheFly
Kilka notatek: Editbin.exe jest częścią wszystkich wersji visual studio. Wymagana opcja/nxcompat jest w VS 2008 i wyżej. Zauważ, że w przypadku instalacji seryjnej VS 2010 edytorbin.exe może zgłaszać błędy związane z brakującymi bibliotekami dll. Rozwiązałem to, po prostu kopiując w bibliotekach dll do katalogu gdzie znajduje się plik editbin.exe. – Jonesome