Я написал 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 (). Не знаю, что не так.
Как кортик уже заявил, точка входа 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()
но только если задействована синхронизация.
Других решений пока нет …