我的问题确实在上面,但是我将在下面提供更多信息:
我有一个程序,它首先获取我的“假”d3d9.dll,然后将该DLL加载到我正在进行逆向工程的游戏中。一段时间后,.dll 被加载,以及所有其他游戏依赖项,我想注入我的 DLL,它将完成逆向工程的所有肮脏工作。
我想我可以使用 LoadLibrary 将此 DLL 加载到程序中,但是当我使用 DLL 时,我注入了运行主要的逆向工程代码。是否有一个函数可以用来调用 d3d9.dll 中的某些内容?
这是因为我仍然需要访问 d3d9 库来渲染我可能想要使用注入的 .dll 添加到屏幕上的内容。我也不想只使用 d3d9.dll,因为这会导致加载时间和内存更改点出现问题。
我也不打算在 DLL 中使用 DllMain,这意味着我还需要从 d3d9.dll 调用远程函数到注入的 DLL,以确保进程安全启动。
抱歉,如果这是一个愚蠢的问题,但是感谢您的回答。
回到过去,我们使用 CreateRemoteThread 并使用 LoadLibraryA 作为 lpStartAddress 的地址(该地址在所有进程中恰好相同)。诀窍是分配您要注入的 DLL 名称VirtualAllocEx
并将其用作lpParameter
。实际上,您的线程使用您要注入的 DLL 名称调用 LoadLibraryA。当 Dll 加载时,Dllmain 被调用,并且您可以在附加 DLL (DLL_PROCESS_ATTACH) 期间在 Dllmain 中运行代码。
This link有一些关于这样做的非常好的信息。然而,该技术依赖于 Dllmain 函数。如果你可以使用 Dllmain 那么这个机制可能会起作用。该文章中的步骤摘要提供了概述:
现在,我们可以通过以下步骤总结该技术:
Retrieve a HANDLE to the remote process (OpenProces).
Allocate memory in the remote process's address space for injected data (VirtualAllocEx).
Write a copy of the initialised INJDATA structure to the allocated memory (WriteProcessMemory).
Allocate memory in the remote process's address space for injected code.
Write a copy of ThreadFunc to the allocated memory.
Start the remote copy of ThreadFunc via CreateRemoteThread.
Wait until the remote thread terminates (WaitForSingleObject).
Retrieve the result from the remote process (ReadProcessMemory or GetExitCodeThread).
Free the memory allocated in Steps #2 and #4 (VirtualFreeEx).
Close the handles retrieved in Steps #6 and #1 (CloseHandle).
我看到你的评论信息太多了。不确定我是否完全理解。然而 Dllmain 有一些限制,比如大多数 Win32 API 调用不能使用。有一些例外,其中之一是 CreateThread。您是否考虑过分离线程来完成工作?如果您在 Dllmain 中使用 CreateThread,它实际上会被阻塞,直到 Dllmain 退出。因此,一旦 Dllmain 返回,线程就会执行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)