3

我非常感谢您在这方面的帮助。

我一直在尝试将 Dll 注入远程进程并在其中进行一些更改,我现在遇到的问题是我不知道如何进行。

首先,这是我迄今为止开发的一段代码:
dllmain.cpp

#include <windows.h>
#include <stdio.h>

BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
switch (reason)
    {
      case DLL_PROCESS_ATTACH:
           MessageBox (0, "From DLL\n", "Process Attach", MB_ICONINFORMATION);
        break;

      case DLL_PROCESS_DETACH:
           MessageBox (0, "From DLL\n", "Process Detach", MB_ICONINFORMATION);
        break;

      case DLL_THREAD_ATTACH:
           MessageBox (0, "From DLL\n", "Thread Attach", MB_ICONINFORMATION);
        break;

      case DLL_THREAD_DETACH:
           MessageBox (0, "From DLL\n", "Thread Detach", MB_ICONINFORMATION);
        break;
    }  

    return TRUE;
}

它只是根据满足的条件显示一个消息框。现在我希望我的 Dll 做的是,在注入远程进程后,我希望它写入一个内存位置并更改它的值。

数据类型:Unsigned Short Int
内存位置:0041D090

我希望一切都清楚,感谢您的耐心等待,感谢您的帮助。

4

1 回答 1

6

您不必编写 DLL 来更改另一个进程在固定地址处的内存。您可以使用WriteProcessMemory().

但是......将DLL注入另一个进程的方法如下......

  1. 用于VirtualAllocEx()将文件路径的长度分配给目标进程内存中的 DLL... 这就像远程执行malloc.

  2. 用于WriteProcessMemory()将 DLL 的文件路径复制到上一步返回的内容中。这就像远程做一个strcpy.

  3. 使用CreateRemoteThread(). 您可以将其LoadLibrary()作为入口点,将步骤 1 和 2 中的文件路径作为参数。老实说,这有点 hacky,但是如果您要注入 DLL,那么您已经很 hacky。另一种技术是使用步骤 1 和 2 将一些机器代码加载到远程进程中并指向它。

请记住,这种技术是破坏目标进程稳定性的好方法。特别是,我不会在最终被运送给其他人的产品中这样做。

于 2009-11-22T02:03:28.173 回答