逆向工程核心原理——第四十一章

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)标志:

posted @ 2020-11-03 17:17  Kylimi  阅读(95)  评论(0编辑  收藏  举报