3

実行可能ファイルのアドレス空間レイアウトのランダム化を有効にするにはどうすればよいですか?

:私はVisual Studio、または/dynamicbaseコンパイラオプションを提供するコンパイラを使用していません。

この説明では、ASLR を有効にする機能をコンパイラに追加するとします。

その他の PE フラグ

設定方法を既に知っている他の Windows 実行可能イメージ オプションがあります。たとえば、次にIMAGE_FILE_NET_RUN_FROM_SWAPフラグを立てます。PE バイナリ ヘッダーで PE オプションを設定します。

LOADED_IMAGE li;
MapAndLoad(fileName), null, li, false, false)

LI.FileHeader.FileHeader.Characteristics |= IMAGE_FILE_NET_RUN_FROM_SWAP;

UnMapAndLoad(li)

アドレス空間レイアウトのランダム化を有効にするにはどうすればよいですか? PEフラグですか?アセンブリ マニフェストエントリですか。

ボーナス

実行可能ファイルを NX (実行なし) にオプトインするにはどうすればよいですか?

4

1 に答える 1

5

解決策は、オプションPE バイナリ ヘッダーに埋め込むことです。しかし、むしろ

loadedImage.FileHeader.FileHeader.Characteristics

入った:

loadedImage.FileHeader.OptionalHeader.DllCharacteristics

フラグを設定する場所:

IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = 0x0040; //The DLL can be relocated at load time.

ヘルパー関数の疑似コードの場合:

void SetPEOptFlags(String filename, UInt32 flags)
{
   // Any code is released into the public domain. No attribution required.
   LOADED_IMAGE li;
   MapAndLoad(filename, null, li, false, false);
  
   li.FileHeader.OptionalHeader.DllCharacteristics |= flags;
   UnMapAndLoad(li);
}

そして呼び出す

//Optional dll characteristics
const IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = 0x0040; //The DLL can be relocated at load time.
const IMAGE_DLLCHARACTERISTICS_NX_COMPAT =    0x0100; //The image is compatible with data execution prevention (DEP).


SetPEOptFlags("C:\Foo\Contoso.exe", 
   IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE | IMAGE_DLLCHARACTERISTICS_NX_COMPAT);
于 2013-09-25T18:54:18.160 に答える