话接上回,这次给个例子讲讲Hook的实例。

   这个例子是设置一个全局钩子,捕捉其它程序的键盘消息。

   首先,构建DLL,以便给其它程序映射。这个DLL文件名为KeyHook.h / KeyHook.cpp

   在KeyHook.h里面,导出两个函数,分别是设置Hook和取消Hook的函数。
   

HOOK技术-满足我们程序的偷窥欲(二)//----------------------------------KeyHook.h-----------------------------------//

   #ifndef EXPERT
HOOK技术-满足我们程序的偷窥欲(二)
#define EXPERT extern "C" __declspec(dllimport)
HOOK技术-满足我们程序的偷窥欲(二)
#endif
HOOK技术-满足我们程序的偷窥欲(二)
HOOK技术-满足我们程序的偷窥欲(二)EXPERT BOOL SetHook(HWND hwnd);  
//设置HOOK
HOOK技术-满足我们程序的偷窥欲(二)
EXPERT BOOL CancelHook(HWND hwnd);  //取消HOOK
HOOK技术-满足我们程序的偷窥欲(二)

HOOK技术-满足我们程序的偷窥欲(二)
#define WM_KEY_HOOK WM_USER+102 //自定义消息,设置自定义消息的作用是,当这个DLL截取到其它程序的键盘消息时,给我们的应用程序发送这个消息。


HOOK技术-满足我们程序的偷窥欲(二)//-------------------------KeyHook.cpp---------------------//
HOOK技术-满足我们程序的偷窥欲(二)

HOOK技术-满足我们程序的偷窥欲(二)
#define EXPERT extern "C" __declspec(dllexport)
HOOK技术-满足我们程序的偷窥欲(二)
HOOK技术-满足我们程序的偷窥欲(二)
//定义DLL共享数据段,为的是这个段中的数据可以被本应用程序所改写
HOOK技术-满足我们程序的偷窥欲(二)
#pragma data_seg("HOOKSHARE")
HOOK技术-满足我们程序的偷窥欲(二)HWND hwndServer
=NULL;
HOOK技术-满足我们程序的偷窥欲(二)#pragma data_seg()
HOOK技术-满足我们程序的偷窥欲(二)#pragma comment(linker,
"/section:HOOKSHARE,rws")
HOOK技术-满足我们程序的偷窥欲(二)
HOOK技术-满足我们程序的偷窥欲(二)HINSTANCE hInst; 
//Dll的实例句柄
HOOK技术-满足我们程序的偷窥欲(二)
HHOOK hook;   //Hook句柄
HOOK技术-满足我们程序的偷窥欲(二)

HOOK技术-满足我们程序的偷窥欲(二)LRESULT WINAPI WndHookProc(
int nCode,WPARAM wParam,LPARAM lParam); //钩子一旦挂上,这个WndHookProc就会接收其它应用程序的消息了。
HOOK技术-满足我们程序的偷窥欲(二)

HOOK技术-满足我们程序的偷窥欲(二)BOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
}



下面,就要写我们的应用程序来处理DLL截获过来的消息了。假定我们的应用程序由一个对话框来处理。
对话框的文件名分别是:SendMsg.h     SendMsg.cpp


HOOK技术-满足我们程序的偷窥欲(二)//------------------SendMsg.h---------------------//
HOOK技术-满足我们程序的偷窥欲(二)
HOOK技术-满足我们程序的偷窥欲(二)
//添加两个Button,分别是Hook / Unhook ,他们的处理程序分别是OnHook和OnUnhook
HOOK技术-满足我们程序的偷窥欲(二)
afx_msg void OnHook();
HOOK技术-满足我们程序的偷窥欲(二)afx_msg 
void OnUnhook();
HOOK技术-满足我们程序的偷窥欲(二)
//自定义消息,当窗口接收到WM_KEY_HOOK消息时,就是用onHookMsg函数来处理
HOOK技术-满足我们程序的偷窥欲(二)
afx_msg LRESULT OnHookMsg(WPARAM wParam,LPARAM lParam);


HOOK技术-满足我们程序的偷窥欲(二)//--------------------SendMsg.cpp-------------------//
HOOK技术-满足我们程序的偷窥欲(二)
#include "SetHook.h" //把Dll的.h文件添加进项目
HOOK技术-满足我们程序的偷窥欲(二)
HOOK技术-满足我们程序的偷窥欲(二)
//自定义消息映射
HOOK技术-满足我们程序的偷窥欲(二)
ON_MESSAGE(WM_KEY_HOOK,OnHookMsg)
HOOK技术-满足我们程序的偷窥欲(二)
HOOK技术-满足我们程序的偷窥欲(二)
//当点击Hook按纽时,设置Hook
HOOK技术-满足我们程序的偷窥欲(二)
void CSendMsg::OnHook()
}


   另外,还有其它编译时注意的事项,如果我们要编译本应用程序,需要和DLL一起编译,并且,要告诉编译器,这个项目的依赖项是KeyHook.dll(菜单:项目->项目依赖项)

相关文章:

  • 2021-12-26
  • 2022-12-23
  • 2021-05-15
  • 2021-07-13
  • 2022-12-23
  • 2021-06-02
  • 2022-12-23
  • 2021-11-23
猜你喜欢
  • 2021-07-25
  • 2021-12-21
  • 2021-09-07
  • 2022-01-20
  • 2021-04-05
  • 2022-12-23
  • 2021-05-31
相关资源
相似解决方案