sample for windows usermode
#include<windows.h>LONGIATHook(
__in_optvoid*pImageBase ,
__in_optchar*pszImportDllName ,
__inchar*pszRoutineName ,
__invoid*pFakeRoutine ,
__outHANDLE*phHook
);
LONGUnIATHook( __inHANDLEhHook );
void*GetIATHookOrign( __inHANDLEhHook );
typedefint (__stdcall *LPFN_MessageBoxA)( __in_optHWNDhWnd , __in_optchar*lpText , __in_optchar*lpCaption , __inUINTuType);
HANDLEg_hHook_MessageBoxA=NULL;
//////////////////////////////////////////////////////////////////////////int __stdcall Fake_MessageBoxA( __in_optHWNDhWnd , __in_optchar*lpText , __in_optchar*lpCaption , __inUINTuType)
{
LPFN_MessageBoxAfnOrigin= (LPFN_MessageBoxA)GetIATHookOrign(g_hHook_MessageBoxA);
returnfnOrigin(hWnd , "hook" , lpCaption , uType);
}
int __cdecl wmain(intnArgc, WCHAR**Argv)
{
do {
UNREFERENCED_PARAMETER(nArgc);
UNREFERENCED_PARAMETER(Argv);
IATHook(
GetModuleHandleW(NULL) ,
"user32.dll" , "MessageBoxA" ,
Fake_MessageBoxA ,
&g_hHook_MessageBoxA
);
MessageBoxA(NULL , "test" , "caption" , 0);
UnIATHook( g_hHook_MessageBoxA);
MessageBoxA(NULL , "test" , "caption" , 0);
} while (FALSE);
return0;
}