- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
标题真的解释了这一切,我有一个进程进入另一个进程。我需要能够在这个程序上为某个不是 Windows 标准的 DLL 获取模块句柄,而且我没有主程序的源代码。
我需要使用它来调用带有 GetProcAddress 的导出函数,最后在 CreateRemoteThread 中使用它来远程启动该程序上的任务。
我是否可以从另一个程序而不是它用来创建远程线程的本地程序获取 ModuleHandle?
谢谢。
最佳答案
我看到了三种可能的解决方案。据我所知,没有任何 Windows API 允许您获取另一个进程中模块的函数地址。
解决方案一:
最简单的解决方案,IMO,是将 DLL 注入(inject)目标进程并从目标进程本身检索所有需要的信息。有很多不同的方法可以让你的 DLL 进入目标进程,我最喜欢的是 Reflective DLL Injection .
解决方案 2:
解决方案 2 使用 EnumProcessModules ( Usage ) 从另一个进程获取 HMODULE
引用。您不能在直接调用 GetProcAddress
时使用它们。解决这个问题的方法是使用 LoadLibraryEx 将 DLL 加载到您的进程中。 (“MODULE_NAME”,NULL,DONT_RESOLVE_DLL_REFERENCES)
。在成功加载模块后,这将为您提供一个 HMODULE
实例,您可以将其传递给 GetProcAddress
。
从 GetProcAddress
返回的地址只对您的地址空间有效,但幸运的是它也是相对于模块基址的。通过从地址中减去您的HMODULE
引用,然后将其添加到目标进程中的HMODULE
引用,您将获得目标进程中函数的地址。
例如:targetProc = myProc - myModule + targetModule;
其中 myProc 是一个 char *
,myModule 和 targetModule 是 HMODULE
。
解决方案 3:
解决方案 3 是最难实现的 IMO。此解决方案需要您读取目标的进程内存以定位所需的模块,然后解析模块以找到函数地址。
我没有亲自测试解决方案 2 或 3,但理论上它们应该有效。我个人使用过解决方案 1,并建议将其作为实现此目的的方法。其他两个解决方案需要大量样板代码来模拟现有的 Windows API 方法。
关于c++ - GetModuleHandle(),用于另一个进程中的 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26395243/
我正在阅读 ,它描述了 GetModuleHandle() API 如下: 当您调用此函数时,您会传递一个以零结尾的字符串,该字符串指定加载到调用进程地址空间中的可执行文件或 DLL 文件的名称。 如
DWORD baseAddress = (DWORD) GetModuleHandle(NULL); 如果我将该代码放入 DLL 并将其注入(inject)到进程中,那么它似乎等于注入(inject)
标题真的解释了这一切,我有一个进程进入另一个进程。我需要能够在这个程序上为某个不是 Windows 标准的 DLL 获取模块句柄,而且我没有主程序的源代码。 我需要使用它来调用带有 GetProcAd
我在研究 ZeuS 恶意软件时遇到了 source code : HMODULE _getKernel32Handle(void) { #if defined _WIN64 return NULL
有没有办法在 Linux 上通过 GetModuleHandle(NULL) 将该句柄传递给 dlsym 3 最佳答案 documentation对于 dlopen(3) 状态: The functi
在使用 Windows API 进行编程时,我总是将 WinMain 中的 HINSTANCE 立即设为全局变量。如果我想做一个 OK 按钮,我会这样做(给定全局 HINSTANCE g_hInsta
一旦加载到内存中,我正在尝试获取我的进程的图像库。据我了解,您可以调用 GetModuleHandle 来获取图像库。我的问题是,返回的句柄是否基本上指向 IMAGE_DOS_HEADER 结构,以便
我只是想根据一个很可能类似于“somefile.exe”的字符串来获取模块信息。 MODULEINFO GetModuleInfo(char *szModule) { MODULEINFO m
一旦我的进程加载到内存中,我就试图获取它的图像库。据我了解,您可以调用 GetModuleHandle 来获取图像库。我的问题是,返回的句柄是否实质上指向 IMAGE_DOS_HEADER 结构,以便
我是 C++ 的新手,即使我知道文件存在,这段代码总是返回 NULL: HMODULE hModule = GetModuleHandle(TEXT("C:\\Users\\Steve\\Deskto
我在我的函数中使用了 GetModuleHandle。每次我执行操作时都会调用该函数。我想知道该函数是否被一次又一次地调用,GetModuleHandle 是否会导致任何句柄泄漏(堆栈溢出或内存泄漏或
我正在开发一个与 native DLL 交互的 Web 服务,我使用 LoadLibrary/GetModuleHandle/FreeLIbrary 和 GetProcAddress 来动态加载/卸载
我正在尝试在 Windows Phone 8.0 native C++ 库上加载 winsock dll。 HMODULE ws2mod = GetModuleHandle("ws2_32.dll"
我正在尝试使用 Python 的 C 类型来调用 kernel32 库上的 GetModuleHandleA。我想获得该库的句柄,以便我可以使用它来调用 LoadLibraryA 的 GetProcA
这是我的代码: function GetProcedureAddress(var P: FARPROC; const ModuleName, ProcName: AnsiString): Boolea
这个问题在这里已经有了答案: GetModuleHandle(), for a DLL in another process (1 个回答) 关闭 4 年前。 我正在尝试获取由 notepad.ex
当使用下面的代码时,似乎即使我将 TheFST.dll 链接到调试信息 (/DEBUG),我也无法在断点处停止函数 setSecurityRetriever。 调用 GetModuleHandle 时
我使用的是 Windows 7 Professional x64。 我需要 Hook DefWindowProcW 过程。但是当我尝试通过 GetProcAddress() 获取它的地址时,它返回位于
在许多情况下加载一些较新的 API 会使用这样的构造: (FARPROC&)pfnZwQueryVirtualMemory = ::GetProcAddress(::GetModuleHandle(L
我是一名优秀的程序员,十分优秀!