Address Space Layout Randomization=地址空间布局随机化;
是一种针对缓冲区溢出的安全保护技术;
没有ASLR时,每次进程执行,加载到内容中,代码所处堆栈stack的位置都是相同的,容易被破解;
如果开启了ASLR,操作系统加载器会针对基地址再去加上一个随机生成的偏移地址,然后再去加载程序模块,通过对堆、栈、共享库映射等线性区布局的随机化,增加攻击者预测目的地址的难度。
地址随机化需要程序自身和操作系统的双重支持,会在PE头中设置IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE标识来说明支持ASLR。
此字段位于PE结构的可选头结构体中;可选头的概念可参阅此,
https://blog.csdn.net/bcbobo21cn/article/details/115032841
2 PE操作
下面来用010Editer操作看一下,打开010Editor,打开notepad.exe;
根据资料,在 NtHeader 数据块内找到4081,然后修改为0081即可;或者找到WORD IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE这个字段 ,把值1改为0即可;
看下图NT头的区域;里面没有4081;也许版本发生了变化;
我截一个网友操作的图,大家了解一下此概念;
此图是用CFF Explorer进行操作,CFF Explorer可在此下载;
http://windows.dailydownloaded.com/zh/developer-tools/specialized-tools/14498-cff-explorer-download-install
这工具看上去是微软提供的;
然后找 IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 字段;如下图,值为1,就是支持地址随机化;如果改为0,则不支持地址随机化;
根据PE结构资料;可选头的DllCharacteristics是一个WORD;
WORD DllCharacteristics;
例如此文;https://cloud.tencent.com/developer/article/1015243
但是010Editor显示的,DllCharacteristics是一个结构体,里面又包含多个WORD;这可能是一个多个WORD或起来的值,最终是一个WORD;
3 VS相关选项在VS开发环境设置中,对此有一个选项支持;如下图;链接器-高级-随机基址;默认生成的应用程序支持地址随机化;