关闭aslr oracle,ASLR的关闭方法

上次XCTF-game说了之后要学习一波aslr的关闭方法,昨天看了看逆向工程核心原理,发现上面有讲解其关闭的方法,特此记录。

先从pe文件重定位说起。

创建好进程后,exe文件会被首先加载进imagebase指定的内存空间地址,因此不用考虑exe重定位。但是DLL和SYS文件可能因为加载几个,导致除了第一个之外其他文件加载到其他尚未占用的地址。

而开启了aslr之后exe可以不加载到imagebse的位置,另外在aslr之前,dll也总是加载到固定地址。

f5650a695d9c

ASLR执行1

f5650a695d9c

ASLR执行2

不仅指令的地址变了,而且见到这些红色的call的地址都是硬编码进入的程序,每次也会变。pe装载器进行重定位处理时,最关键的就是查找硬编码地址的位置。而重定位表就是记录硬编码地址偏移的列表。

f5650a695d9c

基址重定位表

基址重定位表地址位于IMAGE_OPTION_HEADER的IMAGE_DATA_DIRECTORY[5]。

前面的DWORD是RVA后面的DWORD是大小

typedef struct _IMAGE_DATA_DIRECTORY {

DWORD VirtualAddress;

DWORD Size;

} IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;

另外再看看pe头IMAGE_FILE_HEADER这里

f5650a695d9c

Relocation stripped

在IMAGE_FILE_HEADER的Characteristics字段。可以见到这个Relocations stripped是没有勾上的。IMAGE_FILE_RELOCS_STRIPPED   0x0001

Relocation information was

stripped from the file. The file must be loaded at its preferred base

address. If the base address is not available, the loader reports an

error.

大意是,重定位信息从这个文件被剥离,这个文件必须被装在进preferred基址(指的应该就是ImageBase),如果ImageBase不可用,加载器会报错。

我们这里要动手关闭aslr,这个选项不用改。要改的是IMAGE_OPTIONAL_HEADER的DLL Characteristics字段

f5650a695d9c

DLL Characteristics

下面是DLL Characteristics的属性值,相或代表属性叠加。#define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040 // DLL can move.

#define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080 // Code Integrity Image

#define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100 // Image is NX compatible

#define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200 // Image understands isolation and doesn't want it

#define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400 // Image does not use SEH. No SE handler may reside in this image

#define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800 // Do not bind this image.

// 0x1000 // Reserved.

#define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000 // Driver uses WDM model

// 0x4000 // Reserved.

#define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000

将8140改为8100,也就是让DLL不能move

f5650a695d9c

删除该属性

再次执行程序,发现是004...打头的,这个时候aslr就被关上了。

f5650a695d9c

关闭aslr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值