Когда я пытаюсь ввести эту DLL, это ничего не делает. Даже не показывать MessageBox. Также да, это с ASLR, и я использую чит-движок для получения адресов, так как я пока не знаю, как сделать свой собственный инструмент для этого. Я попытался отладить, поместив функции messageBox в начале каждой функции, включая «DllMain», которая ничего не делала. В любом случае вот код.
bool Hook(void* hookAdress, void* ourFunc, int len)
{
if (len >= 5)
{
DWORD protection;
VirtualProtect(hookAdress, len, PAGE_EXECUTE_READWRITE, &protection);
DWORD relativeAddress = ((DWORD)ourFunc - (DWORD)hookAdress) - 5;
*(BYTE*)hookAdress = 0xE9;
*(DWORD*)((DWORD)hookAdress + 1) = relativeAddress;
DWORD temp;
VirtualProtect(hookAdress, len, PAGE_EXECUTE_READWRITE, &temp);
return true;
}
else
return false;
}
DWORD jmpBack;
_declspec(naked) void ourFunc()
{
_asm
{
sub eax, 0
jmp[jmpBack]
}
}
DWORD WINAPI MainThread(LPVOID param)
{
int hookLength = 8;
DWORD hookAdress = 0x00DB1047;
jmpBack = hookAdress + hookLength;
if (Hook((void*)hookAdress, ourFunc, hookLength))
MessageBoxA(0, "Successfully Hooked!", "Success!", 0);
else
MessageBoxA(0, "Failed To Hook!", "Fail", 0);
while (true)
{
if (GetAsyncKeyState(VK_END))
{
break;
}
Sleep(40);
}
FreeLibraryAndExitThread((HMODULE)param, 0);
return 0;
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
CreateThread(nullptr, 0, MainThread, hModule, 0, nullptr);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Наверное, мне интересно, если это проблема с моим кодом, инструментом для инъекций или конфигурацией свойств моего проекта.