3

我编写了运行良好的 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 中传递“测试”字符串。但是后来我检查了 TestFunction 中的 ua 参数,它包含一些垃圾。

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

更新 2
TestFunction 是否应该有一些特定的原型,或者我可以使用任何一个,只要它只有一个 LPVOID 类型的参数?我很困惑。谁能给我一个例子,说明如何用一些参数调用注入的 dll 函数?

4

1 回答 1

6

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

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

于 2011-07-05T12:24:04.003 回答