什么是HOOK
来源:百度百科
Hook是Windows中提供的一种用以替换DOS下“中断”的系统机制,中文译为“挂钩”或“钩子”。在对特定的系统事件进行hook后,一旦发生已hook事件,对该事件进行hook的程序就会收到系统的通知,这时程序就能在第一时间对该事件做出响应。
钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子进程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
DOS时代的HOOK
DOS时代,操作系统提供的编程接口不是API,而是中断向量表,DOS时代的HOOK技术也就是修改中断向量表中的中断地址。
比如:要捕获写操作,就修改中断向量表中关于写文件的中断的地址,将其替换为自定义函数的地址,在自定义函数结束后,再继续调用原来的中断地址。这样,当有程序调用写操作时,自定义函数就会被调用,调用完毕后,才执行真正的写操作。