Win32 Форма для инъекции DLL

Я создал dll с формой в нем, и когда мы вводим dll, форма открывается.
Но проблема в том, что когда я это делаю, процесс, которому я впрыснул, застрял, и я не могу с ним заметить.

вот что я сделал.

DWORD WINAPI MessageLoop(HINSTANCE hInstance)
{
hWindow = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DLGPROC(WindowProc));

MSG Msg;
while(GetMessage(&Msg, 0, 0, 0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}

return 0;
}

и инъекция:

DWORD WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPSTR lpszReserved)
{
if(dwReason == DLL_PROCESS_ATTACH)
{
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)MessageLoop(hInstance), 0, 0, 0);
}

return 0;
}

@ Реми Лебо:

DWORD WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPSTR lpszReserved)
{
if(dwReason == DLL_PROCESS_ATTACH)
{
CreateThread(0, 0, &MessageLoop, hInstance, 0, 0);
}

return 0;
}

0

Решение

Ваш звонок в CreateThread() неправильно. Вы не передаете адрес MessageLoop() к этому, вы на самом деле звоните MessageLoop() вместо. Попробуй это:

DWORD WINAPI MessageLoop(LPVOID lpParameter)
{
HINSTANCE hInstance = (HINSTANCE) lpParameter;
...
}

CreateThread(0, 0, &MessageLoop, hInstance, 0, 0);

КСТАТИ, CreateThread() не безопасно звонить DllMain(), Это четко указано в различной документации MSDN. Вы должны будете переместить это из DllMain()Например, если DLL экспортирует отдельную функцию, которая вызывает CreateThread() внутренне, и затем ваш инъекционный код вызывает экспортированную функцию после загрузки DLL в память.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]