钩子英文名叫Hook,是一种截获windows系统中某应用程序或者所有进程的消息的一种技术。

如在键盘中按下一键,操作系统将收到键按下消息,把消息放入消息队列,然后消息队列对消息进行派发,发给相应的应用程序,经过应用程序处理后发给操作系统,操作系统再调用相应的应用程序的创建的窗口过程。

SetWindowsHookEx安装一个应用程序定义的钩子过程,并把创建的钩子过程放在钩子链中,可以安装多个钩子,多个钩子就形成了钩子链,最后安装的钩子总是在最前面。

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam);形参含义并不是都一样的,不同钩子过程形参表示的意义不一样。

BOOL UnhookWindowsHookEx(HHOOK hhk);此API的功能是把SetWindowsHookEx创建的钩子从钩子链中移除。形参是SetWindowsHookEx返回的钩子句柄。

全局钩子必须在DLL上实现,钩子过程不能在本进程代码中实现,所以先得写一个DLL。

#include "stdafx.h"

extern HMODULE g_hDllMoudle;    //dll的句柄
//共享内存
#pragma data_seg("mydata") //创建一个名为mydata的数据段
HHOOK g_hHook = NULL;
#pragma data_seg()
#pragma comment(linker,"/SECTION:mydata,RWS") //把mydata数据段设置为可读可写可共享 extern "C" _declspec(dllexport)
//钩子回调函数
LRESULT GetMsgProc(int code, WPARAM wParam, LPARAM lParam)
{
MessageBoxA(0, "弹窗", "你中毒了", 0);
return CallNextHookEx(g_hHook, code, wParam, lParam);
} extern "C" _declspec(dllexport)
//设置全局钩子
BOOL SetGlobalHook()
{
g_hHook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)GetMsgProc, g_hDllMoudle, 0);
if (g_hHook==NULL)
{
return FALSE;
}
return TRUE;
} extern "C" _declspec(dllexport)
//卸载全局钩子
BOOL UnSetGlobalHook()
{
if (g_hHook)
{
UnhookWindowsHookEx(g_hHook);
}
return TRUE;
}
调用DLL中的钩子
void CInject::SetGlobalHook()
{
//定义函数指针和函数指针变量
typedef BOOL(*typedef_SetGlobalHook)();
typedef_SetGlobalHook fnSetGlobalHook = NULL;
//获取DLL加载基址
m_hDll = LoadLibrary(m_Edit);
if (m_hDll)
{
m_TipMsg += L"DLL加载成功\r\n";
}
else
{
m_TipMsg += L"DLL加载失败\r\n";
} //获取函数地址 给函数指针变量赋值
fnSetGlobalHook = (typedef_SetGlobalHook)GetProcAddress(m_hDll, "SetGlobalHook");
if (fnSetGlobalHook)
{
m_TipMsg += L"加载函数地址成功\r\n";
}
else
{
m_TipMsg += L"加载函数地址失败\r\n";
}
//设置全局钩子
BOOL bRet = fnSetGlobalHook(); if (bRet)
{
m_TipMsg += L"设置全局钩子成功 开始无限弹框\r\n";
}
else
{
m_TipMsg += L"设置全局钩子失败\r\n";
} UpdateData(FALSE); }

mfc HackerTools全局钩子的更多相关文章

  1. 常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战.

    常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战. PS:上面是操作.最后是原理 一丶需要了解的API 使用全局钩子注入.我们需要了解几个WindowsAPI. ...

  2. VC++开发Windows系统全局钩子

    本文的大部分内容属于对一篇网文的实践与练习,同时参考的还有一本书,在此向网文与书的作者表示敬意. 这个程序是一个windows系统键盘监控程序,随着开机自动启动,可以监控系统中各用户的键盘,并将按键记 ...

  3. MFC学习 消息钩子使用

    HANDLE h_KeyBoard; //当前进程的钩子, 另外WH_KEYBOARD_LL, 与WH_MOUSE_LL参数时, 是获取的底层的消息, 相当于获取的全局的 g_hKeyBoard = ...

  4. Django12-ModelForm中创建局部钩子和全局钩子

    一.局部钩子 命名规则为clean_对象名称,例如上面定义了username.pwd对象,那么可以定义clean_username.clean_pwd的局部钩子进行规则校验 1.例子:定义一个手机号校 ...

  5. 安全之路 —— 使用Windows全局钩子打造键盘记录器

    简介 键盘记录功能一直是木马等恶意软件窥探用户隐私的标配,那么这个功能是怎么实现的呢?在Ring3级下,微软就为我们内置了一个Hook窗口消息的API,也就是SetWindowsHookEx函数,这个 ...

  6. django----利用Form 实现两次密码输入是否一样 ( 局部钩子和全局钩子 )

    from django import forms # 导入表单模块 from django.core.exceptions import ValidationError class RegisterF ...

  7. (32)forms组件(渲染自建规则:局部钩子函数和全局钩子函数)

    要达成渲染自建规则 1.局部钩子函数(某个字段,自定意义规则,不如不能以sb开头,数据库已存在等) 2.全局钩子函数(校验两次密码是否一致) 3.使用css样式 register.html <! ...

  8. git自定义项目钩子和全局钩子

    钩子介绍 自定义钩子分为:项目钩子和全局钩子 自定义全局钩子: 全局钩子目录结构: (注意:excludes目录结构是我们自定义的目录,规则逻辑在update.d/update.py脚本里实现的,非g ...

  9. form表单钩子,局部钩子和全局钩子

    form表单源码解析: 局部钩子: 全局钩子:

随机推荐

  1. C语言:按相反顺序输出字符

    #include <stdio.h> void pailie(int n) { char next; if (n<=1) { next=getchar(); putchar(next ...

  2. C语言:位运算符

    异或        ^     两个二进制位相同结果为0:不相同结果为1              1^1=0    1^0=1   0^1=1  0^0=1 按位或    |      两个二进制位 ...

  3. 从新建文件夹开始构建ShadowPlay Engine游戏引擎(4)

    本篇序言 这次博客更新距离上次的时间间隔变短了好多,因为最近硬是抽出了一大部分时间来进行引擎的开发.而且运气很好的是在写链表这种很"敏感"的的数据结构的时候并没有出现那种灾难性的后 ...

  4. Requests方法 -- session方法

    import requests#禁用安全请求警告from requests.packages.urllib3.exceptions import InsecureRequestWarningreque ...

  5. JDK的环境变量配置(详细步骤)

    JDK环境变量配置的步骤(Windows10) 一.下载并安装JDK 选择一个JDK版本下载并安装到电脑上. 二.环境变量的配置 1.安装完成JDK后的配置环境变量: 首先鼠标右击"计算机& ...

  6. 分布式ID生成器(CosId)的设计与实现

    分布式ID生成器(CosId)设计与实现 CosId 简介 CosId 旨在提供通用.灵活.高性能的分布式 ID 生成器. 目前提供了俩类 ID 生成器: SnowflakeId : 单机 TPS 性 ...

  7. 数据结构与算法(python版)

    ADT抽象数据类型(ADT:Abstract Data Type):ADT是对数据进行处理的一种逻辑描述,并不涉及如何实现这些处理. 同一ADT可以采用不同的数据结构来实现:1.采用程序设计语言的控制 ...

  8. 浅析php环境配置

    PHP作为开源的服务器端脚本语言,在web应用方面非常广泛.如果你想下载某些开源应用,github上php开源软件选择往往比Java还多.最近,研究了linux下php的安装,主要有以下体会. PHP ...

  9. CF427B

    没人用ST表么?他比线段树快. 考虑先把ST表跑下来,然后循环一遍区间的起点,看一下这个区间的最大值,和 \(t\) 比较一下即可. 然后这题就做完了.ST表裸题. int f[2000010][21 ...

  10. 栅栏密码(The Rail-Fence Cipher)详解

    最近训练CTF的时候,发现密码学这块的知识不太系统,所以自己接下来会陆陆续续整理出来 今天学习了栅栏密码,BugkuCTF里面的一道叫做"聪明的小羊"的题就与栅栏密码相关 特点 栅 ...