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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 什么叫侧面指纹识别_屏下指纹和侧面指纹触控有什么区别

    什么叫侧面指纹识别_屏下指纹和侧面指纹触控有什么区别指纹识别作为一种生物识别方案,在手机上的应用为用户日常使用带来了极大的便利,从解锁手机到应用加密再到支付等场景,原本需要输密码的繁琐场景如今按一下手指就行。随着手机的发展,指纹解锁也出现了不同的解决方案,比如OPPOK3所采用的目前主流的屏下指纹解锁,以及荣耀9X所采用侧面指纹解锁。那么在实际应用场景中,哪种指纹识别更实用呢?采用了屏幕指纹的OPPOK3与侧面指纹的荣耀9X都有着真全面屏的设计…

    2022年6月30日
    29
  • java:闰年判断程序[通俗易懂]

    java:闰年判断程序[通俗易懂]公历闰年的简单计算方法(符合以下条件之一的年份即为闰年)1、能被4整除而不能被100整除。2、能被400整除。方案:使用数学运算符取余运算(%),关系运算符等于(==)和不等于(!=),辑运算符逻辑与(&&)和逻辑或(||),来判断某年是否为闰年,判断的结果为boolean类型的值,如果为闰年boolean类型的值为true,否则为falsebooleanflag=(year%4==0&&year%100!=0)||year%400==0

    2022年7月17日
    14
  • python+pycharm安装_pycharm安装教程2020

    python+pycharm安装_pycharm安装教程2020python与pycharm的下载与安装前言一、python的下载安装1.python的下载2.python的安装二、Pycharm的下载安装1.Pycharm的下载2.Pycharm的安装三、python与pycharm的安装包总结前言本文将会介绍python的下载,安装,pycharm的下载,安装,激活,以及一些注意事项一、python的下载安装1.python的下载https://www.python.org/这里直接给出python的官方网站(注:有些同学可能打不开网站,..

    2022年8月27日
    9
  • oracle协议适配器错误tns,ORA-12560: TNS: 协议适配器错误 常见原因

    oracle协议适配器错误tns,ORA-12560: TNS: 协议适配器错误 常见原因或者报以下错误(Listenerrefusedtheconnectionwiththefollowingerror:ORA-12514,TNS:listenerdoesnotcurrentlyknowofservicerequestedinconnectdescriptorTheConnectiondescriptorusedbythecli…

    2022年6月18日
    40
  • STM32–RFID无线射频技术(RC522刷卡模块)

    STM32–RFID无线射频技术(RC522刷卡模块)STM32+RC522刷卡模块,亲测可用!!!

    2022年7月26日
    20
  • BLSP_用冰块和棉签玩哭凹凸世界

    BLSP_用冰块和棉签玩哭凹凸世界1.基础概念(1)   BusAccessModule(BAM),总线访问模块BAMisusedtomovedatato/fromtheperipheralbuffers.(2)   BAMLow-SpeedPeripheral(BLSP),低速接口的总线访问模块(3)   QUP:QualcommUniversalPeripheral,高通统一的…

    2022年10月19日
    3

发表回复

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

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