第16章:基址重定位和ASLR(Address Space Layout Randomization)

PE重定向

向进程的虚拟内存加载PE文件时,文件会被加载到PE头的ImageBase所指向的地址处时.存在地址被占用的风险.

 

 EXE文件会优先被加载到内存,所以不用担心重定位问题.

在Windows Vista之后的版本引入了ASLR安全机制,运行程序exe都会被加载到不同的地址.

此处应注意(在win 7企业版中):每次运行程序代码地址,PE内存中的地址,堆栈地址都会改变:

但是在我的win 10系统中,第一次和后面几次的重新加载过程中,程序代码地址,PE文件起始地址没有发生变化,只有堆栈地址发生了变化.

但删除程序,将新程序拖入Win10重新运行,发现他们所有的地址又都不一样了.

使用HexEditor查看程序:

 

可以看到,多了一个reloc节区.编译时由编译器生成.PE文件加载到内存中,该节区呗用做重定位的参考.可以被删除.

在OptionalHeader中,从首地址(10/20b)加46H即到DllCharacteristics,此变量中包含:

 

 只需要将8140改为8100即可:

再次调试,即可成功:

 

posted @ 2020-07-03 15:42  Rev_omi  阅读(349)  评论(0编辑  收藏  举报