我有一个DLL注入到另一个进程,但我希望能够从我的应用程序调用该DLL上的导出.我在其他地方读到你需要SendMessage API,但我不知道该怎么做.有没有关于如何做到这一点的示例代码?
Set*_*gie 10
虽然不可能在另一个进程中直接调用函数,但只需几步和Windows API就可以间接地间接调用它.
LoadLibrary,并GetProcAddress从自己的过程.kernel32.dll应该在每个进程中的相同地址加载,因此您可以依赖它们存在于您注入的进程中struct将保存您要传递给函数的所有参数,这些参数将在另一个进程中调用函数(因为CreateRemoteThread只能将一个参数传递给函数,因此我们将使用它来传递指向结构的指针)至少包含成员函数指针持有的地址LoadLibrary和GetProcAddressVirtualAllocEx,然后使用正确的信息填充它WriteProcessMemorystruct您编写的指针,使用LoadLibrary/ GetProcAddress调用所需的函数.请记住在传递函数的结构中使用指向这些函数的指针,而不是名称.VirtualAllocEx,确保传递VAX的PAGE_EXECUTE_READWRITE标志,以便它可以容纳可执行代码Read/WriteProcessMemoryVirtualAllocEx)CreateRemoteThread.确保传递给函数的所有数据都存储在结构中和/或驻留在远程进程的地址空间中(使用VirtualAllocEx/来获取它)WriteProcessMemory.
它可能看起来有点牵扯,但它并不是那么复杂.如果您需要一些帮助,请随时在评论中提问.
一般来说,您不能直接调用另一个进程中的函数。但是,您可以使用一些解决方法。
首先,如果您知道导出的地址(很多时候情况并非如此),并且您调用的函数使用调用约定__stdcall,采用指针大小的整数作为参数,并返回 DWORD,那么您可以可以用来CreateRemoteThread在远程进程的线程中执行它。这通常用于运行LoadLibrary将 DLL 注入到目标进程中,因为LoadLibrary它会加载到给定计算机上所有进程的相同地址中。
否则,您注入的 DLL 将需要与调用它的进程执行某种 RPC。例如,您可以让注入的 DLL 在其 DLL_PROCESS_ATTACH 处理程序中生成一个线程,该线程又连接到命名管道,或者通过 COM 或其他方式连接到主进程。
| 归档时间: |
|
| 查看次数: |
7173 次 |
| 最近记录: |