winapi - ASLR 会导致地址与 DLL 注入(inject)的冲突吗?

标签 winapi dll inject aslr createremotethread

我在阅读有关 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/

相关文章:

java - 如何使用 guice 仅注入(inject)一个变量?

spring - 注入(inject)用 Spring 扩展抽象类的类列表

c++ - 在 Windows API 上创建子窗口

c - 为什么父窗口的裁剪矩形和子窗口的大小一样?

c++ - 获取 DLL 文件的外部命令

c++ - 用于打开资源文件并从中获取数据的 Win32 api

c++ - crt0 是否加载 msvcrt.dll?

c++ - 将 <windows.h> 的函数与其他类混合使用是一种不好的做法吗?

winapi - Windows 10 API 离线文档

javascript - 存在适用于 Android 的 stringByEvaluatingJavaScriptFromString