c++ - 在另一个进程加载的 DLL 中调用函数

标签 c++ dll hook

我有一个 DLL,我将其注入(inject)到另一个进程中,但我希望能够从我的应用程序调用该 DLL 上的导出。我在别处读到您必须使用 SendMessage API,但我不知道该怎么做。是否有关于如何完成此操作的示例代码?

最佳答案

虽然无法直接调用另一个进程中的函数,但您可以通过几个步骤和 Windows API 非常轻松地间接调用。

  1. 获取LoadLibrary的地址和 GetProcAddress从你自己的过程。 kernel32.dll应该在每个进程中加载​​到相同的地址,因此您可以依赖它们存在于您正在注入(inject)的进程中
  2. 创建 struct它将保存所有你想传递给你的函数的参数,你的函数将调用另一个进程中的函数(因为 CreateRemoteThread 只能将一个参数传递给一个函数,所以我们将用它来传递一个指向结构的指针)它至少包含成员函数指针来保存 LoadLibrary 的地址和 GetProcAddress
  3. 通过VirtualAllocEx为远程进程中的结构分配足够的内存, 然后用 WriteProcessMemory 填写正确的信息
  4. 写一个函数,取一个指向struct的指针你写的,使用LoadLibrary/GetProcAddress调用你想要的功能。请记住使用指针指向您传递函数的结构中的那些函数,而不是名称。
  5. 在远程进程中分配足够的内存来保存 VirtualAllocEx 的函数, 确保通过 VAX PAGE_EXECUTE_READWRITE标记以便它可以保存可执行代码
  6. 通过Read/WriteProcessMemory 将函数的代码从您的进程读写到其他进程
  7. 使用VirtualAllocEx 调用远程进程中的函数(位于CreateRemoteThread 返回的地址) .

确保您传递给函数的所有数据都存储在结构中和/或驻留在远程进程的地址空间中(通过 VirtualAllocEx/WriteProcessMemory 获取它。

它可能看起来有点复杂,但实际上并没有那么复杂。如果您需要一些帮助,请随时在评论中提问。

关于c++ - 在另一个进程加载的 DLL 中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6631357/

相关文章:

liferay - 在 liferay 门户中自定义用户管理的问题

在 Windows 10 上使用 WinAPI SetWindowsHookExA 的 Python

android - cstdlib 的 NDK 错误

C++14:使用三元表达式从 constexpr 推导出(自动)返回类型

c++ - 如何从带有蒙版的轮廓图像中获取像素值?

c++ - 我想确定动态链接库使用了多少内存

c# - 执行增量构建时 dll 消失

python - 在 Airflow 上存储登录凭据的最佳方式是什么?

c# - 在 C# 代码中重用 .h 文件中的定义语句

c++ - Qt 有没有类似的替代品?