3

好的,所以我对C++ Dll Injection的第 3 步有疑问,即:

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

所以我的问题是:在我使用 分配内存VirtualAllocEx并使用 编写代码之后WriteProcessMemory,我该如何调用CreateRemoteThread——我的意思是第四个和第五个参数是什么?

我的代码:

AllocatedMem = VirtualAllocEx(Proc, IntPtr.Zero, code.Length,
    AllocationType.Reserve | AllocationType.Commit, MemoryProtection.ReadWrite);

WriteProcessMemory(Proc, AllocatedMem, code, code.Length, IntPtr.Zero);

CreateRemoteThread(Proc, IntPtr.Zero, 0, AllocatedMem,
    IntPtr.Zero, 0, IntPtr.Zero);
4

2 回答 2

0

来自MSDN Documentation

HANDLE WINAPI CreateRemoteThread(
 _In_   HANDLE hProcess,
 _In_   LPSECURITY_ATTRIBUTES lpThreadAttributes,
 _In_   SIZE_T dwStackSize,
 _In_   LPTHREAD_START_ROUTINE lpStartAddress,
 _In_   LPVOID lpParameter,
 _In_   DWORD dwCreationFlags,
 _Out_  LPDWORD lpThreadId
);

因此,您的第 4 个参数应该是指向 的指针LoadLibrary,而第 5 个参数应该是要运行的代码。

更新

例子:

LoadLibAddy = GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA"); 

CreateRemoteThread(
  Proc, 
  IntPtr.Zero, 
  0,
  LoadLibAddy,
  AllocatedMem, 
  0, 
  IntPtr.Zero
);

注意:您需要调用附加功能,并且您的“代码”应该是本机 DLL 的路径。

于 2012-08-16T18:22:50.833 回答
0

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682437(v=vs.85).aspx

HANDLE WINAPI CreateRemoteThread(
  _In_   HANDLE hProcess,
  _In_   LPSECURITY_ATTRIBUTES lpThreadAttributes,
  _In_   SIZE_T dwStackSize,
  _In_   LPTHREAD_START_ROUTINE lpStartAddress,
  _In_   LPVOID lpParameter,
  _In_   DWORD dwCreationFlags,
  _Out_  LPDWORD lpThreadId
);

hProcess 是应在其中创建线程的进程的句柄。

lpThreadAttributes 可以为 NULL 以指定“使用默认值”

dwStackSize 可以为零以指定“使用默认值”

lpStartAddress 是线程将开始执行的 FOREIGN PROCESS中的地址

lpParameter 是在外部进程中传递给ThreadMain 的参数(即在外部进程中,假设lpStartAddress 使用WINAPI 调用约定调用,lpParameter 作为唯一参数)。

dwCreationFlags 可以为零。

lpThreadId 应该是一个指向 DWORD 的指针,如果成功则接收线程 ID。

如果将 lpStartAddress 设置为 LoadLibraryW 的地址,并将 lpParameter 设置为在 FOREIGN PROCESS中指向 L"foo.dll" 的指针,那么当线程在外部进程中启动时,它将立即调用 LoadLibraryW(L"foo.dll") in外部进程,允许您从 DllMain 内部运行代码。

于 2012-08-16T18:25:08.557 回答