如何确定EXE(或DLL(是否参与ASLR,即是否可重新定位?
我想检查我的系统上的一些EXE是否可以重新定位并参与ASLR。
我知道链接器的默认行为是剥离基重定位,这样EXE就不可重定位了?
我如何从FileAlyzer这样的工具中看到图像是否参与ASLR?
可重定位模块(exe或dll(不一定需要启用ASLR,但启用ASLR的模块需要可重定位。
启用ASLR的模块(使用/DNAMICBASE链接器开关(将在随机地址加载,而不考虑其ImageBase(首选加载地址(,因此它必须是可重定位的,否则无法加载。
如果模块未启用ASLR,则加载程序将首先尝试在ImageBase加载模块。如果这不可能(内存已经分配(,它将尝试在另一个地址加载;如果模块是可重定位的,它将成功,否则它将失败。
如何识别可重定位模块
不可重定位的模块将在其文件头的特征字段中设置IMAGE_FILE_RELOCS_STRIPPED(0x0001(位标志。可重定位模块将清除此位,它还将有一个带有重定位的部分(如.remove(。您可以使用PEView或dumpbin /headers your_module.exe
(或dll(等软件检查该标志
如何识别启用ASLR的模块
启用ASLR的模块将是可重定位的(重定位剥离标志未设置(,并且它还将在可选标头的DLLCHARACTERISTICS字段中设置IMAGE_DLLCHARACTERSTICS_DNAMIC_BASE(0x0040(标志。无论名称如何,DllCharacteristics都用于EXE和DLL。
同样,您可以使用PE文件资源管理器(如PEView(或dumpbin /headers your_module.dll
(或exe(检查是否存在此标志集。