Step 1
Code:
typedef int(__stdcall* PFN_AhnHS_Callback)(long lCode, long lParamSize, void* pParam);
typedef int(__stdcall* PFN_CallBack)(const char*, PFN_AhnHS_Callback, int, const char*, unsigned int, unsigned int);
PFN_CallBack AhnHS_Initialize_CallBack;
void MyHook()
{
DWORD dwAddr = FindPattern(0x401000, 0x334000, (PBYTE)"\x55\x8B\xEC\x81\xEC\xB0\x02\x00\x00", "xxxxxxx??");
AhnHS_Initialize_CallBack = (PFN_CallBack)(DetourFunction((PBYTE)dwAddr, (PBYTE)AhnHS_Initialize));
}
Step 2, Create custom
HS_CallbackProc, or you can copy from 4Story Source Files
Code:
int __stdcall HS_CallbackProc(long lCode, long lParamSize, void* pParam)
{
Log("Hack Found >> %d", lCode);
return 1;
}
Step3, Hook
AhnHS_InitializeA, and call back the original function.
Code:
int __stdcall AhnHS_Initialize(const char* szFileNameA, PFN_AhnHS_Callback pfn_Callback, int nGameCode, const char* szLicenseKeyA, unsigned int unOption, unsigned int unSHackSensingRatio)
{
DWORD dwOption = 0;
//dwOption = AHNHS_CHKOPT_ALL | AHNHS_CHKOPT_STANDALONE | AHNHS_DISPLAY_HACKSHIELD_TRAYICON | AHNHS_CHKOPT_UPDATED_FILE_CHECK | AHNHS_CHKOPT_SELF_DESTRUCTION | AHNHS_CHKOPT_PROTECT_D3DX;
return AhnHS_Initialize_CallBack(szFileNameA, HS_CallbackProc, nGameCode, szLicenseKeyA, dwOption, unSHackSensingRatio);
}