Посоны привет! Я тут это все читаю, чето все всё перехватывают. А я понять не могу - это все делается на клиенте с откусанной темидой и ГГ или прям со всем этим добром? Я просто пытаюсь делать хук и у меня крэшится. Причем крэшится не доходя до моего кода, но и не сразу, а только там где я залез своми грязнуми руками в енжин.длл.
Моя первая цель - вызвать MessageBox при вызове OnNpcHtmlMessage
Вот тут хукаю
Код:
bool Entry()
{
HMODULE hEngine = GetModuleHandle(L"Engine.dll");
if (hEngine == INVALID_HANDLE_VALUE)
MessageBox(HWND_DESKTOP, L"Can't get module handle.", L"Error", MB_OK | MB_ICONERROR);
char* addr = (char*)GetProcAddress(hEngine, "?OnNpcHtmlMessage@UGameEngine@@UAEHPAUUser@@PA_WHH@Z");
if (!addr)
MessageBox(HWND_DESKTOP, L"Can't get proc address.", L"Error", MB_OK | MB_ICONERROR);
DWORD protection;
DWORD ff = (DWORD)UGameEngine__OnNpcHtmlMessage;
Log::putstring(L"dump_UGameEngine__OnNpcHtmlMessage.txt", L"UGameEngine__OnNpcHtmlMessage = 0x%0X\n", ff);
Log::putstring(L"dump_UGameEngine__OnNpcHtmlMessage.txt", L"UGameEngine::OnNpcHtmlMessage = 0x%0X\n", (DWORD)addr);
//VirtualProtect(addr, 5, PAGE_EXECUTE_READWRITE, &protection);
*addr = char(0xE9); // op code
memcpy(addr + 1, &ff, 4);
//VirtualProtect(addr, 5, protection, 0);
HANDLE hDumpFile = CreateFile(L"dump.txt", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, NULL);
DWORD bytesWritten = 0;
WriteFile(hDumpFile, addr, 200, &bytesWritten, NULL);
CloseHandle(hDumpFile);
MessageBox(HWND_DESKTOP, L"I am in...", L"Yop", MB_OK);
return true;
}
тут я просто инжеклю jmp на мою функцию представленую ниже
Код:
__declspec(naked) void UGameEngine__OnNpcHtmlMessage()
{
MessageBox(HWND_DESKTOP, L"Called 'UGameEngine__OnNpcHtmlMessage'", L"Yop", MB_OK);
}
Это все делается под геймгуардом и с темидой, не знаю влияет ли это как то. Просто бот л2тавер показывает что это возможно. Подсобите че не так делаю? Спасибо.