ASLR

  1. ASLR是一种针对缓冲区溢出的安全保护技术,从WIndows Vista开始采用该技术。
  2. 借助ASLR技术,PE文件每次加载到内存的起始地址都会随机变化,并且每次运行程序时相应进程的栈以及堆的起始地址也会随机改变。
  3. 一般使用MS Visual C++ 2010创建可执行文件(PE)时,EXE文件的ImageBase默认为00400000,DLL文件的ImageBase为10000000,但编译它们,如果默认开启了VC++的/DYNAMICBASE选项,那么ASLR技术就会应用到编译的文件中。
  4. ASLR.exe
  • 测试程序:
#include "studio.h"

void main()
{
	printf("ASLR test program...\n");
}
  • 然后打开VC++的/DYNAMICBASE选项,编译得到ASLR.exe程序;再关闭/DYNAMICBASE:NO选项,编译得到ASLR_no.exe程序。
  • 分别使用OllyDbg调试ASLR.exe与ASLR_no.exe程序,查看EP代码地址与栈地址。
    在这里插入图片描述
    在这里插入图片描述
  • 使用PEView查看两个可执行文件。
    在这里插入图片描述
  • 左侧为ASLR.exe文件,右侧为ASLR_no.exe文件,可用清楚看到ASLR.exe文件比ASLR_no.exe文件多出1个名为“.reloc”的节区,一般而言,普通的EXE文件中是不存在.reloc节区的,该节区仅在应用了ASLR技术的文件中才会出现,它是编译时由编译器生成并保留再可执行文件中的。
  • PE文件被加载到内存时,该节区被用作重定位的参考,它不是EXE文件运行的必须部分,可将其从PE文件中删除,但是由于DLL文件总是需要重定位,所以再DLL文件中不可将其删除。
IMAGE_FILE_HEADER\Characteristics
  • 对于拥有.reloc节区的ASLR.exe文件来说,IMAGE_FILE_HEADER的Characteristics属性字段中并不存在IMAGE_FILE_RELOCS_STRIPPED(从文件中删除重新定位信息)标志。
  • 由于ASLR.exe文件中多出1个.reloc节区,所以Number of Sections值增1.
    在这里插入图片描述
IMAGE_OPTIONAL_HEADER\DLL Characteristics
  • ASLR.exe文件的IMAGE_OPTIONAL_HEADER\DLL Characteristics中设有IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE标志,若VC++中开启/DYNAMICBASE选项,编译程序文件时就会设置上该标志值。
    在这里插入图片描述

删除ASLR功能

  1. IMAGE_OPTINAL_HEADER\DLL Characteristics中设有IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE标志,删除它即可删除ASLR功能。
  2. 只需要将该标志删除即将8140改为8100.
    在这里插入图片描述
  3. 保存后使用OllyDbg调试。
    在这里插入图片描述
  4. 可用看到以及成功删除ASLR功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值