首页 > 其他分享 >全局消息钩子注入 Dll

全局消息钩子注入 Dll

时间:2024-09-02 23:07:01浏览次数:2  
标签:钩子 截获 Dll 消息 全局 注入

常用的线程注入方法有:远程线程注入、全局消息钩子注入、APC 应用层异步注入、ZwCreateThreadEx 强力注入纯汇编实现的线程注入等。

今天我们讲一下全局消息钩子注入的这种方法,其原理是通过 SetWindowsHookEx 函数,注册一个全局消息钩子,当我们截获到消息时(只要权限足够,任何基于消息机制的程序都会被截获消息),会先强制将我们制定的 Dll 注入到目标程序。

step 1

首先我们编写一个回调函数,每当我们的全局消息挂钩截获到消息的时候,都会跳转到我们的回调函数中,由于我们的目的只是将 Dll 文件注入到指定进程,所以我们不对截获的全局消息进行处理,直接转发:

HHOOK g_hHook = NULL;

// 截获消息处理函数
LRESULT CALLBACK GetMsgProc(int code, WPARAM wParam, LPARAM lParam)
{
	// 不对截获的消息做任何处理,直接将 hook 消息传递给当前 hook 链的下一个过程
	return CallNextHookEx(g_hHook, code, wParam, lParam);
}

step 2

首先我们需要加载 Dll 文件,获取句柄:

HMODULE hModule = NULL;

// 加载动态链接库
hModule = LoadLibraryA("C:\\Users\\Administrator\\Desktop\\console_Dll.dll");

step 3

然后我们就可以通过 SetWindowsHookEx 函数设置全局消息挂钩了:

// 设置全局消息挂钩,将挂钩函数安装到 hook 链中
g_hHook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)GetMsgProc, hModule, 0);
if (NULL == g_hHook)
{
    printf("全局消息钩子注入失败\r\n");
    system("pause");
    return -1;
}
else
{
    printf("全局消息钩子注入成功\r\n");
    system("pause");
}

需要注意的是,该函数的第一个参数表示需要挂钩消息的类型,第二个参数表示截获消息处理函数,第三个参数表示需要注入的 Dll,第四个参数需要注入的线程(0 表示注入所有线程)。

当然,我们也可以对特定进程的线程进行遍历,指定截获特定进程中线程产生的消息。

step 4

最后我们要记得卸载挂钩,卸载后被加载到各个进程中的 Dll 也会被卸载。

// 卸载全局消息挂钩
if (NULL != g_hHook)
{
    UnhookWindowsHookEx(g_hHook);
}
system("pause");

运行程序的时候要注意,最好在虚拟机中运行(否则路过的狗都会被注入一下),由于之前写的 Dll 文件中在被注入到进程中的时候会弹出一个消息框,因此在物理机上进行全局消息钩子注入 Dll 可能会导致机器卡死,运行结果如下:

当然我们也可以在 Dll 文件中设置全局消息钩子,但笔者感觉比较麻烦,所以在此不多做详述。

标签:钩子,截获,Dll,消息,全局,注入
From: https://www.cnblogs.com/lostin9772/p/18393685

相关文章

  • 远程线程注入 Dll
    常用的线程注入方法有:远程线程注入、普通消息钩子注入、全局消息钩子注入、APC应用层异步注入、ZwCreateThreadEx强力注入和纯汇编实现的线程注入等。今天我们讲一下远程线程注入的这种方法,其原理是获取LoadLibrary系统函数的地址(我们知道系统函数的地址在每个进程中都是保持......
  • Dll 可执行文件的编写与调用
    一、Dll可执行文件的编写首先我们需要在VS创建一个动态链接库(DLL)项目,然后会生成如下代码://dllmain.cpp:定义DLL应用程序的入口点。#include"pch.h"BOOLAPIENTRYDllMain(HMODULEhModule,//指向Dll模块的句柄DWORDul_reason_for......
  • 《鸣潮》游戏崩溃弹窗“错误代码[126]:加载xapofx1_5.dll失败”该怎么解决?鸣潮游戏闪
    在《鸣潮》游戏中,若出现崩溃弹窗“错误代码[126]:加载xapofx1_5.dll失败”,可尝试重新安装游戏运行所需的组件。检查系统环境是否完整,确保相关动态链接库文件正确安装,以解决此问题,顺利进行游戏。本篇将为大家带来《鸣潮》游戏崩溃弹窗“错误代码[126]:加载xapofx1_5.dll失败”该......
  • “由于找不到 acui23.dll 无法执行代码”专家级修复教程:详尽步骤助您重启应用程序
    当您尝试运行AutoCAD或其他依赖acui23.dll文件的应用程序时,可能会遇到“由于找不到acui23.dll无法执行代码”的错误提示。这通常意味着系统中缺少必要的动态链接库文件或存在兼容性问题。本文将详细解释这个问题的原因,并提供多种解决方法,帮助您顺利运行应用程序。acui2......
  • WinRM远程管理受阻?wsclient.dll缺失的诊断与修复全流程
    wsclient.dll是一个与Windows系统相关的动态链接库(DLL)文件,通常与Windows远程管理(WinRM)服务有关。WinRM服务允许远程访问和管理Windows系统,wsclient.dll可能包含了处理远程请求、资源管理和与其他系统组件交互等功能所需的函数和资源,对于确保远程管理功能的正常运行非常重要。......
  • hp1006pp.dll:HP打印机驱动的核心,受损后的修复指南
    hp1006pp.dll是一个与HP打印机相关的动态链接库(DLL)文件,通常与HPLaserJet1006等型号的打印机驱动程序的功能实现有关。这个DLL文件可能包含了处理打印作业、资源管理和与其他系统组件交互等功能所需的函数和资源,对于确保打印机驱动程序的正常运行非常重要。当hp1006pp.dll......
  • IDA反编译dll库时导入C++头文件
    引言有时候,可能因为硬盘损坏等等原因,自己曾经写的动态链接库源码丢失了,幸好对应的头文件得以保留了下来,这个动态链接库主要是某种算法的实现,并没有继承其他的一些类库,比如MFC之类的,而自己对算法的实现已经忘得差不多了,而突然又需要该算法的实现过程,那么有什么办法可以帮助......
  • DLL文件丢失?《阿玛拉王国:惩罚重制版》玩家必看指南
    在启动或游玩《阿玛拉王国:惩罚重制版》(KingdomsofAmalur:Re-Reckoning)这款动作角色扮演游戏时,不少玩家可能会遇到提示缺少某个DLL文件的情况,例如XINPUT1_3.dll、d3dx9_43.dll等。这些问题通常表明游戏所需的某个动态链接库(DLL)文件丢失或损坏。本文将详细介绍这类问题的原因......
  • 如何解决《罗马2全面战争》中的twitchsdk_32_release.dll错误模块跳出问题?实用技巧与
    当您启动《罗马2全面战争》时,可能会遇到与twitchsdk_32_release.dll相关的错误提示,这可能导致游戏无法正常运行。本篇文章将深入探讨这一问题的原因以及提供多种解决方法,帮助您顺利启动游戏。twitchsdk_32_release.dll错误模块跳出的原因twitchsdk_32_release.dll文件出现......
  • OpenGL32.dll找不到入口点?快速修复指南及常见故障排除技巧
    在使用某些基于OpenGL的应用程序或游戏时,用户可能会遇到“OpenGL32.dll找不到入口点”的错误消息。这类问题通常会阻止应用程序正常运行,给用户带来不便。本文将详细介绍这一问题的原因以及如何有效地解决它。OpenGL32.dll找不到入口点的原因文件损坏或丢失:OpenGL32.dll文件......