MSDN上对消息钩子的描述:

The SetWindowsHookEx function installs an application-defined hook procedure into a hook chain. You would install a hook procedure to monitor the system for certain types of events. These events are associated either with a specific thread or with all threads in the same desktop as the calling thread.

----------------------------------------------------------------------------------------------------------------------------

1.在内核中,NtUserSetWindowsHookEx函数会首先取得当前线程、当前进程、TEB等的一些信息。然后会调用IntAddHook函数。

2.IntAddHook函数会根据是全局HOOK,还是单进程的HOOK,把钩子插入不同的链表中

3.CallNextHookEx函数会根据不同的消息钩子类型调用不同的函数,如果是WH_CALLWNDPROC和WH_CALLWNDPROCRET类型的,就直接调用NtUserMessageCall函数。如果不是以上两者就会调用NtUserCallNextHookEx函数。

4.NtUserMessageCall又会根据传进来的typeid参数调用不同的函数。其中如果是上述的WH_CALLWNDPROC和WH_CALLWNDPROCRET类型的,则会调用co_IntCallHookProc函数。

5.co_IntCallHookProc函数经过一系列的参数赋值,初始化后,最后调用的是KeUserModeCallback返回Ring3去执行相应的回调函数。

6.当然上面的NtUserCallNextHookEx函数,经过稍微更加复杂的初始化后,最后调用的还是KeUserModeCallback函数去Ring3执行相应的回调函数。

NtUserCallNextHookEx->UserCallNextHookEx->co_HOOK_CallHookNext->co_IntCallHookProc->KeUserModeCallback

总结:

消息钩子的初始化和执行过程看起来思路都比较清晰。要Anti的话从SetWindowsHookEx开始,一路的调用都是可以做手脚的。

当然,还有比较猥琐的XX方法。

--------------------------------------------------------------------------------------------------------------------------

ps:

QQ管家的TCSafeBox.sys是采用的IAT HOOK KeUserModeCallback的方法来防止消息钩子注入的。不过其在判断注入的模块是否是系统常用模块时,采用了strstr函数。这样的话,我们可以随便构造一个目录就可以绕过了。

module_name_array 列表如下,是写死在代码里面的:

因此,我们只要构造一个类似“c:\\my\\Windows\\system32\\csrss.exe\\1.dll”这样的路径便可以实现注入QQ管家了。

Anti 消息钩子注入相关推荐

  1. 注入(4)--消息钩子注入(SetWindowsHookEX)

    SetWindowsHookEx函数是微软提供给程序开发人员进行消息拦截的一个API.不过,他的功能不仅可以用作消息拦截,还可以进行DLL注入. SetWindowsHookEx原型声明如下: WIN ...

  2. 注入技术--消息hook注入

    1.简介 消息钩子注入. 对有窗口的进程. 容易被检测 SetWindowsHookExW的参数1如果空,则卸载钩子 2.代码 HHOOK hook = 0; DWORD msgInject(WCHA ...

  3. 安装全局消息钩子实现dll窗体程序注入

    说明{      通过设置全局消息钩子来实现dll注入,然后窗体有相关消息请求的时候就会自动加载注入dll, 然后在入口处做处理就可以了.注入方式简单很多,比代码注入和lsp等注入都简单,就不解释了. ...

  4. 关于Windows消息钩子的理解与测试项目

    前奏 近来一直在自学Windows Hook相关的知识,已经尝试多种注入方式.尤其对消息钩子方式很感兴趣,因为看到Spy++能够截获系统中绝大多数应用的消息流,就很想知道它的工作原理,打算制作属于自己 ...

  5. 计算机病毒对消息钩子的利用与对抗

    作 者: dncwbc 时 间: 2011-10-07,23:57:15 链 接: http://bbs.pediy.com/showthread.php?t=141059 一.消息钩子的概念     ...

  6. 关于dll注入方式的学习(全局钩子注入)

    何为dll注入 DLL注入技术,一般来讲是向一个正在运行的进程插入/注入代码的过程.我们注入的代码以动态链接库(DLL)的形式存在.DLL文件在运行时将按需加载(类似于UNIX系统中的共享库(shar ...

  7. VC++获取病毒的消息钩子

    一.消息钩子的概念 1.基本概念 Windows应用程序是基于消息驱动的,任何线程只要注册窗口类都会有一个消息队列用于接收用户输入的消息和系统消息.为了拦截消息,Windows提出了钩子的概念.钩子( ...

  8. Win64 驱动内核编程-28.枚举消息钩子

    枚举消息钩子 简单粘贴点百度的解释,科普下消息钩子: 钩子是WINDOWS中消息处理机制的一个要点,通过安装各种钩子,应用程序能够设置相应的子例程来监视系统里的消息传递以及在这些消息到达目标窗口程序之 ...

  9. 飞鸽传书最新C++源码:这两个消息钩子

    飞鸽传书最新C++源码:这两个消息钩子的 飞鸽传书 最新源码钩子函数极其相似就不分开说明,只说明一个消息钩子子程的流程.2.排除密码框.3.如果不是密码框,则钩子函数中对键盘消息进行记录,特别处理wm ...

最新文章

  1. C#用 SendKyes 结合 Process 或 API FindWindow、SendMessage(PostMessage) 等控制外部程序
  2. 数据中心市场的投资风险与回报
  3. linux脚本 set env,linux 中 set,env,export,declare显示shell变量的区别
  4. java rmi 多ip_在rmi连接中客户端指定一个ip地址,但程序执行中却转换成另一个地址...
  5. spring boot 注解
  6. 微信小程序开发:禁止输入表情的控制,验证方法,光标控制
  7. Python之面向对象的程序设计
  8. python函数支持哪些参数类型_Python函数的几种参数类型
  9. react 遍历渲染
  10. mysql考试_mysql考试总结
  11. Firefox检测到潜在的安全威胁,并因blog.csdn.net要求安全连接而没有继续
  12. 一个对话让你明白架构师是做什么的?
  13. 键盘按钮KeyCode使用案例
  14. Win7——无Internet访问权限
  15. 微信老外产品经理:《中国移动应用设计趋势》
  16. Slf4j MDC机制
  17. Discovering Relations among Named Entities from Large Corpora
  18. ICMP拒绝服务攻击(原始套接字系列四)
  19. 谷歌浏览器常用功能 去掉锁屏显示正在播放
  20. 函数的嵌套调用、嵌套定义

热门文章

  1. 论文阅读《Universal Adversarial Triggers for Attacking and Analyzing NLP》
  2. 中医药matlab,MATLAB在医学图像增强中的应用
  3. 【好奇心驱动力】ESP32-CAM定时拍照存储到SD卡
  4. 京东口罩爬虫、使用教程、第三篇
  5. 去除select下拉框默认样式
  6. 你是真的“C”——详解结构体知识点
  7. 氦气硬盘 螺丝孔对不上_使用氦气检测不匹配CSS选择器
  8. 两个坐标的距离C语言,计算两个经纬度直线距离 安卓app开发
  9. windows10自动升级补丁后,导致共享打印机无法连接的解决方法
  10. list<String> 转数组