2013-09-25 41 views
1

如何啓用可執行文件的地址空間佈局隨機化?如何在Windows PE二進制文件中啓用ASLR?

注意:我沒有使用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(不執行)?

回答

2

解決方法是選項嵌入在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) 
{ 
    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); 

注意:任何代碼發佈到公共領域。無需歸屬。

相關問題