`
iwebcode
  • 浏览: 2071722 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

钩子(hook)

 
阅读更多

一。生成钩子

1、利用VC生成一个DLL框架,可以用MFC的,也可以用win32的,这个并不是很重要,只要是DLL就行。
2、编写自己的钩子过滤函数
钩子过滤函数必须是回调函数,其函数的形式:
LRESULT WINAPI CallWndProc(int nCode, WPARAM wParam, LPARAM lParam) ;
3、在生成的DLL框架中加入自己钩子的处理函数。
4、用SetWindowsHookEx函数,安装HOOK;

系统是通过调用位于钩子链表最开始处的钩子函数而进行消息拦截处理的,因此在设置钩子时要把回调函数放置于钩子链表的链首,操作系统会使其首先被调用。由函数SetWindowsHookEx()负责将回调函数放置于钩子链表的开始位置。SetWindowsHookEx()函数原型声明为:

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


  其中,参数idHook 指定了钩子的类型,可以使用的类型有以下13种:

WH_CALLWNDPROC 系统将消息发送到指定窗口之前的“钩子”
WH_CALLWNDPROCRET 消息已经在窗口中处理的“钩子”
WH_CBT 基于计算机培训的“钩子”
WH_DEBUG 差错“钩子”
WH_FOREGROUNDIDLE 前台空闲窗口“钩子”
WH_GETMESSAGE 接收消息投递的“钩子”
WH_JOURNALPLAYBACK 回放以前通过WH_JOURNALRECORD“钩子”记录的输入消息
WH_JOURNALRECORD 输入消息记录“钩子”
WH_KEYBOARD 键盘消息“钩子”
WH_MOUSE 鼠标消息“钩子”
WH_MSGFILTER 对话框、消息框、菜单或滚动条输入消息“钩子”
WH_SHELL 外壳“钩子”
WH_SYSMSGFILTER 系统消息“钩子”


  参数lpfn为指向钩子函数的指针,也即回调函数的首地址;参数hMod标识了钩子处理函数所处模块的句柄;参数dwThreadId 指定被监视的线程,如果明确指定了某个线程的ID就只监视该线程,此时的钩子即为线程钩子;如果该参数被设置为0,则表示此钩子为监视系统所有线程的全局钩子。此函数在执行完后将返回一个钩子句柄。

  在SetWindowsHookEx()函数完成对钩子的安装后,如果被监视的事件发生,系统会立即调用位于相应钩子链表开始处的钩子函数进行处理,每一个钩子函数在进行处理时都要考虑是否需要把事件传递给下一个钩子处理函数。如果需要传递,就要调用函数CallNestHookEx()。尽管在理论上不调用CallNestHookEx()也并不算错,但在实际使用时还是强烈建议无论是否需要进行事件传递都要在过程的最后调用一次CallNextHookEx( ),否则将会引起一些无法预知的系统行为或是系统锁定。该函数将返回位于钩子链表中的下一个钩子处理过程的地址,至于具体的返回值类型则要视所设置的钩子类型而定。CallNextHookEx( )的函数原型为:

LRESULT CallNextHookEx(HHOOK hhk;int nCode;WPARAM wParam;LPARAM lParam);

CallNextHookEx函数一般都是在调用完钩子的回调函数以后:
return CallNextHookEx();
  其中,参数hhk为由SetWindowsHookEx()函数返回的当前钩子句柄;参数nCode为传给钩子过程的事件代码;参数wParam和lParam 则为传给钩子处理函数的参数值,其具体含义同设置的钩子类型有关。

  钩子用完以后最好马上卸载,钩子会对系统的性能有影响。

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


  其中,参数idHook 指定了钩子的类型,可以使用的类型有以下13种:

WH_CALLWNDPROC 系统将消息发送到指定窗口之前的“钩子”
WH_CALLWNDPROCRET 消息已经在窗口中处理的“钩子”
WH_CBT 基于计算机培训的“钩子”
WH_DEBUG 差错“钩子”
WH_FOREGROUNDIDLE 前台空闲窗口“钩子”
WH_GETMESSAGE 接收消息投递的“钩子”
WH_JOURNALPLAYBACK 回放以前通过WH_JOURNALRECORD“钩子”记录的输入消息
WH_JOURNALRECORD 输入消息记录“钩子”
WH_KEYBOARD 键盘消息“钩子”
WH_MOUSE 鼠标消息“钩子”
WH_MSGFILTER 对话框、消息框、菜单或滚动条输入消息“钩子”
WH_SHELL 外壳“钩子”
WH_SYSMSGFILTER 系统消息“钩子”


  参数lpfn为指向钩子函数的指针,也即回调函数的首地址;参数hMod标识了钩子处理函数所处模块的句柄;参数dwThreadId 指定被监视的线程,如果明确指定了某个线程的ID就只监视该线程,此时的钩子即为线程钩子;如果该参数被设置为0,则表示此钩子为监视系统所有线程的全局钩子。此函数在执行完后将返回一个钩子句柄。

  在SetWindowsHookEx()函数完成对钩子的安装后,如果被监视的事件发生,系统会立即调用位于相应钩子链表开始处的钩子函数进行处理,每一个钩子函数在进行处理时都要考虑是否需要把事件传递给下一个钩子处理函数。如果需要传递,就要调用函数CallNestHookEx()。尽管在理论上不调用CallNestHookEx()也并不算错,但在实际使用时还是强烈建议无论是否需要进行事件传递都要在过程的最后调用一次CallNextHookEx( ),否则将会引起一些无法预知的系统行为或是系统锁定。该函数将返回位于钩子链表中的下一个钩子处理过程的地址,至于具体的返回值类型则要视所设置的钩子类型而定。CallNextHookEx( )的函数原型为:

LRESULT CallNextHookEx(HHOOK hhk;int nCode;WPARAM wParam;LPARAM lParam);

CallNextHookEx函数一般都是在调用完钩子的回调函数以后:
return CallNextHookEx();
  其中,参数hhk为由SetWindowsHookEx()函数返回的当前钩子句柄;参数nCode为传给钩子过程的事件代码;参数wParam和lParam 则为传给钩子处理函数的参数值,其具体含义同设置的钩子类型有关。

  钩子用完以后最好马上卸载,钩子会对系统的性能有影响。

5、用UnHookWindowsHookEx卸载钩子

二、利用钩子
1、生成一个exe文件,然后调用钩子的DLL,这里也可以是.h+lib;
2、在程序中安装钩子
3、利用钩子的功能
4、一定不要忘了卸装钩子,调用钩子的函数注销钩子

注意:其实DLL是实现钩子的最主要地方,而利用钩子的EXE文件,只是起到一个调用DLL注册DLL的作用:)

ps:感谢http://www.18ceo.com/的文章:)

分享到:
评论

相关推荐

    vc钩子hook 截获exe调用的任何函数.visual c++

    在IT领域,尤其是系统编程和软件安全中,"钩子(Hook)"是一个重要的概念,它允许程序员拦截和处理特定的系统事件或函数调用。本篇将详细讲解VC++中利用钩子来实现API拦截的技术,即如何通过Visual C++来截获一个EXE...

    bcb鼠标钩子Hook

    【标题】"bcb鼠标钩子Hook"是一个关于在 Borland C++ Builder (简称BCB) 开发环境中实现鼠标钩子的技术主题。鼠标钩子是Windows API提供的一种机制,允许程序监视和处理特定类型的鼠标事件,如鼠标移动、点击等,...

    vb.net (c#)中鼠标,键盘钩子Hook

    总的来说,VB.NET和C#中的鼠标和键盘钩子Hook技术提供了一种强大但需谨慎使用的手段,允许开发者监控和控制用户输入。正确理解和使用这些技术,可以为各种应用,如游戏作弊检测、自动化测试或辅助工具开发等带来便利...

    Delphi键盘钩子 hook源程序.rar

    标题中的"Delphi键盘钩子 hook源程序.rar"指的是一个使用Delphi编程语言编写的键盘钩子(Keyboard Hook)程序的源代码文件。Delphi是一款强大的Windows应用开发工具,基于Object Pascal编程语言,以其高效的代码生成...

    锁定 屏蔽 鼠标左右键 c# 源码 钩子 hook应用 锁屏 锁系统

    本文将详细解析"锁定屏蔽鼠标左右键 c# 源码 钩子hook应用 锁屏 锁系统"这一主题,探讨如何在C#编程环境中实现这些功能。 首先,我们要理解什么是钩子(Hook)。钩子是Windows操作系统提供的一种机制,允许应用程序...

    键盘钩子hook键盘钩子

    键盘钩子(Keyboard Hook)是Windows操作系统中一种高级技术,允许程序监听并处理键盘输入事件。这种技术在软件开发中尤为常见,特别是那些需要监控或拦截用户键盘输入的应用,如键盘记录器、输入法切换软件或者游戏...

    钩子hook微信(pc端)发消息后撤回消息功能

    钩子hook微信(pc端)发消息后撤回消息功能

    一款改进的C#键盘钩子 hook

    【标题】:“一款改进的C#键盘钩子 hook” 在编程领域,键盘钩子是一种技术,允许程序拦截和处理来自键盘的输入事件,而不必是当前活动窗口。这种技术在某些场景下非常有用,比如监控用户输入、实现热键或者在多...

    全局鼠标钩子hook的DLL

    在本案例中,我们有一个名为"全局鼠标钩子hook的DLL"的项目,它使用Visual Studio 2010编写,并通过DLL动态链接库来实现这个功能。该DLL的主要目标是捕获并显示系统中所有打开窗口的名称,当用户进行鼠标操作时。 ...

    键盘钩子hook

    **键盘钩子(Keyboard Hook)详解** 键盘钩子是Windows操作系统提供的一种机制,允许应用程序监控系统中的键盘事件,包括按键按下、释放等。通过设置键盘钩子,开发者可以捕获并处理这些事件,甚至在其他应用程序...

    C#键盘钩子Hook

    这个"**C#键盘钩子Hook**"的主题就是关于如何在C#应用中创建一个键盘钩子,以便拦截特定的键盘组合,例如Alt+Tab、Alt+F4、Ctrl+Esc以及Windows键,并阻止它们的默认行为,类似于一个简单的锁屏功能。 首先,要实现...

    世界顶级好的钩子hook代码

    inline hook 世界顶级好的钩子hook代码

    钩子hook微信(安卓app端)发消息后撤回消息功能

    钩子hook微信(安卓app端)发消息后撤回消息功能

    枚举全局钩子_如何列出当前windows中所有的钩子hook

    在Windows操作系统中,钩子(Hook)是一种机制,允许应用程序拦截和处理特定类型的系统事件,如键盘输入、鼠标点击等,而无需改变被拦截程序的代码。全局钩子(Global Hook)则是这种机制的一种扩展,它可以在整个...

    钩子hook微信发消息后撤回消息功能pc版,android安卓版

    钩子hook微信发消息后撤回消息功能pc版,android安卓版

    一个钩子HOOK Dll源码,基于Delphi API技术.rar

    标题中的“一个钩子HOOK Dll源码,基于Delphi API技术.rar”指的是一个使用Delphi编程语言编写的动态链接库(Dll),该库利用Windows API(应用程序接口)中的钩子技术来实现特定功能。钩子是Windows操作系统提供的...

    钩子hook技术

    钩子Hook技术详解 钩子(Hook)是一种特殊的消息处理机制,允许开发者截获并处理Windows系统中的各种事件消息。钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理,从而达到特定的功能,...

    钩子Hook实例(C#版本)

    钩子Hook,c#运用钩子的实例,适合初学者(*^__^*)...

    c++钩子函数:copy hook_linux函数hook

    在IT领域,钩子函数(Hook Function)是一种高级技术,常用于系统监控、调试和拦截特定事件。在C++编程中,我们可以利用钩子来跟踪和控制程序的行为,例如在这个场景下,我们关注的是文件复制操作。"copy hook"特指...

Global site tag (gtag.js) - Google Analytics