ASLR

1 Windows内核版本

  微软从windows Vista开始使用ASLR技术,进一步加强系统安全性,Vista之前的Server 2003、XP、2000都是5.x版本的。

2.ASLR

  ASLR(地址空间布局随机化)是一种针对缓冲区溢出的安全保护技术。PE文件每次加载到内存的起始地址都会随机变化,堆栈的起始地址也会变化,即,每次加载到内存的实际地址都不同,采用ASLR技术增加恶意用户编写漏洞利用代码的难度,可以降低利用OS安全漏洞破坏系统的风险。

3.Visual C++

  用Visual C++并不是都自动应用ASLR技术,一般在编译的时候默认开启了VC++的/DYNAMICBASE选项,如图:


ASLR选项

不需要可以选择NO

4.ASLR.exe

  用一个例子ASLR.cpp文件,来对比一下开启了ASLR和没开启ASLR的区别:

#include<stdio.h>
void main(){
    printf("ASLR test program...\n");
}

  分别用开启ASLR的编译和未开启ASLR的编译生成ASLR.exe和ASLR_no.exe;分别用OD打开看地址:


ASLR.exe

ASLR.exe

ASLR_no.exe

ASLR_no.exe

  可以看到开启了ASLR的程序地址起始位置是随机的,而且很大,未开启的一般默认的ImageBase00400000开始,DLL文件的ImageBase为1000000

5.节区信息


.reloc节区

“.reloc”的节区

  可以看出ASLR.exe比ASLR_no.exe多出来了一个”.reloc”的节区,开启了ASLR的程序才会有这个节区,他不是程序运行所必需的,可以将其从PE文件中删除(DLL总是需要重定位,DLL文件中不可以删除),最重要的部分是IMAGE_FILE_HEADER\Characteristics与IMAGE_OPTIONAL_HEADER\DLL Characteristics这两个字段。

6.IMAGE_FILE_HEADER\Characteristics

  对于ASLR.exe文件,在IMAGE_FILE_HEADER的Characteristics属性字段中不存在IMAGE_FILE_RELOCS_STRIPPED标志(由于ASLR,exe多了“.reloc”节区,所以Number Of Sections值增1)


.reloc节区

7.IMAGE_OPTIONAL_HEADER\DLL Characteristics

  上方为ASLR.exe文件,下方为ASLR_no.exe文件,ASLR.exe文件的IMAGE_OPTIONAL_HEADER\DLL Characteristics中设有IMAGE_CHARACTERISTICS_DYNAMIC_BASE标志,若VC++中开启了/DYNAMICBASE选项编译程序文件时就会设置上标志值


.reloc节区

8.删除ASLR功能

  使用二进制修改工具(这里用010Editor)将ASLR.exe文件的IMAGE_OPTIONAL_HEADER\DLL Characteristics中的IMAGE_CHARACTERISTICS_DYNAMIC_BASE标志删除就可删除ASLR标志,将原来的8140改为8100(偏移位于14E处),如图:


.reloc节区

保存完之后再用OD打开看一下是不是有随即地址:


.reloc节区

显然没有了。

  其实还可以从可执行文件中删除“.reloc”节区,但是自己亲试了一下,改完之后,程序不能像之前运行,暂且先缓一缓!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
博客
32132
07-14 294
07-12 236

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值