CreateThread from DLL - ERROR_NOT_ENOUGH_MEMORY - PullRequest
0 голосов
/ 04 мая 2011

У меня есть эта dll, которая создает поток при загрузке LoadLibraryA, dll внедряется в другой процесс с помощью RtlCreateUserThread, инъекция выполняется успешно, dll загружается в целевой процесс (поток32 ядра LoadLibraryA есть), но когда он приходит к CreateThread, я получил ERROR_NOT_ENOUGH_MEMORY, так где же проблема RtlCreateUserThread или целевой процесс или сама DLL? и как я могу решить это? большое спасибо !!

Ответы [ 2 ]

0 голосов
/ 01 июня 2016

Проблема в вашей цели.Вы загрузили 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 имеет, но это было написано на месте.

Пожалуйста:)

0 голосов
/ 05 мая 2011

Ну, я решил, я использовал RtlCreateUserThread внутри dll вместо CreateThread, спасибо всем в любом случае, извините за неудобства.

...