Хук появления диалога без SF

RedHolms

Известный
Автор темы
Проверенный
617
360
Вопрос прост, как захукать появление диалога без SF, только sampapi
Пробовал захукать Receive у RakClientInterface'а, но поскольку все RPC забирает RakPeer, хукаются только пакеты
Прошу гуру подсказать
 

RedHolms

Известный
Автор темы
Проверенный
617
360
C++:
using CDialog__Show_t = void(__thiscall*)(samp::CDialog*, int, int, const char*, const char*, const char*, BOOL);
#if defined(BUILD_R3)
#define CDialog__Show 0x6F8C0
#else
#define CDialog__Show 0x6B9C0
#endif

static kthook::kthook_signal<CDialog__Show_t> show_dialog_hook;

static bool OnShowDialog(const kthook::kthook_signal<CDialog__Show_t>& hk, samp::CDialog*, int nId, int, const char*, const char*, const char*, BOOL) {
   _DebugPrn("Show dialog %d", nId);
   return false;
}

void drugstimer_Init() {
   nlohmann::json& settings = getSubSettings("drugstimer", DefaultSettings);

   drugstimer_Key = settings["key"];

   show_dialog_hook.set_dest(sampapi::GetAddress(CDialog__Show));
   show_dialog_hook.before.connect(OnShowDialog);
}
 

F0RQU1N and

Известный
1,310
494
C++:
typedef bool(__thiscall* ShowDialog)(int*, int, int, const char*, const char*, int, int, const char*);
ShowDialog oShowDialog = nullptr;

bool hkDialog(int* pThis, int a2, int a3, const char* a4, const char* a5, int a6, int a7, const char* a8) {
    printf("[hkDialog] id: %d\n", a2);

    return false;
    //return oShowDialog(pThis, nId, nType, szCaption, szText, szLeftButton, szRightButton, bServerside);
}


...
DWORD hook_addr = (DWORD)GetModuleHandleW(L"samp.dll") + 0x6B9C0;
MH_CreateHook((void*)hook_addr, &hkDialog, (void**)&oShowDialog);
MH_EnableHook((void*)hook_addr);
...

1656770288728.png


Кстати это не showdialog, а draw
1656770658392.png
 
Последнее редактирование:

sizeoftrickster

…And Megadeth For All?
Проверенный
121
436
0x6B9C0 r1
__thiscall:
uintptr_t pThis, int nId, int nType, const char *szCaption, const char *szText, const char *szLeftButton, const char *szRightButton, BOOL bServerside
C++:
ShowDialog:
R1 -> 0x6B9C0
R2 -> 0x6BA70
R3 -> 0x6F8C0
R4 -> 0x6FFE0
EntryPoint:
R1 -> 0x31DF13
R2 -> 0x3195DD
R3 -> 0xCC4D0
R4 -> 0xCBCB0