Windows ASLR是否基于会话?实验结果不符的原因探究
为什么不同RDP会话中DLL地址完全相同?
你搞混了Windows ASLR的两种随机化层级:
系统核心DLL(比如ntdll.dll、kernel32.dll)加载在系统共享地址空间,它们的基地址是系统启动时一次性随机化的,所有会话里的进程都会复用这个地址,不会随会话变化。这部分DLL不属于会话级随机化的范畴。会话级ASLR只作用于用户态非核心DLL/可执行文件,而且得满足两个前提:
- 目标程序编译时开启了
/DYNAMICBASE编译选项(这是启用ASLR的基础) - 系统没有禁用会话级ASLR(默认是开启的,可通过注册表
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management下的MoveImages项查看,值为0x1是开启状态)
- 目标程序编译时开启了
你的实验大概率是测试了系统核心DLL,所以不同RDP会话里地址完全一致。如果换成自己编译的、开启了
/DYNAMICBASE的自定义DLL,再去不同会话运行测试,就能看到地址差异了。
内容的提问来源于stack exchange,提问作者yyyy
相关产品推荐
相关产品推荐

