dekname
Участник
- 44
- 2
Есть ли у тебя адрес это directx device?hook directx после появления окна игры
Есть ли у тебя адрес это directx device?hook directx после появления окна игры
Ок, а без RakNet можно же захукать функцию, которая выводит в чат?Никак
ДаОк, а без RakNet можно же захукать функцию, которая выводит в чат?
Какой адрес и сигнатура у этой функции? Я попробовал похукать функции которые в samp api (CChat::AddChatMessage / CChat::AddMessage). Одна скрашила, другая не выводит ничего в лог.
Хук как ставишь?
PLH::CapstoneDisassembler dis2(PLH::Mode::x86);
PLH::x86Detour detour2(sampapi::GetAddress(0x678A0), (uint64_t)&hk_AddChatMessage, &hookAddChatMessageTramp, dis2);
detour2.hook();
void CALLBACK hk_AddChatMessage(int nType, const char* szText, const char* szPrefix, unsigned long textColor, unsigned long prefixColor)
{
f << szText << std::endl;
PLH::FnCast(hookAddChatMessageTramp, &hk_AddChatMessage)(nType, szText, szPrefix, textColor, prefixColor);
}
__thiscall функция потому чтоx86 jmp (detour) hook. По адресу: base + 0x64450 / base + 0x645A0
UPD: Крашит AddChatMessage. Код:
C++:PLH::CapstoneDisassembler dis2(PLH::Mode::x86); PLH::x86Detour detour2(sampapi::GetAddress(0x678A0), (uint64_t)&hk_AddChatMessage, &hookAddChatMessageTramp, dis2); detour2.hook(); void CALLBACK hk_AddChatMessage(int nType, const char* szText, const char* szPrefix, unsigned long textColor, unsigned long prefixColor) { f << szText << std::endl; PLH::FnCast(hookAddChatMessageTramp, &hk_AddChatMessage)(nType, szText, szPrefix, textColor, prefixColor); }
Я попытался захукать через __fastcall (как есть методы в инете). В лог даже вывело: Connecting to xxx.xx.x.x:7777...__thiscall функция потому что
PLH::CapstoneDisassembler dis2(PLH::Mode::x86);
PLH::x86Detour detour2(sampapi::GetAddress(0x64010), (uint64_t)&hk_AddChatMessage, &hookAddChatMessageTramp, dis2);
detour2.hook();
void __fastcall hk_AddChatMessage(void* pCChat, const char* szPrefix, unsigned long prefixColor, const char* szText)
{
if (pCChat == nullptr)
{
return;
}
f << szText << std::endl;
PLH::FnCast(hookAddChatMessageTramp, reinterpret_cast<tAddChatMessage>(hk_AddChatMessage))(pCChat, szPrefix, prefixColor, szText);
}
#define PH_UNUSED(a) (void)a
template<typename T>
T FnCast(uint64_t fnToCast, T pFnCastTo) {
PH_UNUSED(pFnCastTo);
return (T)fnToCast;
}
They add all sorts like PolyHook libraries to the project, and they can't figure them out themselves. At least learn the hook logic.Я попытался захукать через __fastcall (как есть методы в инете). В лог даже вывело: Connecting to xxx.xx.x.x:7777...
Но после этого крашнуло с экшешином:
Код:
C++:PLH::CapstoneDisassembler dis2(PLH::Mode::x86); PLH::x86Detour detour2(sampapi::GetAddress(0x64010), (uint64_t)&hk_AddChatMessage, &hookAddChatMessageTramp, dis2); detour2.hook();
Код:void __fastcall hk_AddChatMessage(void* pCChat, const char* text, DWORD textColor) { if (pCChat == nullptr) { return; } f << text << std::endl; PLH::FnCast(hookAddChatMessageTramp, (tAddChatMessage)&hk_AddChatMessage)(pCChat, text, textColor); }
FnCast:
C++:#define PH_UNUSED(a) (void)a
Как правильно захучить __thiscall?C++:template<typename T> T FnCast(uint64_t fnToCast, T pFnCastTo) { PH_UNUSED(pFnCastTo); return (T)fnToCast; }
Как правильно захучить __thiscall?
// прототип функции
typedef void(__fastcall* hookedAddChatMessage_t)(void* _this, DWORD EDX, const char* text, DWORD color);
// указатель на оригинальную функцию / трамплин
hookedAddChatMessage_t orig_AddChatMessage;
void __fastcall hooked_AddChatMessage(void* _this, DWORD EDX, const char* text, DWORD color)
{
// любые действия
return orig_AddChatMessage(_this, EDX, text, color);
}
С таким кодом просто крашит (в логе даже нет сообщения о коннекте):Использовать __fastcall и не терять EDX.
C++:// прототип функции typedef void(__fastcall* hookedAddChatMessage_t)(void* _this, DWORD EDX, const char* text, DWORD color); // указатель на оригинальную функцию / трамплин hookedAddChatMessage_t orig_AddChatMessage; void __fastcall hooked_AddChatMessage(void* _this, DWORD EDX, const char* text, DWORD color) { // любые действия return orig_AddChatMessage(_this, EDX, text, color); }
using AddChatMessage_t = void(__thiscall*)(void* pCChat, DWORD EDX, const char* szPrefix, unsigned long prefixColor, const char* szText);
void __fastcall hk_AddChatMessage(void* pCChat, DWORD EDX, const char* szPrefix, unsigned long prefixColor, const char* szText)
{
if (pCChat == nullptr)
{
return;
}
f << szText << std::endl;
PLH::FnCast(hookAddChatMessageTramp, reinterpret_cast<AddChatMessage_t >(hk_AddChatMessage))(pCChat, EDX, szPrefix, prefixColor, szText);
}