我有这个 dll,它在 LoadLibraryA 加载时创建一个线程,使用 RtlCreateUserThread 将 dll 注入另一个进程,注入成功,将 dll 加载到目标进程中(kernel32 LoadLibraryA 线程在那里)但是当涉及到CreateThread 我得到 ERROR_NOT_ENOUGH_MEMORY,那么问题出在 RtlCreateUserThread 或目标进程或 DLL 本身?我该如何解决?多谢!!
问问题
1541 次
2 回答
0
好吧,我确实解决了,我在 dll 中使用了 RtlCreateUserThread 而不是 CreateThread,谢谢大家,不便之处敬请原谅。
于 2011-05-05T09:42:25.100 回答
0
问题出在你的目标上。你加载Kernel32
了,很好,但是你没有告诉目标进程函数的地址在哪里。我假设您从主机进程中注入了一个代码段,因此没有像 DLL 注入那样解析用于注入目标进程的导入表。
您可以CreateThread
从注入的函数中调用,但是您需要先加载它的地址!
typedef DATATYPE_OF_CREATETHREAD (__stdcall *MyCreateThread)(PARAMS_OF_CREATETHREAD);
MyCreateThread _MyCreateThread;
_MyCreateThread = (MyCreateThread)GetProcAddress("kernel32.dll", "CreateThread");
_MyCreateThread(PARAMS_TO_PASS); // CreateThread, with it's address loaded in memory of your injected code segment/function
像那样^,您将能够CreateThread
从注入的函数中调用。
PS我不记得参数createthread有,但这是当场写的。
别客气 :)
于 2016-06-01T05:36:31.687 回答