钩子英文名叫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. .NET Core 中的 Swagger 应用与微服务场景下的Swagger Api 集成显示

    Swagger 与 OpenAPI 的历史来源: Swagger 项目于 2015 年捐赠给 OpenAPI Initiative,此后被称为 OpenAPI.这两个名称可以互换使用.但是," ...

  2. 什么是 BPMN ?为什么我们要用 BPMN 和工作流 ?

    BPMN 和 Activiti 介绍 工作流介绍 在任何行业和企业中,都有各种各样的流程,例如: 请假流程 报销流程 入职流程 离职流程 出差流程 等等-- 就算你自己没有设计过工作流,那么你每天肯定 ...

  3. Word中的代码怎样语法高亮

    在平常我们粘贴代码到Word中的时候,经常会遇到代码粘贴到Word中后没有语法高亮,看着很乱很不友好,Word自带的样式---语法使用着也不尽人意, 网上有很多做法可以使得在插入在Word中的代码能够 ...

  4. 数据结构与算法-排序(二)选择排序(Selection Sort)

    摘要 选择排序的逻辑是先遍历比较出序列中最大的,然后把最大的放在最后位置. 遵循这个逻辑,用代码实现时,做到1.减少比较次数之外,这里引入一个新的指标 - 稳定性,2.保证排序过程中的稳定性也是一个优 ...

  5. Echarts的应用实践

    Echarts官网:https://echarts.apache.org/ echarts是百度推出的,使用JavaScript实现的开源可视化库,可以提供直观.可定制化的数据可视化图表,包括折线图. ...

  6. odoo12常用的方法

    2019-09-13 今天是中秋节,星期五 #自定义显示名称 def name_get(self): result = [] for order in self: rec_name = "% ...

  7. 自制车速记录仪「GitHub 热点速览 v.21.31」

    作者:HelloGitHub-小鱼干 如果你有一辆普通的自行车,那么就可以使用下 X-TRACK 这个项目制作一个自己的测速器,记录你的行驶轨迹还有车速,体验一把硬件发烧友的乐趣.如果你有一个非 ma ...

  8. Pytorch指定GPU的方法总结

    Pytorch指定GPU的方法 改变系统变量 改变系统环境变量仅使目标显卡,编辑 .bashrc文件,添加系统变量 export CUDA_VISIBLE_DEVICES=0 #这里是要使用的GPU编 ...

  9. ;~ 小部分AutoHotkey脚本源代码测试模板样板.ahk

    ; ;~ 小部分AutoHotkey脚本源代码测试模板样板.ahk ;~ 请把一行或几行少量代码放到此文件中实际测试一下,;~ 看看测试结果如何,等到能够实现代码功能时再复制到自己的脚本代码文件中;~ ...

  10. 04.委托Delegation

    1. 基本了解 1.1 委托简述 官方文档 委托是一种引用类型,表示对具有特定参数列表和返回类型的方法的引用,用于将方法作为参数传递给其他方法,可将任何可访问类或结构中与委托类型匹配的任何方法分配给委 ...