DLL注入技术之消息钩子注入

article/2025/9/24 17:53:00

 消息钩子注入原理是利用Windows 系统中SetWindowsHookEx()这个API,他可以拦截目标进程的消息到指定的DLL中导出的函数,利用这个特性,我们可以将DLL注入到指定进程中。主要流程如下图所示


1.准备阶段
    需要编写一个DLL,并且显式导出MyMessageProc()函数,主要代码如下:

LRESULT WINAPI MyMessageProc(int code,WPARAM wParam,LPARAM lParam)  
{  return CallNextHookEx(NULL, code, wParam, lParam);  
}  
显示导出某个函数需要在.def文件中的EXPORTS填写MyMessageProc(),如下图所示:



2.HOOK阶段       
    使用SetWindowsHookEx()之前首先需要将HOOK的DLL 加载到本身的进程中,以此得到DLL的模块句柄,再使用GetProcAddress()得到DLL中显示导出的函数MyMessageProc()的函数地址,最后遍历出待注入进程的线程ID,这样SetWindowsHookEx()就可以利用这些参数进行HOOK了。主要代码如下图所示:

//加载DLL到本身进程  
hMod = LoadLibrary(pDllName);  
if(!hMod) return FALSE;  
//得到显示函数的地址  
lpFunc = (DWORD)GetProcAddress(hMod, "MyMessageProc");  
if(!lpFunc)  
{  if(hMod) FreeLibrary(hMod);  return FALSE;  
}  
//得到待注入EXE的进程ID  
dwProcessId = GetProcessId(pExeName);  
if(!dwProcessId)  
{  if(hMod) FreeLibrary(hMod);  return FALSE;  
}  
//得到待注入EXE的线程ID  
dwThreadId = GetThreadId(dwProcessId);  
if(!dwThreadId)  
{  if(hMod) FreeLibrary(hMod);  return FALSE;  
}  
//利用HOOK进行注入  
hhook = SetWindowsHookEx(  WH_GETMESSAGE,//WH_KEYBOARD,//WH_CALLWNDPROC,  (HOOKPROC)lpFunc,  hMod,  dwThreadId);  

3.释放阶段
    利用LoadLibrary()得到的模块句柄把本身进程的DLL释放掉,代码如下所示:

[cpp]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. if(hMod) FreeLibrary(hMod);  
消息钩子注入只需要对SetWindowsHookEx()和DLL导出函数有深刻的认识就可以很容编写,所以代码简单,比较容易实现。


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

相关文章

关于采用消息钩子机制的透明加密的简单破解

采用消息钩子机制的透明加密方式在各大企业中很常见,简单实用。文件在磁盘上以密文方式存储,打开时首先被加密软件客户端注入的钩子(hook)截获,解密成明文后再提交给相应程序;保存时同样被钩子截获&#xf…

VC 消息钩子编程

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! 一、消息钩子的概念 1、基本概念 Windows应…

Windows消息钩子[键盘监控]

之前看书,看到一眼消息钩子,一直没实践,现在有空弄了下, 主要原理是利用windows自带SetWindowsHookEx API函数 HHOOK SetWindowsHookEx( int idHook, //hook形式 HOOKPROC lpfn //hook过程 HI…

一、C++反作弊对抗实战 (基础篇 —— 4.利用消息钩子注入DLL)

这里将主要用到Windows API函数SetWindowsHookEx,它是微软提供给程序开发人员进行消息拦截的一个API,不过它的功能不仅用作消息拦截,还可以进行DLL注入。 一、关于SetWindowsHookEx 提这个函数在微软官网MSDN文档中原型声明如下: SetWindowsHookExA function (winuser.h…

windows10 记事本进程 键盘消息钩子 dll注入

看了很多文档,垮了很多坎,终于完成了这个demo; 有很多个人理解,可能不完全正确,见谅; 先上实现的图片: 如图,我通过SetWindowsHookEx()函数向记事本进程中当前窗口线程注入了自己写…

消息钩子学习工程

前奏 近来一直在自学Windows Hook相关的知识,已经尝试多种注入方式。尤其对消息钩子方式很感兴趣,因为看到Spy能够截获系统中绝大多数应用的消息流,就很想知道它的工作原理,打算制作属于自己的Spy。 消息钩子简介: 消息…

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

低头不是认输,是要看清自己的路。仰头不是骄傲,是看见自己的天空。——致自己 Hook,是Windows消息处理机制的一个平台,应用程序可以在上面设置子程序以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的…

powerdesigner制作数据字典

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

设计 - 数据字典

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

Oracle 数据字典详解

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

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

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

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

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

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

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

数据治理浅谈之数据字典

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

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

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

List中remove()的用法

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

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

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

Iterator remove()详解

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

VLAN命令行配置

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

VLAN配置命令

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