Начинающий
-
Автор темы
- #1
Привет, заранее спасибо всем кто ответит.
В общем хочу просто заменить инструкцию je на jmp, так сказать заменить условный переход на безусловный.
Тело хука дефолтное, делаю вроде правильно, но по итогу все идет не по плану и адрес считается вообще другой.
Очевидно что где-то обосрался, но понять где именно уже долгое время не могу.
В общем хочу просто заменить инструкцию je на jmp, так сказать заменить условный переход на безусловный.
Тело хука дефолтное, делаю вроде правильно, но по итогу все идет не по плану и адрес считается вообще другой.
Очевидно что где-то обосрался, но понять где именно уже долгое время не могу.
C++:
include <Windows.h>
bool Hook(void* toHook, void* ourFunct, int len) {
if (len < 5) {
return false;
}
DWORD curProtection;
VirtualProtect(toHook, len, PAGE_EXECUTE_READWRITE, &curProtection);
memset(toHook, 0x90, len);
DWORD relativeAddress = ((DWORD)ourFunct - (DWORD)toHook) - 5;
*(BYTE*)toHook = 0xE9;
*(DWORD*)((DWORD)toHook + 1) = relativeAddress;
DWORD temp;
VirtualProtect(toHook, len, curProtection, &temp);
return true;
}
DWORD jmpBackAddy;
void __declspec(naked) ourFunct()
{
__asm
{
jmp [jmpBackAddy]
}
}
DWORD WINAPI MainThread(LPVOID param)
{
uintptr_t modBase = (uintptr_t)GetModuleHandle(L"audio.asi");
int hookLength = 6;
DWORD hookAddress = modBase + 0xCF42E;
jmpBackAddy = hookAddress - modBase + hookLength; // Не уверен насчет подсчета дельта-смещения, но вроде должно быть так.
Hook((void*)hookAddress, ourFunct, hookLength);
FreeLibraryAndExitThread((HMODULE)param, 0);
return 0;
}
BOOL WINAPI DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved) {
switch (dwReason) {
case DLL_PROCESS_ATTACH:
CreateThread(0, 0, MainThread, hModule, 0, 0);
break;
}
return TRUE;
}