DLL注入之使用SetWindowsHookEx注入「建议收藏」

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

大家好,又见面了,我是你们的朋友全栈君。

原理分析:

本次介绍的是使用全局钩子的方式进行注入。在Windows中可以使用SetWindowsHookEx来设置消息钩子,这个函数除了可以设置当前进程的钩子之外,它还可以设置全局钩子。全局钩子,顾名思义,即当前正在运行的进程都会被设置相应的钩子。

//dwThreadId 设置为0,则是全局钩子。
HHOOK SetWindowsHookExA(
  int       idHook,
  HOOKPROC  lpfn,
  HINSTANCE hmod,
  DWORD     dwThreadId
);

将此函数的参数dwThreadId设为0,即是注册全局钩子函数,当注册全局钩子时,钩子回调函数需要位于注入DLL中,还需要传入DLL模块句柄。

操作步骤:

  1. 准备注入DLL,DLL中需要有三个导出函数,setHook,unSetHook,钩子回调函数
  2. 加载此DLL到注入程序中,调用相应的DLL导出函数

核心源代码:

//以下是注入DLL中的代码

HHOOK hook;

//钩子回调函数
LRESULT CALLBACK ShellProc(int nCode, WPARAM wParam,LPARAM lParam)
{
	return CallNextHookEx(hook,nCode,wParam,lParam);
}

//设置全局钩子
extern "C" _declspec (dllexport) bool SetHook(HMODULE module)
{
	hook=SetWindowsHookEx(WH_CBT,ShellProc,module,0);
	if(NULL==hook)
	{
	::MessageBox(NULL,L"SetWindowsHookEx!",L"Error!",MB_ICONERROR);
	return false;
	}
	::MessageBox(NULL,L"注册表实时监控开启成功!",L"通知",MB_OK);
	return true;
}

//卸载钩子(同时也是卸载DLL)
extern "C" _declspec (dllexport) bool UnSetHook()
{
	bool ret=false;
	if(hook)
	{
	ret=UnhookWindowsHookEx(hook);
	if(!ret)
	{
	::MessageBox(NULL,L"UnhookWindowsHookEx!",L"Error!",MB_ICONERROR);
	return false;
	}
	return true;
	}
	return false;
}

注入程序代码就是加载此DLL,然后调用注入DLL的这几个导出函数即可。

需要注意以下几点:

  1. 32位的DLL只能注入32位的进程
  2. 不同钩子的消息类型需要触发相应的条件才能将DLL注入
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145566.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月13日 下午1:00
下一篇 2022年5月13日 下午1:20


相关推荐

  • 稳压二极管的使用

    稳压二极管的使用1N4727DataSh 稳压二极管的主要参数 1 2 nbsp nbsp nbsp nbsp 1 Vz nbsp 稳定电压 nbsp nbsp nbsp nbsp 指稳压管通过额定电流时两端产生的稳定电压值 该值随工作电流和温度的不同而略有改变 由于制造工艺的差别 同一型号稳压管的稳压值也不完全一致 从上面的 datasheet 可以知道 1N4727 的 Vz 3V 1n4728 的 Vz 3 3V nbsp nbsp nbsp nbsp 2 IzT

    2026年3月18日
    1
  • 30分钟看懂经济运行原理_看懂了自然哲学原理

    30分钟看懂经济运行原理_看懂了自然哲学原理这部分内容主要解释一些概念和术语,最好是先理解这部分内容。公钥密码体制分为三个部分,公钥、私钥、加密解密算法,它的加密解密过程如下:加密:通过加密算法和公钥对内容(或者说明文)进行加密,得到密文。

    2022年8月4日
    11
  • linux时间戳转换日期格式_java时间戳转换成年月日时分秒

    linux时间戳转换日期格式_java时间戳转换成年月日时分秒unix时间戳 date +%s linux: 将时间戳1123495443 换算成可以识别的年月日分秒 date -d ‘1970-01-01 UTC 1123495443 seconds’ FreeBSD: date -j -f “%Y%m%d ” `date +%Y%m%d` “+ %s” #date指令 源日期格式  要转换出的格式管理员在

    2022年10月3日
    5
  • 当在Windows上安装SQL Server,点击setup,出现以下错误0 x84b10001[通俗易懂]

    当在Windows上安装SQL Server,点击setup,出现以下错误0 x84b10001[通俗易懂]当在Windows上安装SQLServer,点击setup,出现以下错误0x84b10001这个错误是系统文件损坏的原因造成的;解决办法:方法1.在命令提示符(管理员)中输入命令sfc/scannow,确认等待完成;之后在进行安装就可以了;2.去C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config配…

    2025年10月22日
    4
  • 一分钟免费部署云端OpenClaw小龙虾机器人

    一分钟免费部署云端OpenClaw小龙虾机器人

    2026年3月13日
    2
  • Matlab代码之plot函数的坐标点显示

    Matlab代码之plot函数的坐标点显示plot函数的xlabel、ylabel、title、text、legend1、在图像某个位置显示文字信息,2、用text()显示plot函数的坐标点;3、用legend()在一张图同时显示不同曲线;4、用xlabel()、ylabel()、title()显示横纵坐标和标题;5、用subplot在一张画布上画多个图像;新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个

    2022年10月15日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号