DLLMain () не выполняется после внедрения

Я написал DLL и инжектор в C ++. Код dll приведен ниже:

#include <cstdio>
#include <stdio.h>
#include <windows.h>
#include <string>
#include <fstream>
#include <winsock.h>
using namespace std;
#pragma comment(lib, "wsock32.lib")

extern "C" __declspec(dllexport) void UploadFile()
{
.....
}

INT APIENTRY DLLMain(HMODULE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
MessageBox(0,"Process Attach","Info",MB_OK);
UploadFile();
break;
case DLL_THREAD_ATTACH:
MessageBox(0,"Thread Attach","Info",MB_OK);
UploadFile();
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_DETACH:
break;
default:
break;
}
return TRUE;
}

DLL загружает определенный файл на сервер. Я успешно могу ввести DLL в «notepad.exe» с помощью LoadLibrary () и CreateRemoteThread (), но он не выполняется. Даже не функция dllmain (). Не знаю, что не так.

3

Решение

Как кортик уже заявил, точка входа DLL называется DllMain()не DLLMain(), Подпись для DllMain() является:

BOOL WINAPI DllMain(
HINSTANCE hinstDLL,
DWORD fdwReason,
LPVOID lpvReserved
);

От Лучшие практики для создания DLL
, вы никогда не должны выполнять следующие задачи из DllMain ():

…Вызовите функции в User32.dll или Gdi32.dll. Некоторые функции загружают другую DLL, которая не может быть инициализирована …

MessageBox() реализуется в User32.dll так что это может быть возможной причиной DllMain() кажется, не быть вызван.

Неразумно выполнять любые трудоемкие задачи с DllMain() так как это предотвратит загрузку приложением любых других необходимых DLL, так как блокировка загрузчика удерживается внутри DllMain(), Вместо этого создайте поток, чтобы выполнить любую трудоемкую задачу. Связанный документ не рекомендует использовать CreateThread() но только если задействована синхронизация.

4

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

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

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