我有这个dll在LoadLibraryA加载时创建一个线程,使用RtlCreateUserThread将dll注入另一个进程,注入成功,dll被加载到目标进程(kernel32 LoadLibraryA线程在那里)但是当它来到CreateThread我得到了ERROR_NOT_ENOUGH_MEMORY,那么问题RtlCreateUserThread或目标进程或DLL本身在哪里?我怎么解决它?非常感谢!!
答案 0 :(得分:0)
好吧,我确实解决了,我在dll中使用了RtlCreateUserThread而不是CreateThread,无论如何,谢谢大家,对不起有任何不便。
答案 1 :(得分: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
。
P.S。我不记得createthread的params,但这是当场写的。
欢迎您:)