DLL注入之全局钩子注入

这篇博客介绍了Windows中的全局钩子注入技术,通过SetWindowsHookEx函数在DLL中安装钩子,实现对系统消息的监控。文章详细讲解了钩子的概念、函数用法,并提供了VS2019环境下创建DLL项目及C++代码示例,展示了如何设置和卸载全局钩子。最后,通过Process Explorer验证了DLL注入的效果。
摘要由CSDN通过智能技术生成

HOOK概述

Hook也就是钩子,在Windows中大部分的应用程序都是基于消息机制,会根据不同的消息使用消息过程函数完成不同的功能。而钩子是一种消息处理机制,它可以比你的应用程序先获得消息,可以用来截获、监视系统的消息,改变执行流程实现特定的功能。对于全局钩子来说,它会影响所有应用程序,所以钩子函数必须在DLL中实现。

函数介绍

SetWindowsHookEx

作用:
将程序定义的钩子函数安装到挂钩链中,安装钩子的程序可以监视系统是否存在某些类型的时间,这些事件与特定线程或调用线程所在的桌面中的所有线程相关联。
网络安全学习攻略
函数声明:

HHOOK WINAPI SetWindowsHookEx(
    _In_ int        idHook,
    _In_ HOOKPROC     lpfn,
    _In_ HINSTANCE    hMod,
    _In_ DWORD        dwThreadId
)

参数:
idHook:
安装的钩子程序的类型,具体值参考官方手册

lpfn:
指向钩子程序过程的指针,若参数dwThreadId为0或者指示了一个其他进程创建的线程之标识符,则参数lpfn必须指向一个动态链接中的挂钩处理过程。否则,参数lpfn可以指向一个与当前进程相关的代码中定义的挂钩处理过程。

hMod:
包含由lpfn参数指向的钩子过程的DLL句柄。

dwThreadId:
与钩子程序关联的线程标识符,如果为0,则钩子过程与系统中所有线程相关联。

返回值:
成功:返回钩子过程句柄
失败:返回NULL

UnhookWindowsHookEx

作用:
卸载钩子

函数声明:

BOOL WINAPI UnsetGlobalHook(
    _In_ HHOOK hhk
)

参数:
hhk:
卸载的钩子句柄

实例代码

使用IDE:VS2019
创建一个DLL项目

pch.h:

#include "framework.h"
extern "C" _declspec(dllexport) int SetGlobalHook();
extern "C" _declspec(dllexport) LRESULT GetMsgProc(int code, WPARAM wParam, LPARAM lParam);
extern "C" _declspec(dllexport) BOOL UnsetGlobalHook();
#endif //PCH_H

dllmain.cpp

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"</
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值