Вопрос Трамплин хук

Новичок
Статус
Оффлайн
Регистрация
20 Май 2020
Сообщения
1
Реакции[?]
0
Поинты[?]
0
#include <iostream>
#include "hk.h"

bool Detour32(char* src, char* dst, const intptr_t len)
{
if (len < 5) return false;

DWORD curProtection;
VirtualProtect(src, len, PAGE_EXECUTE_READWRITE, &curProtection);

intptr_t relativeAddress = (intptr_t)(dst - (intptr_t)src) - 5;

*src = (char)'\xE9';
*(intptr_t*)((intptr_t)src + 1) = relativeAddress;

VirtualProtect(src, len, curProtection, &curProtection);
return true;
}

char* TrampHook32(char* src, char* dst, const intptr_t len)
{
// Make sure the length is greater than 5
if (len < 5) return 0;

// Create the gateway (len + 5 for the overwritten bytes + the jmp)
void* gateway = VirtualAlloc(0, len + 5, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);

//Write the stolen bytes into the gateway
memcpy(gateway, src, len);

// Get the gateway to destination addy
intptr_t gatewayRelativeAddr = ((intptr_t)src - (intptr_t)gateway) - 5;

// Add the jmp opcode to the end of the gateway
*(char*)((intptr_t)gateway + len) = 0xE9;
std::cout << (intptr_t)gateway + len + 1 << std::endl;

// Add the address to the jmp
*(intptr_t*)((intptr_t)gateway + len + 1) = gatewayRelativeAddr;

// Perform the detour
Detour32(src, dst, len);

return (char*)gateway;
}



void showMessage()
{
std::cout << "Damaged" << std::endl;
}

void __declspec(naked) goSome()
{
__asm {
call showMessage
}
}

DWORD WINAPI HackThread(HMODULE hModule)
{
AllocConsole();
FILE* f;
freopen_s(&f, "CONOUT$", "w", stdout);
intptr_t moduleBase = (intptr_t)GetModuleHandle("ac_client.exe");
DWORD hookAddress = moduleBase + 0x29d1f;

char* res = TrampHook32((char*)hookAddress, (char*)showMessage, 5);
std::cout << res << std::endl;

while (true)
{
Sleep(100);
if (GetAsyncKeyState(VK_NUMPAD7) & 1)
{
break;
}
}

fclose(f);
FreeConsole();
FreeLibraryAndExitThread(hModule, 0);
return 0;
}

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
CloseHandle(CreateThread(nullptr, 0, (LPTHREAD_START_ROUTINE)HackThread, hModule, 0, nullptr));
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

Добрый вечер, пытался разобраться написанием хуков.
Скопировал код с одного популярного борда, но увы почему то у меня не работает, постоянно ошибки после нанесения себе урона.

Пожалуйста, авторизуйтесь для просмотра ссылки.

будто что то не так с хуком либо я не правильно указываю адресс. Я пытаюсь при получении урона просто в консоль вывести сообщение, но ничего не получается и на меня ругается наг окошко. Где я тут косячу?
 
Сверху Снизу