我在阅读有关 DLL 注入(inject)技术的文章时,想到了这个问题。
假设我们要将 DLL 注入(inject)到 Windows 7 中的目标进程中,该进程为 kernel32.dll 启用了 ASLR
所以任何一段注入(inject)的代码都不能使用任何 winapi 或任何系统调用,因为假设注入(inject)器代码中的 loadLibrary 函数的地址将不同于目标进程中的地址 loadLibrary,不是吗?
所以这样的调用 CreateRemoteThread
是行不通的:
CreateRemoteThread(hProcess,
NULL,
0,
(LPTHREAD_START_ROUTINE) ::GetProcAddress(hKernel32,
"LoadLibraryA" ),
pLibRemote,
0,
NULL );
::WaitForSingleObject( hThread, INFINITE );
如果我的推理有误,请纠正我。
最佳答案
不,我认为这是不正确的。 kernel32.dll
等模块的地址在机器启动时是随机的,但对所有进程都是相同的。
关于winapi - ASLR 会导致地址与 DLL 注入(inject)的冲突吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8568901/