Итак, у меня есть эта dll:
#include <Windows.h>
#include <iostream>
HMODULE myhModule;
DWORD __stdcall EjectThread(LPVOID lpParameter) {
Sleep(100);
FreeLibraryAndExitThread(myhModule,0);
}
DWORD WINAPI MainThread(LPVOID param) // our main thread
{
AllocConsole(); // enables the console
freopen("CONIN$", "r", stdin); // makes it possible to output to output to console with cout.
freopen("CONOUT$", "w", stdout);
while (true) {
Sleep(100);
if (GetAsyncKeyState(VK_DELETE) & 1) {
cout << "[+] Attempting dll unload" << endl;
Sleep(800);
break;
}
}
FreeConsole();
CreateThread(NULL, 0, EjectThread, NULL, 0, 0);
return false;
}
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
if(ul_reason_for_call == DLL_PROCESS_ATTACH) {// gets runned when injected
myhModule = hModule;
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MainThread, NULL, 0, 0); // creates our main thread
return TRUE;
}
return FALSE;
}
Пояснение :
Когда dll загружен, мы создаем переменную myhModule
, чтобы иметь возможность назначать к нему базовый адрес нашей dll, затем мы создаем mainthread, который создаст поток, вызывающий функцию ejectThread, которая должна выгружать dll, используя myhModule
и метод FreeLibraryAndExitThread
при нажатии клавиши VK_DELETE
.
Шаги и возникшие ошибки :
Поэтому я внедряю свою dll в процесс с помощью инжектора, затем, если нажать клавишу Delete, она выгружает dll, однако я получаю ошибка нарушения прав доступа, сообщающая, что я не могу получить доступ к процессу в ячейке памяти.
Ошибка :
Exception thrown at 0x1CD62194 in process.exe: 0xC0000005: Access violation executing location 0x1CD62194.
Что я сделал не так, почему он выбрасывает access violation
ошибка?
Заранее спасибо.