Hook简介

2015-07-27  本文已影响188人  eesly_yuan
概要
hook原理
api
HHOOK WINAPI SetWindowsHookEx( 
_In_ int       idHook, //监视的消息类型
_In_ HOOKPROC  lpfn,  //钩子处理函数地址
_In_ HINSTANCE hMod, //钩子处理函数所在的模块,当前进程该项可写成NULL
_In_ DWORD     dwThreadId //需要监视的线程ID,0为监视当前所有运行的线程
);

钩子处理函数调用过程:当进程A的线程准备向any进程发送消息时,如果消息正在被监视,则将被钩子截获,系统将检查该钩子的钩子函数所在的DLL是否已经被映射进程A的地址空间中。如果尚未映射,系统会强制将该DLL映射到进程A的地址空间。然后获得钩子函数在进程A的虚拟地址,并调用钩子函数。(这也是DLL注入的一种方式)

BOOL WINAPI UnhookWindowsHookEx(_In_ HHOOK hhk); //卸载钩子
LRESULT WINAPI CallNextHookEx(  //传递消息给下一个钩子
_In_opt_ HHOOK  hhk, 
_In_     int    nCode, 
_In_     WPARAM wParam, 
_In_     LPARAM lParam);
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam) {
    ...
    return CallNextHookEx(hhook, nCode, wParam, lParam); 
}
ref
上一篇 下一篇

猜你喜欢

热点阅读