逆向工程核心原理——第四十一章
ASLR
ASLR(地址空间布局随机化),针对缓冲区溢出的保护机制,微软从内核6开始使用的保护机制。
我们写两个个简单的程序,一个打开ASLR,一个关闭ASLR,进行比较。
ASLR.cpp
#include<studio.h>
void main()
{
printf("ASLR test program...\n");
}
随机地址打开
我们得到两个exe文件ASLR和ASL_onR:
(想打ASLR_on的,截图的时候才发现打错位了)
用OD打开后找到main函数,会发现代码地址和栈地址不相同:
然后我们查看两个文件的节区信息
我们可以看到,打开基址随机的exe文件,多出来了一个节区(.reloc)
这个节区,对于普通的exe文件来讲,是可有可无的(但对于DLL文件来说,是必须的),此节区的作用是为重定位提供参考,因为DLL文件总是需要重定位,对DLL文件来讲是必须的。
对于拥有.reloc字节的exe文件来说,在其NT头IMAGE_FILE_HEADER\Characteristics属性中会比没有.reloc字节的exe文件多出来一个IMAGE_FILE_RELOCS_STRIPPED(1)标志: