现在的位置: 首页 > 综合 > 正文

HOOK技术

2018年03月19日 ⁄ 综合 ⁄ 共 991字 ⁄ 字号 评论关闭

1. 分类

2. 消息HOOK:

消息 Hook,消息 Hook 是通过 SetWindowsHookEx 可以实现将自己的钩子插入到钩子链的最前端,

而对于发送给被 Hook 的窗口(也有可能是所有的窗口,即全局 Hook)的消息都会被我们的钩子处理函数所捕获到,

也就是我们可以优先于窗体先捕获到这些消息,Windows 消息 Hook 可以实现为进程内消息 Hook 和全局消息 Hook,

对于进程内消息 Hook,则可以简单的将 Hook 处理函数直接写在这个进程内,即是自己 Hook 自己。

3. 全局消息HOOK:

需要将 Hook 处理函数写在一个 DLL 中,这样才可以让你的处理函数被所有的进程所加载(进程自动加载包含 Hook 消息处理函数的 DLL)。

对于 Windows 消息 Hook 呢,可以有个简单的邪恶应用,就是记录键盘按键消息,

从而达到监视用户输入的键值信息的目的,这样,对于一些简单的用户通过键盘输入的密码就可以被 Hook 获取到,

因为没当用户按下一个键时,Windows 都会产生一个按键消息(当然有按下,弹起等消息的区分),

然后我们可以 Hook 到这个按键消息,这样就可以在 Hook 的消息处理函数中获取到用户按下的是什么键了。

4. CBT HOOK

使用API函数SetWindowsHookEx()把一个应用程序定义的钩子子程安装到钩子链表中。 SetWindowsHookEx函数总是在Hook链的开头安装Hook子程。当指定类型的Hook监视的事件发生时,系统就调用与这个Hook关联的
Hook链的开头的Hook子程。每一个Hook链中的Hook子程都决定是否把这个事件传递到下一个Hook子程。Hook子程传递事件到下一个 Hook子程需要调用CallNextHookEx函数。

HHOOK SetWindowsHookEx(          int idHook,
    HOOKPROC lpfn,
    HINSTANCE hMod,
    DWORD dwThreadId
);

HOOK hCBTHook = SetWindowsHookEx(WH_CBT, CBTProc, _Module.GetModuleInstance(), 0L);

在以下事件之前,系统都会调用WH_CBT Hook子程,这些事件包括:

1)激活,建立,销毁,最小化,最大化,移动,改变尺寸等窗口事件;

2)完成系统指令;

3)来自系统消息队列中的移动鼠标,键盘事件;

4)设置输入焦点事件;

5)同步系统消息队列事件。

抱歉!评论已关闭.