点击打开的“ *** 作中心”右边的“维护”:
点击下面出现的“关闭有关‘Windows备份’的消息”这个链接:
这个时候的“备份”下的消息变成了“打开有关Windows备份的消息
上次XCTF-game说了之后要学习一波aslr的关闭方法,昨天看了看逆向工程核心原理,发现上面有讲解其关闭的方法,特此记录。
先从pe文件重定位说起。
创建好进程后,exe文件会被首先加载进imagebase指定的内存空间地址,因此不用考虑exe重定位。但是DLL和SYS文件可能因为加载几个,导致除了第一个之外其他文件加载到其他尚未占用的地址。
而开启了aslr之后exe可以不加载到imagebse的位置,另外在aslr之前,dll也总是加载到固定地址。
不仅指令的地址变了,而且见到这些红色的call的地址都是硬编码进入的程序,每次也会变。pe装载器进行重定位处理时,最关键的就是查找硬编码地址的位置。而重定位表就是记录硬编码地址偏移的列表。
基址重定位表地址位于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这里
在IMAGE_FILE_HEADER的Characteristics字段。可以见到这个Relocations stripped是没有勾上的。
大意是,重定位信息从这个文件被剥离,这个文件必须被装在进preferred基址(指的应该就是ImageBase),如果ImageBase不可用,加载器会报错。
我们这里要动手关闭aslr,这个选项不用改。要改的是IMAGE_OPTIONAL_HEADER的DLL Characteristics字段
下面是DLL Characteristics的属性值,相或代表属性叠加。
将8140改为8100,也就是让DLL不能move
再次执行程序,发现是004...打头的,这个时候aslr就被关上了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)