我写了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内部的ua参数,它包含一些垃圾。
以下是整个项目文件:
http://pastebin.com/gh4SnhmV
http://pastebin.com/Sq7hpSVx
http://pastebin.com/dvgXpUYz
更新2
TestFunction应该有一些特定的类型,还是只要它只有一个LPVOID类型的参数,我就可以使用它?我很困惑。有人能给我举个例子,说明如何用一些参数调用注入的dll函数吗?
发布于 2011-07-05 12:24:04
您需要在另一个进程的内存中分配数据。为此,使用VirtualAllocEx函数,它将返回传递给CreateRemoteThread的另一个进程内存中的地址。
CreateRemoteThread的工作方式与CreateThread完全相同,只是它在远程进程中创建线程。需要记住的一点是,当您在lpParameter中传递指向对象的指针时,运行在不同虚拟地址空间中的远程线程将尝试访问该地址空间中的地址。
https://stackoverflow.com/questions/6582096
复制相似问题