比较WORD特性
Comparing WORD characteristics
我正在尝试读取 PE headers,并想查看 exe 是否启用了 ASLR。
我目前正在做:
if (PE.FileHeader->OptionalHeader.DllCharacteristics == IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE)
std::cout << "ASLR is enabled :)" << std::endl;
else
std::cout << "ASLR is disabled >:(" << std::endl;
但是,我总是得到 "ASLR is disabled >:(",即使我确实知道 ASLR 已启用。
我知道这与我的操作员有关,但我如何测试并查看 PE header 是否具有特定的 WORD 字符?
DllCharacteristics
是一个位掩码,它可以包含多个启用的标志。您的检查必须使用按位 &
运算符而不是 ==
运算符:
if (PE.FileHeader->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE)
std::cout << "ASLR is enabled :)" << std::endl;
else
std::cout << "ASLR is disabled >:(" << std::endl;
发现它在多位标志的情况下通过以下方式工作 IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 是 DllCharacteristics 中的最高位:
if (PE.FileHeader->OptionalHeader.DllCharacteristics &
(IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE|
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE) ==
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE)
std::cout << "ASLR is enabled :)" << std::endl;
else
std::cout << "ASLR is disabled >:(" << std::endl;
我正在尝试读取 PE headers,并想查看 exe 是否启用了 ASLR。
我目前正在做:
if (PE.FileHeader->OptionalHeader.DllCharacteristics == IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE)
std::cout << "ASLR is enabled :)" << std::endl;
else
std::cout << "ASLR is disabled >:(" << std::endl;
但是,我总是得到 "ASLR is disabled >:(",即使我确实知道 ASLR 已启用。
我知道这与我的操作员有关,但我如何测试并查看 PE header 是否具有特定的 WORD 字符?
DllCharacteristics
是一个位掩码,它可以包含多个启用的标志。您的检查必须使用按位 &
运算符而不是 ==
运算符:
if (PE.FileHeader->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE)
std::cout << "ASLR is enabled :)" << std::endl;
else
std::cout << "ASLR is disabled >:(" << std::endl;
发现它在多位标志的情况下通过以下方式工作 IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 是 DllCharacteristics 中的最高位:
if (PE.FileHeader->OptionalHeader.DllCharacteristics &
(IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE|
IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE) ==
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE)
std::cout << "ASLR is enabled :)" << std::endl;
else
std::cout << "ASLR is disabled >:(" << std::endl;