我写的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函数的例子?
答案 0 :(得分:6)
您需要在其他进程的内存中分配数据。为此,使用VirtualAllocEx函数,该函数将返回传递给CreateRemoteThread的其他进程内存中的地址。
CreateRemoteThread的工作方式与CreateThread完全相同,只是它在远程进程中创建线程。要记住的一件事是,当您在lpParameter中传递指向对象的指针时,在不同虚拟地址空间中运行的远程线程将尝试访问 地址空间中的该地址。