0

0

常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战.

看不見的法師

看不見的法師

发布时间:2025-07-19 08:18:22

|

805人浏览过

|

来源于php中文网

原创

常见注入技术第四讲:setwindowshookex全局钩子注入,以及在32位qq上的实战操作。

PS: 以上是操作部分,接下来是原理介绍。

一丶需要了解的API 使用全局钩子注入,我们需要了解几个Windows API。这些API并不复杂。

1. 设置钩子API

HHOOK WINAPI SetWindowsHookEx(
    _In_  int    idHook,设置钩子类型,表示要设置的钩子类型,可以是监视窗口过程或消息队列。
    _In_ HOOKPROC lpfn,根据钩子类型设置不同的回调函数。
    _In_ HINSTANCE hMod,钩子的DLL实例句柄,即DLL的句柄。
    _In_ DWORD dwThreadId 设置钩子的线程ID。如果为0,则设置为全局钩子。);
HHOOK 返回值,为一个钩子过程句柄。

2.获取模块句柄API

HMODULE WINAPI GetModuleHandle(
    _In_opt_ LPCTSTR lpModuleName 获取的实例句柄的文件名,可以是DLL或exe。如果为NULL,则获取当前dll/exe的实例句柄);
返回值 返回实例句柄。

3.取消设置钩子API

BOOL WINAPI UnhookWindowsHookEx(
    _In_ HHOOK hhk 参数一是 SetWindowHookEx的返回值,即钩子过程句柄。);
返回值: 返回值是BOOL类型,表示设置是否成功或失败。

4.继续调用钩子链中的钩子过程。

LRESULT WINAPI CallNextHookEx(
    _In_opt_ HHOOK hhk,保存的钩子过程,即SetWindowsHookEx返回值。
    _In_      int     nCode,根据SetWindowsHookEx设置的钩子回调产生的不同nCode代码。意思是如果设置的钩子类型是鼠标消息,那么nCode就是鼠标消息;如果是键盘消息,则是键盘消息。
    _In_ WPARAM wParam,附加参数,根据钩子回调类型有不同的意义。例如,如果是鼠标消息,可能代表鼠标的x位置;如果是键盘消息,则可能是键代码。
    _In_ LPARAM lParam 附加参数。);

5.钩子回调

钩子回调根据SetWindowsHookEx的第一个参数设定。例如,如果我们设置WH_CBT,那么我们设置的回调函数就是CBT回调。具体细节请查询MSDN。

常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战.

LRESULT CALLBACK CBTProc(
    _In_  int     nCode,
    _In_ WPARAM wParam,
    _In_ LPARAM lParam);

二丶全局钩子注入步骤 从上面的几个API来看,注入过程并不复杂。以下是注入的具体步骤:

1.调用SetWindowsHookEx设置钩子。

2.在设置过程中,需要一个回调,所以我们填入一个回调。

3.回调函数中调用CallNextHookEx函数。如果不调用,那么相当于我们设置了钩子但不反悔,程序可能会出现问题。当然,是按需返回的。

4.取消钩子设置。

步骤就四步。那么我们开始:

1.建立DLL工程。可以使用VC++6.0或VS系列。这里不再赘述,建立DLL工程很简单,如果不会,可以在网络上搜索。

2.工程中添加一个HOOK.h的头文件,以及一个HOOK.cpp的实现文件。

3.编写代码。

HOOK.h中的代码:

#pragma once
#define MYWINDAPIEXPORT __declspec(dllexport)
HHOOK g_HookProc;  //定义为全局HOOK,返回的钩子过程
void MYWINDAPIEXPORT SetHook(); //设置HOOK钩子。我们的启动函数,导出函数,外部设置HOOK
void MYWINDAPIEXPORT UnHook(); //取消设置HOOK
LRESULT CALLBACK MyProc(int nCode, WPARAM wParam, LPARAM lParam); //设置HOOK过程中需要的回调函数

HOOK.cpp的代码:

#include 
#include "HOOK.H"
void MYWINDAPIEXPORT SetHook()
{
    g_HookProc = ::SetWindowsHookEx(WH_CBT, MyProc, GetModuleHandle(TEXT("Win32Project1.dll")), 0); //参数1.HOOK的类型。Hook的回调地址,模块句柄,线程ID,为0代表是全局钩子
}
void MYWINDAPIEXPORT UnHook() //取消设置HOOK
{
    if (NULL != g_HookProc)
        ::UnhookWindowsHookEx(g_HookProc);
}
LRESULT CALLBACK MyProc(int nCode, WPARAM wParam, LPARAM lParam) //我们自己的程序处理
{
    /* 执行我们的程序 */
    ::MessageBox(NULL, NULL, NULL, NULL);
    return CallNextHookEx(g_HookProc, nCode, wParam, lParam); //继续调用钩子过程
}

上面的.h + cpp就是我们的代码。那么我们还需要一个外部程序来调用我们的导出函数SetHOOK()以及UnHOOK。

因为SetHook和UnHOOK导出函数是在DLL中使用的,所以我们想要使用这两个函数有两种方法:

1.静态调用:在生成DLL时会生成对应的lib。我们需要在我们的程序中添加.h头文件,使用宏指令包含.lib文件。

2.动态调用:动态调用涉及到两个API,一个是LoadLibrary(),另一个是GetProcAddress()。第一个是获取DLL的实例句柄,第二个是根据实例句柄以及函数名来获取函数的地址,也称为函数指针。

这里采用第一种方法。如果采用第二种方法,也可以,但我们的代码需要加上extern "C"来导出,否则名称会发生变化,导致使用GetProcAddress填写函数名时无法获取函数指针。

新建MFC工程:

1.添加HOOK.h头文件。

2.使用宏命令包含我们的DLL的lib #pragma comment(lib,"xxxx.lib")

磁力开创
磁力开创

快手推出的一站式AI视频生产平台

下载

3.在Hook按钮点击位置调用导出函数SetHOOK。

4.在UnHOOK按钮点击位置,调用导出函数UnHOOK。

1.界面:

常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战.

2.我们原有的HOOK.H文件。

常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战.

3.静态使用的lib库。

常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战.

4.按钮点击里面的函数调用。

常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战.

5.使用工具查看是否注入了DLL,推荐使用Pchunter工具。

常见注入手法第四讲,SetWindowsHookEx全局钩子注入.以及注入QQ32位实战.

可以看到已经注入了。

PS: 因为我们写的是32位DLL,所以注入的程序都是32位的。如果是64位DLL,那么注入到程序应该为64位。详情请查询MSDN SetWindowsHookEx。

三丶原理讲解 上面讲了这么多操作,原理应该不是太懂。

其实SetWindowsHookEx就是在应用程序执行过程中替我们加了一层。而我们提供回调地址,那么当操作来了就会通知我们回调。这个时候我们回调函数就可以做我们的事情了。

比如:

A函数 -> B函数 -> C函数。正常执行流程是A函数调用B,B调用C。

而我们添加了一层:

A -> 我们(利用CallNextHookEx决定是否调用下一个过程) -> B -> C

A -> 我们(不是的情况下) 不调用B。

DLL怎么注入的疑问?

上图我们写了这么多,并没有针对QQ或者其他32位程序注入DLL。为什么会注入了DLL。

原理:

原理就是我们的窗口程序,直接使用DLL里面的SetWindowsHookEx设置了一个回调。而这个API是给全局所有应用程序都设置了这个回调,那么如果有32位程序会触发回调,那么我们的DLL就会注入到里面去了。

相关文章

QQ
QQ

QQ是腾讯在中国开发的一款社交应用,用户可用QQ在手机和电脑上聊天。QQ截止目前拥有超过8.2亿用户,是中国最多人使用的社交应用程序之一,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

760

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1128

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

799

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

454

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2354

2023.08.08

windows自动更新
windows自动更新

Windows操作系统的自动更新功能可以确保系统及时获取最新的补丁和安全更新,以提高系统的稳定性和安全性。然而,有时候我们可能希望暂时或永久地关闭Windows的自动更新功能。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

823

2023.08.10

windows boot manager
windows boot manager

windows boot manager无法开机的解决方法:1、系统文件损坏,使用Windows安装光盘或USB启动盘进入恢复环境,选择修复计算机,然后选择自动修复;2、引导顺序错误,进入恢复环境,选择命令提示符,输入命令"bootrec /fixboot"和"bootrec /fixmbr",然后重新启动计算机;3、硬件问题,使用硬盘检测工具进行扫描和修复;4、重装操作系统。本专题还提供其他解决

1626

2023.08.28

windows锁屏快捷键
windows锁屏快捷键

windows锁屏快捷键是Windows键+L、Ctrl+Alt+Del、Windows键+D、Windows键+P和Windows键+R。本专题为大家提供windows相关的文章、下载、课程内容,供大家免费下载体验。

1640

2023.08.30

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

10

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.9万人学习

Excel 教程
Excel 教程

共162课时 | 13.8万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号