如何启用可执行文件的地址空间布局随机化?
注意:我没有使用 Visual Studio 或任何提供/dynamicbase编译器选项的编译器。
出于本次讨论的目的,假设我正在向编译器添加功能以启用 ASLR。
我已经知道如何设置其他 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)
Run Code Online (Sandbox Code Playgroud)
如何启用地址空间布局随机化?它是PE标志吗?它是组装清单条目吗?
我如何选择一个可执行文件进入 NX(不执行)?
该解决方案是该选项被嵌入在PE二进制标头。但是,而不是
loadedImage.FileHeader.FileHeader.Characteristics
Run Code Online (Sandbox Code Playgroud)
在里面:
loadedImage.FileHeader.OptionalHeader.DllCharacteristics
Run Code Online (Sandbox Code Playgroud)
你在哪里设置标志:
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE = 0x0040; //The DLL can be relocated at load time.
Run Code Online (Sandbox Code Playgroud)
对于辅助函数伪代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
然后打电话
//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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5272 次 |
| 最近记录: |