DLL注入之全局钩子注入

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

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"

HMODULE g_hDllModule = NULL;

BOOL APIENTRY 
【安全技术】关于几种dll注入方式的学习 何为dll注入 DLL注入技术,一般来讲是向一个正在运行的进程插入/注入代码的过程。我们注入的代码以动态链接库(DLL)的形式存在。DLL文件在运行时将按需加载(类似于UNIX系统中的共享库(share object,扩展名为.so))。然而实际上,我们可以以其他的多种形式注入代码(正如恶意软件中所常见的,任意PE文件,shellcode代码/程序集等)。 全局钩子注入Windows大部分应用都是基于消息机制,他们都拥有一个消息过程函数,根据不同消息完成不同功能,windows通过钩子机制来截获和监视. 阅读详情

相关推荐

[网络安全自学篇] 八十五.《Windows黑客编程技术详解》之注入技术详解(全局钩子、远线程钩子、突破Session 0注入、APC注入

从这篇文章开始,作者将带着大家来学习《Windows黑客编程技术详解》,其作者是甘迪文老师,推荐大家购买来学习。作者将采用实际编程和图文结合的方式进行分享,并且会进一步补充知识点,希望对您有所帮助。第二篇文章主要介绍4种常见的注入技术,包括全局钩子、远线程钩子、突破SESSION 0隔离的远线程注入、APC注入,案例包括键盘钩子、计算器远线程注入实现、APC注入等,希望对您有所帮助。

杨秀璋的专栏 2万+

hook程序——注入线程中的dll代码

dll方式注入到一个远程的线程中去,来实现hook相关api函数的功能

HookAPI并且在Windows程序启动前注入dll (C++)

这是本人用C++ 在VS2019IDE 用控制台写的一个可以在程序启动前注入dll 和Hook系统api的函数。Hook的是knernelbase的CreateProcessInternalW函数,希望对大家有帮助

DLL注入——使用全局钩子

因为进程的地址空间是独立的,发生对应事件的进程不能调用其他进程地址空间的钩子函数。如果钩子函数的实现代码在DLL中,则在对应事件发生时,系统会把这个DLL加载到发生事件的进程地址空间中,使它可以调用钩子函数进行处理。所以只要在系统中安装了全局钩子,那么只要进程接收到可以发出钩子的消息,全局钩子DLL就会被系统自动或者强行加载到进程空间中,这就可以实现DLL注入。);参数1:表示要安装的挂钩类型。参数2:表示的是钩子的回调函数。参数3:包含由lpfn参数执行的钩子过程的DLL句柄。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 3112

全局钩子DLL注入

全局钩子注入介绍背景 Windows下的应用程序大部分都是基于消息机制的,它们都会有一个消息过程函数,根据不同的消息完成不同的功能。Windows操作系统提供的钩子机制就是用来截获和监视这些系统中的消息。 按照钩子作用的范围不同,又可以分为局部钩子和全局钩子。局部钩子是针对某个线程的;而全局钩子则是作用于整个系统中基于消息的应用。全局钩子需要使用DLL文件,在DLL中实现相应的钩子函数。 接下来,本文将介绍利用全局钩子来进行DLL注入。 主要步骤 1.在DLL中设置钩子回调函数、设置全局钩子和卸载

苞米地里捉小鸡的博客 2252

关于dll注入方式的学习(全局钩子注入

如果钩子函数的实现代码在DLL中,则在对应事件发生时,系统会把这个DLL加较到发生事体的进程地址空间中,使它能够调用钩子函数进行处理。在操作系统中安装全局钩子后,只要进程接收到可以发出钩子的消息,全局钩子DLL文件就会由操作系统自动或强行地加载到该进程中。一般钩子分局部钩子与全局钩子,局部钩子一般用于某个线程,而全局钩子一般通过dll文件实现相应的钩子函数。这个api,主要是第一个参数,这里传入钩子的句柄的话,就会把当前钩子传递给下一个钩子,若参数传入0则对钩子进行拦截。类型的全局钩子DLL

2201_75856701的博客 1315

3.4 DLL注入:全局消息钩子注入

SetWindowHookEx 是`Windows`系统的一个函数,可用于让一个应用程序安装全局钩子,但读者需要格外注意该方法安装的钩子会由操作系统注入到所有可执行进程内,虽然该注入方式可以用于绕过游戏保护实现注入,但由于其属于全局注入所以所有的进程都会受到影响,而如果想要解决这个问题,则需要在`DllMain()`也就是动态链接库开头位置进行判断,如果是我们所需操作的进程则执行该DLL模块内的功能,如果不是则自动跳过不执行任何操作即可实现指定进程的注入方式。

微软技术分享 5614

MFC 全局钩子dll注入监听键盘消息

MFC通过DLL注入使用全局钩子来监听键盘消息,能实现在MFC界面外监听系统键盘消息。

hzl2323406的博客 1543

全局钩子注入DLL

0x00 原理说明: Windows系统基于消息驱动,每个进程都有各自的消息队列,每个进程都会GetMessage 调用WIN32API SetWindowsHookEx 可以在系统的钩子链中安装一个指定的钩子 如果使用 SetWindowsHookEx 安装 WH_GETMESSAGE 类型的钩子,并且钩子过程函数放在DLL中,就可以实现全局的DLL注入 0x01 关键API说...

aigo10000的博客 555

关于几种dll注入方式的学习

DLL注入技术,一般来讲是向一个正在运行的进程插入/注入代码的过程。我们注入的代码以动态链接库(DLL)的形式存在。

2302_76827504的博客 1572

全局钩子实例分析

1.关于全局钩子 如果要屏蔽其他进程的鼠标和键盘消息的话,那么局部钩子是不能实现的,我们需要使用远程钩子。而远程钩子的实现是需要借助DLL的,安装的钩子过程需要必须在动态链接库中去实现。远程钩子的设置过程与局部钩子的安装过程所用函数都是SetWindowsHookEx,只是参数不同而已,远程钩子的第4个参数应该设置为0,并把第三个参数指定为安装钩子过程的代码所在的DLL的句柄。 2.全局钩子

bobopeng 2709

DLL注入之使用SetWindowsHookEx注入

原理分析: 本次介绍的是使用全局钩子的方式进行注入。在Windows中可以使用SetWindowsHookEx来设置消息钩子,这个函数除了可以设置当前进程的钩子之外,它还可以设置全局钩子全局钩子,顾名思义,即当前正在运行的进程都会被设置相应的钩子。 //dwThreadId 设置为0,则是全局钩子。 HHOOK SetWindowsHookExA( int idHook, ...

even的博客 5668

接触DLL编写并实现线程注入全局钩子

资料"<<windows核心编程>> 你不会C,那先找本C的书...如果想要电子书的可以回帖留下你的Email,有空发给你,一些 自己珍藏的书籍 还有你应有VC++6.0和MSDN 好了,开始吧 目录 0一点建议 1DLL基本知识 2编写我们的DLL 3编写加载我们DLL的Loader,实现一个类似RUNDLL32.EXE的程序 ...

weixin_30449453的博客 129

Windows 中的三种常用 DLL 注入技术

Windows 中的三种常用 DLL 注入技术 一、DLL 注入技术的用途 二、DLL 注入基础 2.1 进程虚拟地址空间 2.2 读写其他进程的内存 2.3 LoadLibraryW 函数 三、APC 注入 四、远程线程注入 五、Windows 钩子 六、全局钩子注入 一、DLL 注入技术的用途 在 Windows 中,每个进程都有自己私有的虚拟地址空间。所以,一个进程没法访问另一个进程的内存。 但是,很多时候我们还是需要跨越进程的边界,来访问另一个进程的地址空

langshanglibie的专栏 8497

[教程]DLL注入的方法及通讯[2009-8-14]

这是当年加入“广海小组”时的作品,现在回味当时做了很多原创教程也挺有意思,摘录几个过来,留个纪念吧。 =========================================================================================== 准备了好长时间,终于决定写这篇文章(最近工作比较忙),可能类似的教程也很多,我只是把我的研究过程写出来,希望对

奚家佳的BLOG 2924
上一篇: 常见的安全应用识别技术有哪些?
下一篇: Windows RDP协议 Fuzzing 漏洞挖掘研究
IT老涵
博客等级 码龄5年 4555粉丝 414原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值