HOOK相关原理与例子
消息 HOOK 原理: 1. 用户输入消息,消息被放到系统消息队列。 2. 程序发生了某些需要获取输入的事件,就从系统消息队列拿出消息放到程序消息队列中。 3. 应用程序检测到有新的消息进入到程序消息队列中后,调用相应的事件去处理该消息。 所以在系统消息队列与程序消息队列的中间安装 hook,即可获取消息队列中的信息。 安装: SetWindowsHookEx(键盘消息(WH_xxx),Hook函数(处理键盘输入的函数),句柄(hook函数所在的DLL的句柄),线程ID(要hook的线程ID,0为所有线程)) API在简单高效的同时也有一个弊端,就是它只能监视较少的消息,如:击键消息、鼠标移动消息、窗口消息。 SEH(调试) HOOK 原理:与调试器工作方式类似,让进程发生异常,然后自己捕获到异常,对于除于被调试状态下的级进行操作。 1. 正常情况下,进程未被其他进程调试时,当进程发生异常事件,系统将捕获该事件,并进行事件处理。 2. 当进程被其他进程调试时,处理该进程的异常事件的工作则交给了调试进程。(调试进程未处理或不关心的调试事件由系统处理) 3. 调试 HOOK的核心思路就是将API的第一个字节修改为0xCC(INT 3,留给调试工具的中断,调试工具运行完后,会将下一条指令手动替换回原先的代码),当API被调用时,由于触发了异常,控制权就被转交给调试器(调试进程)。