DLL注入技术之消息钩子注入(HOOK简单的实现)

article/2025/9/24 17:51:11

低头不是认输,是要看清自己的路。仰头不是骄傲,是看见自己的天空。——致自己

Hook,是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。简单来说,如下图所示(个人理解,如有错误请留言):

现在开始简单的编写一个程序,简单的实现下hook,以notepad.exe为例(因为它比较简单,hook它不用考虑权限其他啥的),对其进行hook,拦截其键盘消息。首先编写一个安装钩子的程序。

#include<stdio.h>
#include<conio.h>
#include<windows.h>#define DLL_NAME   "HookKeyBoard.dll"
#define HOOK_START "HookStart"
#define HOOK_STOP  "HookStop"typedef void(*PFN_HOOKSTART)();
typedef void(*PFN_HOOKSTOP)();int main()
{HMODULE hDll =NULL;PFN_HOOKSTART HookStart = NULL;PFN_HOOKSTOP  HookStop  = NULL;char ch = 0;//加载dllhDll = LoadLibraryA(DLL_NAME);//获取导出函数的地址HookStart = (PFN_HOOKSTART)GetProcAddress(hDll,HOOK_START);HookStop  = (PFN_HOOKSTOP)GetProcAddress(hDll,HOOK_STOP);//开始hookHookStart();//输入Q退出hookprintf("输入Q退出hook!\n");while(1){char h = getch();putch(h);if( h == 'Q')break;}//结束hookHookStop();//卸载dllFreeLibrary(hDll);return 0;  
}

可以看到,我加载了一个HookKeyBoard.dll,并使用了它的两个导出函数HookStart和HookStop,一个用来hook,一个用来Unhook,下面开始写HookKeyBoard.dll(注意写的是dll)。

#include<stdio.h>
#include<windows.h>#define HOOK_PROCESS_NAME "notepad.exe"HINSTANCE hInstance = NULL;
HHOOK hHook = NULL;
HWND hWnd = NULL;BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD dwReason, LPVOID IpvReserved)
{switch( dwReason ){case DLL_PROCESS_ATTACH: hInstance = hinstDLL;break;case DLL_PROCESS_DETACH: break;}return TRUE;
}LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{char szPath[MAX_PATH]={0,};CHAR *p = NULL;if(!(lParam & 0x80000000))//释放按键时{GetModuleFileNameA(NULL,szPath,MAX_PATH);p = strrchr(szPath,'\\');//比较进程名称if(!_stricmp(p+1,HOOK_PROCESS_NAME)){//MessageBox(NULL,TEXT("hook成功"),TEXT("MY"),MB_OK);return 1;}}//不是hook的程序,则传递到出去return CallNextHookEx(hHook,nCode,wParam,lParam);
}
extern "C" __declspec(dllexport) void HookStart() 
{hHook = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,hInstance,0);//MessageBox(NULL,TEXT("hook成功"),TEXT("MY"),MB_OK);
}extern "C" __declspec(dllexport) void HookStop()
{if(hHook){UnhookWindowsHookEx(hHook);hHook = NULL;}
}

消息钩子注入原理是利用Windows 系统中SetWindowsHookEx()这个API,他可以拦截目标进程的消息到指定的DLL中导出的函数,利用这个特性,我们可以将DLL注入到指定进程中。(msdn没搜到这个函数,msdn只列出了A版和W版的函数,他们的区别就是A字符串用ascii编码,W 宽字符,字符串用Unicode编码,所以区别不大)。

看下参数

可以看到,我挂钩KeyboardProc这个系统函数。

程序写完了,代码比较简单,有点编程基础的应该都能看懂,现在开始进行测试。测试之前,先将HookKeyBoard.dll拷贝到工程生成hook.exe的目录下,否则它找不到DLL,就会出现下面的情况。详细原因请参考之前我写的这篇博客DLL搜索的目录顺序。

然后测试,第一步先打开notepad.exe,然后点击hook.exe

然后打开Process Explorer进程监视器,查看加载的DLL,然后尝试在notepad.exe里面输入东西,可以看到HookKeyBoard.dll被notepad.exe加载了,并且在notepad.exe输入任何东西都不能显示出来(被hook了),其他地方则可以正常显示。

 


http://chatgpt.dhexx.cn/article/rFxgN89W.shtml

相关文章

powerdesigner制作数据字典

powerdesigner制作数据字典TOC 配置好数据库连接之后&#xff0c;点击File→New Model 这步是默认的点OK就行。 数据传输完之后点击保存。 选择好保存路径后&#xff0c;关闭软件&#xff08;关闭时注意选择保存&#xff09;&#xff0c;然后再重现打开。 重新打开Po…

设计 - 数据字典

文档分类 写文档目的 你有没有遇到过开晨会、周会的时候某个问题已经讨论的很清晰。 但是几天后或者临近周末的时候再说这个问题的时候&#xff0c;团队中有的童鞋会说:“我不知道&#xff0c;没有说过这个问题或者这个方案”&#xff0c;因此而造成的BB事很伤神费心。 为了避免…

Oracle 数据字典详解

Oracle 数据字典详解 什么叫数据字典&#xff1f; 数据字典指的是描述数据的数据。 举个例子&#xff1a;我们在数据库里面创建了一个表&#xff0c;这个表位于哪个数据文件、这个表有哪些列、这个表的每一个列的数据类型、这个表的约束等等。这些信息都是描述这个表的&#…

数据字典及其使用(方案一)

1 数据字典 1.1 什么是数据字典 将如下这些具有相同类型的配置项&#xff0c;配置到系统的数据字典表中&#xff0c;方便系统维护&#xff0c;由超级管理员统一在后台进行数据字典维护&#xff0c;如果用户需求要增加变更配置项&#xff0c;只需要修改数据字典表记录…

什么是mysql数据字典_数据字典是什么?

展开全部 数据e69da5e6ba9062616964757a686964616f31333366306434字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明,使用数据字典为简单的建模项目。简而言之,数据字典是描述数据的信息集合,…

matlab新建数据字典及如何导入

一、如何创建 点击model explorer 依次点击file->new->Data dictionary 输入数据字典的名字 创建之后为一下界面&#xff1a; 点击 进行创建 右键save change 进行保存 没保存时候带星号 &#xff0c;保存之后信号消失。 二、如何导入 点击file—>model proper…

数据治理浅谈之数据字典

导读 数据字典作为数据治理整体体系中重要的一环&#xff0c;理解和使用数据字典尤为重要。本文将从数据字典概念、定义、结构、应用、治理等方面进行详细阐述。 01概念 数据字典&#xff08;Data Dictionary&#xff09;是一个容器&#xff0c;用于包含有组织定义和使用的所…

【数据库管理】⑩数据字典

1. 数据字典的概述 数据字典&#xff08;Data Dictionary&#xff09;是数据库管理系统中的一个重要组成部分&#xff0c;它是一个存储数据库元数据的集合&#xff0c;包含了数据库中所有对象的定义和描述信息。数据字典可以帮助用户了解数据库中的各种对象和数据结构&#xff…

List中remove()的用法

List remove的三种正确方法 1、倒序循环&#xff0c;因为list删除只会导致当前元素之后的元素位置发生改变&#xff0c;所以采用倒序可以保证前面的元素没有变化&#xff1b; for(int ilist.size()-1;i>0;i--){ list.remove(i); }2、顺序循环时&#xff0c;删除当前位置的…

JSP内置对象Session——setAttribute/getAttibute/removeAttribute

本文章代码使用了request内置对象&#xff0c;可先查看之前的文章学习。 前言 一、Session使用环境 二、常用方法 三.使用示例 1. 设计某系统登陆模块&#xff0c;该模块需满足以下条件&#xff1a; 2.login.jsp登录页面 2.check.jsp校验页面 3. success.jsp成功登录页面…

Iterator remove()详解

转自&#xff1a;http://blog.51cto.com/tianxingzhe/1693218 一、Iterator的API 关于Iterator主要有三个方法&#xff1a;hasNext()、next()、remove() hasNext:没有指针下移操作&#xff0c;只是判断是否存在下一个元素 next&#xff1a;指针下移&#xff…

VLAN命令行配置

VLNA配置任务概览 各配置任务间的逻辑关系&#xff1a; VLAN配置任务概览&#xff1a; 配置任务描述划分VLAN创建并划分VLAN&#xff0c;将没有二层互通需求的用户进行隔离&#xff0c;可增强网络的安全性、减少广播流量&#xff0c;同时也减少了广播风暴的产生。配置通过VLA…

VLAN配置命令

VLAN作用 分割广播域 VLAN分类 静态VLAN 基于端口划分 动态VLAN 基于MAC地址划分 VLAN范围 0-4095 共4096个vlanID 0与4095系统保留 1-4094可用 VLAN配置命令 VLAN基础配置代码 添加vlan&#xff08;2-4094&#xff09; vlan 10 删除vlan undo vlan 10 批量增加 vlan batch …

华为 -VLAN配置

按照实验拓扑图接线。 配置PC1&#xff1a;IP&#xff08;192.168.1.1/24&#xff09;,PC2:IP(192.168.2.1/24)。测试PC1和PC2的连通性&#xff1a;用PC1去PingPC2&#xff0c;查看Ping的结果&#xff0c;并解释原因。 PC1和PC2在不同的网段&#xff0c;不能ping通 配置PC1&…

华为交换机vlan配置

拓扑图&#xff1a; 配置命令&#xff1a; sw1: sys sys sw1 vlan 10 vlan 20 int e0/0/1 port link-type access port default vlan 10 int e0/0/2 port link-type access port default vlan 20 int e0/0/3 port link-type trunk port trunk allow vlan 10 20sw2: sys sy…

ensp交换机vlan配置

交换机 一、VLAN1、VLAN的概念2、优势3、VLAN的种类4、VLAN的范围5、VLAN标识6、IEEE802.1q工作原理帧格式 二、交换机命令配置1、华为交换机链路类型2、添加VLAN 一、VLAN 1、VLAN的概念 VLAN&#xff08;Virtual Local Area Network&#xff09;即虚拟局域网&#xff0c;是…

eNSP VLAN配置

按如上拓扑图进行配置&#xff1a; 1、按拓扑图标记&#xff0c;划分VLAN&#xff0c;分配固定IP 2、开启两个路由器的DHCP服务&#xff0c;分配所有客户机IP地址 3、实现全网互通 一、划分VLAN&#xff0c;分配固定IP 因为两个路由器连接不同的交换机&#xff0c;所以左右两…

华三vlan配置

基于MAC地址划分vlan 配置思路&#xff1a; 创建VLAN 100、VLAN 200。 配置Device A和Device C的上行端口为Trunk端口&#xff0c;并允许VLAN 100和VLAN 200的报文通过。 配置 Device B 的下行端口为Trunk端口&#xff0c;并允许VLAN 100和VLAN 200的报文通过&#xff1b;上行…

计算机网络配置——VLAN的配置

一、实验目的 了解VLAN的作用和用途&#xff1b;掌握单一交换机与跨交换机划分VLAN的配置方法&#xff1b; 理解VLAN标签添加和删除的过程。 二、实验任务 在思科模拟器中实现下图所示的VLAN的配置&#xff1a; 使用ping命令验证配置结果&#xff0c;并完成实验报告。 二、…

H3C_交换机_Vlan配置

奶奶说&#xff0c;没事不要和小学生比爹。 一、实验环境 HCL v2.1.2win7操作系统 二、拓扑结构 三、模拟环境 一般用于企业网络或者需要对局域网进行逻辑区域划分的网络。不同vlan间一般情况是不能相互访问的&#xff0c;这样就可以减少广播和提高网络安全性。 四、介绍 …