2013-09-25 42 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); 

注意:任何代码发布到公共领域。无需归属。

相关问题