HOOK 系统消息

微软提供了一个消息HOOKAPI

SetWindowsHookEx()

一般情况下此API函数多用于注入。

HHOOK WINAPI SetWindowsHookEx(
__in int idHook,            //钩子类型
__in HOOKPROC lpfn,         //回调函数地址
__in HINSTANCE hMod,         //实例句柄
__in DWORD dwThreadId);     //线程ID

详情:https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspx

此API参数钩子的种类很多。从不同的角度可以把钩子分为不同的种类。

按使用范围分类,主要有线程钩子和系统钩子:

 (1)线程钩子监视指定线程的事件消息或者API函数。

 (2)系统钩子监视系统中的所有线程的事件消息或者API函数。因为系统钩子会影响系统中所有的应用程序,所以钩子函数必须放在独立的动态链接库(DLL)中。

按拦截对象分类,主要有消息钩子和API钩子 :

(1)消息钩子是截获程序中的消息或事件的。

(2)API钩子是拦截目标程序中调用的函数,替换或者修改调用函数的功能。

消息钩子按事件消息分类,有如下的6种常用类型:

 (1)键盘钩子和低级键盘钩子可以监视各种键盘消息。

 (2)鼠标钩子和低级鼠标钩子可以监视各种鼠标消息。

 (3)外壳钩子可以监视各种Shell事件消息,如启动和关闭应用程序。

 (4)日志钩子可以记录从系统消息队列中取出的各种事件消息。

 (5)窗口过程钩子监视所有从系统消息队列发往目标窗口的消息。

 (6)还有一些其它的特定事件的钩子。

如通过 Hook 监视目标的屏幕

这里讲的监控跟平常的远程查看桌面不一样,也算是比较容易实现的版本。即,当用户鼠标发生点击的时候就把当前的页面截图留下。通过鼠标在多种情况下的屏幕截图来达到监视目标计算机的目的。

以下为逻辑示例代码:

/**
 * Hook 钩子处理函数
 */
LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
  // 变量定义 ...  

  if (nCode >= 0)
  {
    /* ... */

    // 左键按下时将屏幕截图
    if(wParam == WM_LBUTTONDOWN)
    {
      // 通过当前时间拼凑截图文件名
      getCurrentDateTime( /*...*/ );
      // 屏幕截图并保存到指定地址
      CaptureImage( /*... */);
    }

    /* ... */
  }

  // 将消息继续传递给窗口
  return CallNextHookEx(myhook, nCode, wParam, lParam);

  // 如果不调用 CallNextHookEx 的话消息就被你的 Hook 截断了
}

监测API:

以上Ring3 Hook方法都会用到修改opcode字节即修改硬编码实现,所以都会使用修改内存保护属性API来修改内存属性,VirtualProrectEx();

大多情况下会使用写内存API函数WriteProcessMemory()进行改写内存。

系统消息钩子API SetWindowsHookEx();

设置异常捕获函数 SetUnhandleExceptionFilter();

注册一个向量的异常处理程序 AddVectoredExceptionHandler();

				
时间: 2024-10-11 17:08:05

HOOK 系统消息的相关文章

HOOK API (一)——HOOK基础+一个鼠标钩子实例

HOOK API (一)——HOOK基础+一个鼠标钩子实例 0x00 起因 最近在做毕业设计,有一个功能是需要实现对剪切板的监控和进程的防终止保护.原本想从内核层实现,但没有头绪.最后决定从调用层入手,即采用HOOK API的技术来挂钩相应的API,从而实现预期的功能.在这样的需求下,就开始学习了HOOK API. 0x01什么是HOOK API HOOK(钩子,挂钩)是一种实现Windows平台下类似于中断的机制[24].HOOK机制允许应用程序拦截并处理Windows消息或指定事件,当指定的

【转】windows常用消息大全(系统消息、通告消息、用户消息)

原文网址:http://blog.csdn.net/nupt123456789/article/details/7370562 附录A Windows 常用消息大全 表A-1  Windows消息分布 消息范围 说 明 0 - WM_USER – 1 系统消息 WM_USER - 0x7FFF 自定义窗口类整数消息 WM_APP - 0xBFFF 应用程序自定义消息 0xC000 - 0xFFFF 应用程序字符串消息 > 0xFFFF 为以后系统应用保留 表A-2  常用Windows消息 消息

我的Hook学习笔记

关于Hook 一.基本概念: 钩子(Hook),是Windows消息处理机制的一个平台,应用程序能够在上面设置子程以监视指定窗体的某种消息,并且所监视的窗体能够是其它进程所创建的.当消息到达后,在目标窗体处理函数之前处理它.钩子机制同意应用程序截获处理window消息或特定事件. 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统.每当特定的消息发出,在没有到达目的窗体前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权.这时钩子函数即能够加工处理(改变)该消息,也能够不作处理而继续传

系统消息

?? Window消息来源有下面4种 输入消息 控制消息 系统消息 用户消息 Windows消息分布 消息范围 说 明 0 - 0x03FF(WM_USER – 1) 系统消息 0x0400(WM_USER) - 0x7FFF(WM_APP - 1) 自己定义窗体类整数消息 0x0800(WM_APP) - 0xBFFF 应用程序自己定义消息 0xC000 - 0xFFFF 应用程序字符串消息 > 0xFFFF 为以后系统应用保留 通知消息-button 通知消息-列表框 消息名称 说 明 消息

【转】Hook钩子C#实例

[转]Hook钩子C#实例 转过来的文章,出处已经不知道了,但只这篇步骤比较清晰,就贴出来了. 一.写在最前 本文的内容只想以最通俗的语言说明钩子的使用方法,具体到钩子的详细介绍可以参照下面的网址: http://www.microsoft.com/china/community/program/originalarticles/techdoc/hook.mspx 二.了解一下钩子 从字面上理解,钩子就是想钩住些东西,在程序里可以利用钩子提前处理些Windows消息. 例子:有一个Form,Fo

HOOK钩子 - 钩子函数说明

翻译参考自MaybeHelios的blog: http://blog.csdn.net/maybehelios/ 通过SetWindowsHookEx方法安装钩子,该函数指定处理拦截消息的钩子函数(回调函数),可在钩子函数中自定义消息的处理,可修改消息或屏蔽消息.钩子函数的格式是固定为:LRESULT CALLBACK CallBackProc(                Int nCode,          WPARAM wParam,          LPARAM lParam);

API HOOK及其注入技术详解

大家有没有想过,一些系统监控软件是如何得知我们所进行的操作的?杀软启发式分析是如何对病毒行为进行拦截和监控的?外挂又是如何读取到游戏的内部数据的?这些功能的实现,基本都有API HOOK存在.API HOOK分为ring0和ring3层,这里我们以ring3层API HOOK 进行讲解分析. API HOOK 在ring 3的实现,分为inline 和修改导入表2种方法,所谓inline,是指直接写入并覆盖函数开头字节汇编码的方法,这种方法有一个问题,便是他被杀软重点监控,成功率极低,而修改导入

vc++HOOK详细讲解

消息钩子函数入门 Windows 系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的.而钩子是 Windows 系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能.钩子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理.这样,我们就可以在系统中安装自定义的钩子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘.鼠标的输入,屏幕取词,日志监视等等.可见,利用钩子可以实现许多特殊而有用的功能.因此,对

【转】C# 重写WndProc 拦截 发送 系统消息 + windows消息常量值(1)

C# 重写WndProc 拦截 发送 系统消息 + windows消息常量值(1) #region 截获消息 /// 截获消息 处理XP不能关机问题 protected override void WndProc(ref Message message) { switch (message.Msg) { case WM_QUERYENDSESSION: isClosed = true; break; } base.WndProc(ref message); } #endregion window