意外的知道Windows中钩子机制,通过截获消息,获取想知道的密码,但自己对HHOOK一窍不通,不得不承认,这是一条非常不爽的路。不过,我急切的希望了解这方面的内容,原因不能直说,但绝无恶意。
HOOK机制(原理)
在安装钩子程序之前,系统会直接处理应用程序的消息;而安装钩子后,每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,其内置的钩子函数就可以对该消息进行处理:可以改变该消息后才向系统传递,也可以不作修改继续传递,还可以丢弃该消息,从而中止该消息的传递。
HHOOK种类(消息)
钩子的种类很多,每种钩子可以截获并处理相应的消息,如键盘钩子可以截获键盘消息,鼠标钩子可以截获鼠标消息,外壳钩子可以截获启动和关闭应用程序的消息,日志铸于可以监视和记录输人事件。一旦设置多种钩子,系统就会建立一个钩子链表,该链表运作方式类似于栈,开始安装的钩子放在表尾,最后安装的绚子放在表头.捕获的消息从表头流向表尾.所以最后安装的钩子最有可能处理该消息。
HOOK基本函数
1.
其函数原型为:
HHOOK
idHook表示钩子类型,它是和钩子函数类型一一对应的。比如,WH_KEYBOARD表示安装的是键盘钩子,WH_MOUSE表示是鼠标钩子等等。
Lpfn是钩子函数的地址。
HMod是钩子函数所在的实例的句柄。对于线程钩子,该参数为NULL;对于系统钩子,该
参数为钩子函数所在的DLL句柄。
dwThreadId指定钩子所监视的线程的线程号。对于全局钩子,该参数为NULL。
SetWindowsHookEx返回所安装的钩子句柄。
在这里我想提到的是:创建的动态DLL连接库的调用。我查询过,有隐式调用和显示调用两种。因为自己还不懂,所以后面继续;
2.
钩子函数是一种特殊的回调函数。钩子监视的特定事件发生后,系统会调用钩子函数进行处理。不同事件的钩子函数的形式是各不相同的。
LRESULT
参数wParam和lParam包含所钩消息的信息,比如鼠标位置、状态,键盘按键等。
nCode包含有关消息本身的信息,比如是否从消息队列中移出。我们先在钩子函数中实现自定义的功能,然后调用函数CallNextHookEx.把钩子信息传递给钩子链的下一个钩子函数。
CallNextHookEx.的原型如下:
LRESULT
hhk是钩子句柄。
nCode、wParam和lParam是钩子函数的参数。
当然也可以通过直接返回TRUE来丢弃该消息,就阻止了该消息的传递。
3.
当
BOOL
现在就写到这里吧。