在Windows上以固定的基址加载FIPS OpenSSL DLL

在Windows上以固定的基址加载FIPS OpenSSL DLL,windows,dll,openssl,fips,aslr,Windows,Dll,Openssl,Fips,Aslr,FIPS验证的OpenSSL库必须在固定地址加载libeay32.dll。 例如,这在以下位置显示: 使用在中描述的技术,以及 ,及 , 我已尽可能早地强制加载FIPS DLL 对于64位进程,从ListDLLs输出中,我看到加载顺序为: E:\my\my64.exe C:\Windows\SYSTEM32\ntdll.dll C:\Windows\system32\kernel32.dll C:\Windows\system32\KERNELBASE.dll E:\my\LIBEAY_FIPS

FIPS验证的OpenSSL库必须在固定地址加载libeay32.dll。 例如,这在以下位置显示:

使用在中描述的技术,以及 ,及 , 我已尽可能早地强制加载FIPS DLL

对于64位进程,从ListDLLs输出中,我看到加载顺序为:

E:\my\my64.exe
C:\Windows\SYSTEM32\ntdll.dll
C:\Windows\system32\kernel32.dll
C:\Windows\system32\KERNELBASE.dll
E:\my\LIBEAY_FIPS32.dll
...
对于32位进程,有一些额外的“哇”废话,即:

E:\my\my32.exe
C:\Windows\SYSTEM32\ntdll.dll
C:\Windows\SYSTEM32\wow64.dll
C:\Windows\SYSTEM32\wow64win.dll
C:\Windows\SYSTEM32\wow64cpu.dll
C:\Windows\SysWOW64\ntdll.dll
C:\Windows\syswow64\kernel32.dll
C:\Windows\syswow64\KERNELBASE.dll
E:\my\LIBEAY_FIPS32.dll
...
现在,与我开始时相比,这是一个巨大的改进,现在得到“0xc0000018在固定地址加载失败错误”的几率比LIBEAY_FIPS32.dll加载到进程中的第25个dll时要低得多

然而,考虑到这些系统DLL是可重新定位的,并且可能会受到ASLR的影响,我认为负载故障仍然是可能的

虽然我不想关闭Windows ASLR,但我想告诉ASLR“请避免以下固定地址范围,因为我确实需要在该地址加载固定DLL”。有办法吗

或者以某种方式控制一个或多个的加载地址:ntdll.dll、kernel32.dll、kernelbase.dll

否则,有没有办法强制FIPS openssl dll在一个或多个ntdll.dll、kernel32.dll、kernelbase.dll之前加载到进程中