基址重定位与ASLR

前言:基址重定位跟ASLR技术的知识点在书中会一起出现,借此捋清一下他们的关系。

-----------------------------------------------------------------------------------------------------------------------

基址重定位

概念:在加载DLL(SYS)文件时,如果在该ImageBase(映像基址)已经加载了其他DLL(SYS)文件,那么该文件会被加载到其他未被占用的空间。而EXE文件会被先加载,所以不用考虑空间被占用而重定位的问题。此外,由于系统的DLL有固定的ImageBase,所以也没有重定位的问题。

操作原理:
1. 在应用程序中查找硬编码的位置。//硬编码:固定值的形式的编译,读取的是在他之中的地址值

2. 读取值后,减去ImageBase。((原本加载地址)硬编码地址值-ImageBase)

3. 加上实际地址。(上边的值+实际加载地址)

应用及影响:在使用如upx壳这般会压缩重定位表的壳时,可能会出现问题。

具体相关请看xhbuming先生的帖子:https://bbs.pediy.com/thread-199895.htm


ASLR(Address Space Layout Randomization,地址空间布局随机化)

概念:顾名思义,每次PE文件加载进内存时起始地址都会随机变化,并且每次运行程序时相应进程的栈以及堆的起始地址也会随机改变。

使用这种PE加载技术的缘由:针对缓冲区溢出的安全保护技术,为了增加系统安全性。

使用条件:OS的内核版本6以上,且编程工具支持/DYNAMICBASE选项。

以Microsoft Visual Studio 2010为例:


在项目处(ebp_t)右键->属性->链接器->高级->随机基址


影响:在加载文件时如病毒分析等情况下,往往会出现每次下完断点之后重新加载时发现断点消失的问题,得重新找回相应位置。

解决方法:

1. 删除ASLR的标志。(IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE)请自行查阅。

2. 一劳永逸的方法

微软官方提供的软件(附件里有程序),关闭系统的ASLR功能。2箭头出选择Disabled。重启生效。

但我不知道会不会在我们正常操作电脑时出现不好的影响,麻烦知道的先生告诉我。



基址重定位与ASLR的区别与联系:

2. ASLR是主动设置的;基址重地位是被动发生的,在发现空间被占用时才会重定位。

3. ASLR是安全保护技术,防止恶意攻击;基址重定位是保证程序正常运行。


个人而言,联系与区别的内容比较有意义,一点总结,望看雪的朋友们多指点赐教。





评论