前言:基址重定位跟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的区别与联系:
1. 使用ASLR技术时,会发生基址重定位。
2. ASLR是主动设置的;基址重地位是被动发生的,在发现空间被占用时才会重定位。
3. ASLR是安全保护技术,防止恶意攻击;基址重定位是保证程序正常运行。
个人而言,联系与区别的内容比较有意义,一点总结,望看雪的朋友们多指点赐教。