Dll注射。使用参数执行CreateRemoteThread

时间:2011-07-05 11:43:20

标签: c++ winapi dll code-injection createremotethread

我写的dll注入程序运行得很好。它将dll加载到远程进程并调用一些函数。现在我想将参数传递给该函数。 CreateRemoteThread有lpParameter,但如何在dll中传递该参数以在函数中使用它?

更新: dll入口点很常见:

BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)

Dll只包含一个具有以下原型的功能:

void TestFunction(const char* ua);

调用该功能的代码是:

CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)((void*)codecaveExecAddr), (LPVOID)argumentAddress, 0, NULL);

正如您所见,我尝试在TestFunction中传递“test”字符串。但后来我在TestFunction中检查了它的一个参数,它包含了一些垃圾。

以下是整个项目文件:
http://pastebin.com/gh4SnhmV
http://pastebin.com/Sq7hpSVx
http://pastebin.com/dvgXpUYz

更新2
TestFunction应该有一些特定的预测型,或者只要它只有一个LPVOID类型的参数我可以使用任何吗?我糊涂了。谁能给我一个如何用一些参数调用注入的dll函数的例子?

1 个答案:

答案 0 :(得分:6)

您需要在其他进程的内存中分配数据。为此,使用VirtualAllocEx函数,该函数将返回传递给CreateRemoteThread的其他进程内存中的地址。

CreateRemoteThread的工作方式与CreateThread完全相同,只是它在远程进程中创建线程。要记住的一件事是,当您在lpParameter中传递指向对象的指针时,在不同虚拟地址空间中运行的远程线程将尝试访问 地址空间中的该地址。