钩子注入原理讲解(SetWindowsHook注入)

追逐自己的梦想----------辅助制作第八课:利用SetWindowsHook将进程注入游戏主线程来解决资源冲突的问题 本节课中,我们需要学习利用SetWindowsHook来注入主线程,然后利用多线程的原理来解决资源冲突的问题。 1.注入的原因:不同的线程在访问同一个共享数据的时候,如果没有同步处理,就会造成错误,从而导致程序崩溃,所以我们可以给自己编写的多线程,并且加上一些同步出来,然后再将dll注入到游戏的主线程中,就可以解决资源冲突的问题。 我们要用到的函数是SetWindowsHook 阅读详情

我们想要用自己写的一个函数来接管A程序对某消息的处理,那么首先你这个函数所在的文件,是要在这个A程序里面的,也就是说,SetWindowsHookEx函数,在他下钩子的过程当中,操作系统帮助我们完成了一次注入。

HHOOK SetWindowsHookExA(

int                        idHook,         //钩子程序的类型,常用的有WH_KEYBOARD用于钩取键盘消息

HOOKPROC       lpfn,              //回调函数,就是接收到消息后怎么处理。如果填NULL程序会崩溃

HINSTANCE        hmod,          //lpfn函数所在模块的地址

DWORD              dwThreadId //钩子针对的线程,如果填0就是针对所有进程,叫全局钩子

);

关于SetWindowsHookExA第二参指定函数地址的理解:

  • 如果说,你想注入一个其他进程创建的线程,就是当dwThreadId是其他进程创建的线程,或者是0(所有线程)的时候,这个lpfn必须是一个动态链接库里的函数。只有当你想hook本程序的线程,也就是自己hook自己的时候,这个lpfn才可以是当前进程相关代码中定义的函数。
  • 如果你想给自己的程序下钩子(自己hook自己),这时候dwThreadId填自己进程的线程,然后lpfn可以是自己进程对应代码里的函数,也可以是动态链接库的函数。如果lpfn是自己进程对应代码的函数的话,hMod一定得是空。
  • 我们给一个别的程序做注入,lpfn对应的函数,必须不能写在注入器里,因为如果你把lpfn写在注入器里,hMod就要是注入器模块,但是注入器是个.exe文件,你觉得能把一个.exe文件注入到另一个.exe文件中吗?不行。所以我们必须是把lpfn函数写在一个.dll文件对应的代码里。这里我们把.dll文件命名为CheatMode。
  • 所以现在又面临一个问题,就是你怎么让注入器这里得到CheatMode里的函数?假如CheatMode是一个动态链接库,那啥事没有,但是如果CheatMode是一个静态链接库,不是动态链接库,那又该怎么办?我这里给出的解决方案是,在CheatMode里把该函数给导出(在CheatMode.def里写下这个函数的名字),这样我们就可以在注入器里先HMODULE hMod = LoadLibrary(L"CheatMode.dll"),加载CheatMode.dll模块,然后GetProcAddress(hMod, "lpfn"),这样就得到这个函数了。

        整体概括:当调用完SetWindowsHookExA函数后,就会把hMod模块注入到dwThreadId线程所在的进程当中。之后一旦dwThreadId线程接收到idHook类型的消息,就会调用hMod模块里的lpfn函数。

全局键盘钩子SetWindowHookEx:Windows编程中的事件监控机制 SetWindowHookEx函数是Windows API中的一个重要函数,它用于安装一个钩子(Hook)过程,以便在特定事件发生时得到通知。这种机制可以让我们在操作系统处理某些消息之前拦截并处理这些消息,例如键盘、鼠标或其他系统级事件。SetWindowHookEx函数为开发者提供了灵活的手段,来增强应用程序的功能或实现特定的系统级监控。安装钩子的过程涉及到指定一个回调函数,该函数将在满足特定条件的事件发生时被调用。这个过程通常在应用程序的初始化阶段完成,设置好钩子后,它将持续运行直到显式地移除。 阅读详情

相关推荐

SetWindowsHook 函数 钩子类型定义.docx

钩子函数定义 用于查阅winapi的一些定义,已经整理 和备注说明 方便理解和使用。

SetWindowsHook详解及应用实例

SetWindowsHook详解及应用实例

tosim的博客 2万+

keil软件调试(Debug)仿真教程(软件调试和硬件调试的区别)及常用调试按键详解

单片机的调试分为两种,一种是使用软件模拟调试,第二种是硬件调试,两种调试方式各有不同,软件模拟调试有误差,而硬件调试,借用仿真器调试是嵌入式开发中常用方法。

weixin_51624736的博客 3万+

Windows钩子的使用

我们知道Windows中的窗口程序是基于消息,由事件驱动的,在某些情况下可能需要捕获或者修改消息,从而完成一些特殊的功能(MFC框架就利用Windows钩子对消息进行引导)。对于捕获消息而言,无法使用IAT或Inline Hook之类的方式去进行捕获,这就要用到接下来要介绍的Windows提供的专门用于处理消息的钩子函数。 1. 挂钩原理 Windows下的应用程序大部分都是基于消息机

其疾如风 其徐如林 侵略如火 不动如山 1万+

.ipynb文件深度解析:从JSON结构到Jupyter Notebook高效使用指南

在Python开发与数据处理领域,交互式编程正成为探索数据与验证思路的高效方式。Jupyter Notebook作为最流行的交互式环境之一,其默认文件格式.ipynb本质是一个基于JSON的文本文件,内部通过单元格组织代码、说明文字与运行结果。理解其JSON结构,不仅有助于掌握Notebook的存储原理,更能为文件损坏修复、版本控制与自动化转换提供基础。依托对单元格类型、魔法命令及输出可视化的熟练运用,数据分析和数据可视化流程可以变得更为流畅。同时,借助VS Code、nbconvert等工具,开发者能将.

weixin_28839629的博客 354

PPT| 公司网络安全意识培训 P73

近年来,随着互联网的不断发展,网络安全问题也日益凸显,各种网络安全事件层出不穷,对个人和企业的信息安全带来了巨大的威胁。针对这一现状,国家加强了对信息安全的保护,相继颁布了多项法律法规,其中最重要的就是网络安全法。本文将从网络安全法和其他相关法律入手,对信息安全的保护措施进行深入分析。 本人在四大咨询机构从事咨询工作多年,二十年一线数字化规划咨询经验,提供制造业数智化转型规划服务,顶层规划/企业架构/数据治理/数据安全解决方案资料干货. 该PPT共73页,原文获取及来源公众号:【智能制造数字化咨询】

waldensss的博客 1422

SetWindowHook 注入

挂钩原理 Windows下的应用程序大部分都是基于消息机制的,它们都会有一个消息过程函数,根据不同的消息完成不同的功能。 Windows操作系统提供的钩子机制的作用就是用来截获和监视这些系统中的消息。Windows钩子琳琅满目,可以用来应对各种不同的消息。 按照钩子作用的范围不同,又可以分为局部钩子和全局钩子。局部钩子是针对某个线程的; 而全局钩子则是作用于整个系统中基于消息的应用。全局钩子需要使用DLL文件,在DLL中实现相应的钩子函数。 在操作系统中安装全局钩子后,只要进程接收到可以发出钩子的消息,全

dre4merp 1647

【Godot】构建可维护的游戏工程 —— 项目代码组织结构

本文系统梳理了Godot引擎项目组织原则与架构模式,提出场景中心化、命名规范一致性和资源隔离三大核心原则。推荐按功能模块划分目录结构(如scenes/、entities/、systems/),采用snake_case命名避免跨平台问题,并通过.gdignore优化资源管理。文章详细解析了自包含场景设计、信号驱动解耦等架构技巧,以及团队协作中的版本控制策略,强调通过模块化设计平衡一致性与实用性。最终目标构建清晰可维护的项目结构,使资源定位和功能扩展更加高效。(148字)

qq_40205510的博客 1179

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

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

weixin_30709929的博客 435

内网穿透-frp二层隧道搭建

环境: weblogic: 192.168.0.133 10.10.20.12 win7 : 10.10.20.7 10.10.10.7go语言、跨平台的 可以分为frpc和frps frpc—>请求----->frps frps:放到黑客公网上 1.需要出网 2.配置: frpc:放到肉鸡上,请求frps 2.端口转发 2.1frpc传到肉鸡(weblogic) 利用工具,传入内存马到weblogic,然后使用冰蝎进行连接 然后在文件管理中上传frpc.exe和frpc.ini文件 fr

yyytaotao的博客 2105

智能车图像处理4-入门级分析3 ---十字路口补线

PS :入门级文章适合新手,如果已经有基础可以去看进阶篇文章。

taiyuezyh的博客 1万+

Window Hook 技术详解

Hook简介 微软的MSDN中,对Hook的解释为: A hook is a point in the system message-handling mechanism where an application can install a subroutine to monitor the message traffic in the system and process certain

cx1990820的专栏 8692

RK3588 DDR5 方案

RK3588 DDR5方案支持多种LPDDR5/LPDDR5X内存型号,包括美光、三星、海力士、江波龙和佰维等品牌。文档详细列出了已验证的DDR5内存规格,涵盖2GB-16GB容量范围,提供组织形式、封装类型和测试状态等信息。其中美光型号最全面,支持12GB/16GB大容量方案。部分型号处于测试验证阶段(T/A),需量产进一步确认性能。该方案为RK3588平台开发提供可靠的内存选型参考。

501846585_QQAndroid_java 1085

windows hook

使用VT-x创建hypervisor监控系统通过EPT(Extended Page Table)监控关键系统调用拦截NtCreateFile调用并检查文件名对目标文件返回访问拒绝状态在用户态显示权限提示c复制// 虚拟化相关常量// EPT相关// 目标文件名?// 函数声明。

az44yao的专栏 1453

TC397 EB MCAL开发从0开始系列 之 [13.1] Dma配置实战 -实现M2M数据传输(读存储写存储)

TC3XX TC397 MCAL DMA 从0搭建测试用例-实现M2M 存储到存储数据传输

yy九歌的博客 1916

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

请给出setwindowshook函数的C++示例

SetWindowsHook函数用于安装一个系统钩子。它的原型为: HHOOK SetWindowsHookEx( int idHook, HOOKPROC lpfn, HINSTANCE hMod, DWORD dwThreadId ); 第一个参数idHook是钩子类型,可能的值有WH_KEYBOARD(键盘钩子)、WH_MOUSE(鼠标钩子)等。 第二个参数lpfn是回调函数...

weixin_35755434的博客 424

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

『网络安全科普』Windows安全之HOOK技术机制

如你所知,Windows系统是建立在事件驱动的机制上的,而每一个事件就是一个消息,每个运行中的程序,也就是所谓的进程,都维护着一个或多个消息队列(消息队列的个数取决于进程内包含的线程的个数)。HWND hwnd;//接受消息的窗口句柄//消息常量标识符(消息号)//32位消息特定附加信息//32位消息特定附加信息DWORD time;//消息创建时的时间POINT pt;//消息创建时的光标位置}MSG;

shandongjiushen的博客 1113

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SetWindowsHookEx钩子详解

SetWindowsHookEx   钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达

Barry的博客 1万+

SetWindowsHookEx实现过程

实现过程 如果创建的是全局钩子,那么钩子函数必须在一个DLL中。这是因为进程的地址空间是独立的,发生对应事件的进程不能调用其他进程地址空间的钩子函数。如果钩子函数的实现代码在DLL中,则在对应事件发生时,系统会把这个DLL加载到发生事件的进程地址空间中,使它能够调用钩子函数进行处理。 在操作系统中安装全局钩子后,只要进程接收到可以发出钩子的消息,全局钩子的DLL文件就会由操作系统自动或强行地加载到该进程中。因此,设置全局钩子可以达到DLL注入的目的。创建一个全局钩子后,在对应事件发生的时候,系统就会把DLL

Y_sl_itachi的博客 1078

c++ 创建窗口 全中文注释(包括关键字 宏 函数)及SetWindowsHook线程钩子简单操作

#include <Windows.h> //包含Windows API HHOOK mhhok;//设置鼠标钩子全局变量 HHOOK khhok;//设置键盘钩子全局变量 // LRESULT 就是long型的封装 // HWND 窗口句柄类型相当于 窗口id // UINT unsigned int 无符号int 消息类型(鼠标点击消息,键盘按键消息) //WPARAM unsigned int // LPARAM long //窗口处理函数 LRESULT CALLBACK W

m0_50302965的博客 994

DLL注入之SetWindowsHook

1、在一个DLL中有函数被某个进程所调用就会先调用DllMain函数,然后进行reason选择,   进行进程启动的执行时进行你的hook,全局当然是最先被初始化的,在全局区此时也可以进行你需要的hook,   当然的这些hook的前提是你能把你的Dll注入到所有的进程中。 2、而1中,我们可以通过SetWindowsHookEx函数进行hook,选择WH_GETMESSAGE,就可以达到D...

weixin_30381793的博客 898

关于SetWindowsHookEx【HOOK钩子】

请问如果我只想获得当前的键盘输入,最简单的办法是什么呢?如果只使用Win SDK的话。 我是用的console程序。 谢谢,请给举个例子 ----------------------------------------------------------------------做一个全局的DLL,然后DLL里面调用SetWindowsHook就可以了。这个和console没有关系哈。 ------

djimon的专栏 4268

《Windows核心编程》之“Windows挂钩”(三)

本文主要结合之前两篇介绍的“Windows挂钩”知识,讲解《Windows核心编程》一书中的“DIPS"示例程序和我的调试经验。 一、程序功能介绍 1,功能需求     DIPS.exe应用程序使用了Windows Hook来将一个DLL注入到Explorer.exe的地址空间中,并在内部给桌面的ListView控件发送LVM_GETITEM和LVM_GETITEMPOSITON消息

Sagittarius_Warrior的博客 1641

Windows核心编程 HOOK

Windows核心编程 HOOK ,全局钩子,局部钩子,以及相关的API

qq_61553520的博客 1810

Windows_HOOK总结_待完善

DLL创建: DLL使用: 使用WIndows挂钩注入DLL: 安装钩子: HHOOK WINAPI SetWindowsHookEx( \\钩子类型 __in int idHook, \\函数地址,即挂钩类型事件发生时,系统应该调用的函数; __in HOOKPROC lpfn, \\标识一个dll,这个dll中包含第二个参数表示的函数;实例句柄 __in H...

askunix 909
上一篇: 命令行参数传递
下一篇: 使用C++代码调用目标程序函数心得
hx___y
博客等级 码龄6年 5粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值