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

时间:2016-02-28 01:05:54

标签: windows dll openssl fips aslr

FIPS验证的OpenSSL库必须在固定地址加载libeay32.dll。 例如,在Fixed address is occupied in .NET

指示了这一点

使用以下所述的技术:IIS7 App Pool can't load library with Fixed Base AddressHow do you disable ASLR (address space layout randomization) on Windows 7 x64?,和 How to run a PE image without linking kernel32.dll and ntdll.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无法加载FIXED地址错误”的可能性现在远低于LIBEAY_FIPS32.dll在加载到进程中的第25个DLL周围的情况

但是,鉴于这些系统DLL是可重定位的,并且可能受ASLR影响,我预计仍然可能出现负载故障。

虽然我不想关闭Windows ASLR,但我想以某种方式告诉ASLR“请避免以下FIXED地址范围,因为我真的需要在该地址加载一个FIXED DLL”。有没有办法做到这一点?

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

如果失败了,有没有办法强制FIPS openssl dll在一个或多个之前加载进程:ntdll.dll,kernel32.dll,kernelbase.dll?

0 个答案:

没有答案
相关问题