找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 4390|回复: 0

[开源] 【转帖】利用debug钩子拦截全局钩子,经典反黑客技术

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2009-5-28 22:46:01 | 显示全部楼层 |阅读模式
  1. #include <windows.h>
  2. // 键盘钩子消息处理过程
  3. HHOOK hDebug;
  4. LRESULT CALLBACK DebugProc ( int nCode, WPARAM wParam, LPARAM lParam )
  5. {
  6. if ( nCode == HC_ACTION )
  7. {
  8.   PDEBUGHOOKINFO pDebugHookInfo = (PDEBUGHOOKINFO)lParam ;
  9.   switch ( wParam )
  10.   {
  11.   case WH_KEYBOARD:
  12.   case WH_MOUSE:
  13.    {
  14.     // 如果钩子不是由当前DEBUG钩子所在线程安装
  15.     // 就直接返回非0值,取消钩子函数过程调用
  16.     if ( pDebugHookInfo->idThread != pDebugHookInfo->idThreadInstaller )
  17.      return 1 ;
  18.    }
  19.    break ;
  20.   }
  21. }
  22. // 继续传递消息
  23. return CallNextHookEx (hDebug, nCode, wParam, lParam ) ;
  24. }

  25. BOOL WINAPI SetHook ( BOOL isInstall )
  26. {
  27. // 需要安装,且钩子不存在
  28. if ( isInstall && !hDebug )
  29. {
  30.   // 设置全局钩子
  31.   hDebug = SetWindowsHookEx (WH_DEBUG, (HOOKPROC)DebugProc, 0, GetCurrentThreadId() ) ;
  32.   if ( hDebug == NULL )
  33.    return FALSE ;
  34. }

  35. // 需要卸载,且钩子存在
  36. if ( !isInstall && hDebug )
  37. {
  38.   // 卸载钩子
  39.   BOOL ret = UnhookWindowsHookEx ( hDebug ) ;
  40.   hDebug = NULL ;
  41.   return ret ;
  42. }

  43. return TRUE ;
  44. }
复制代码
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表