查看: 264|回复: 0

[转载图文] 基址重定位与ASLR

[复制链接]
发表于 2020-4-13 21:18:48 | 显示全部楼层 |阅读模式
前言:基址重定位跟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为例:

基址重定位与ASLR

基址重定位与ASLR

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

基址重定位与ASLR

基址重定位与ASLR

影响:在加载文件时如病毒分析等情况下,往往会出现每次下完断点之后重新加载时发现断点消失的问题,得重新找回相应位置。
解决方法:
1. 删除ASLR的标志。(IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE)请自行查阅。
2. 一劳永逸的方法
微软官方提供的软件(附件里有程序),关闭系统的ASLR功能。2箭头出选择Disabled。重启生效。
但我不知道会不会在我们正常操作电脑时出现不好的影响,麻烦知道的先生告诉我。

基址重定位与ASLR

基址重定位与ASLR

基址重定位与ASLR的区别与联系:
1. 使用ASLR技术时,会发生基址重定位。
2. ASLR是主动设置的;基址重地位是被动发生的,在发现空间被占用时才会重定位。
3. ASLR是安全保护技术,防止恶意攻击;基址重定位是保证程序正常运行。

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

温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046
快速回复 返回顶部 返回列表