10-挂钩注入(SetWindowsHookEx Injection)
一、前言
挂钩(Hooking) 机制是一种拦截和修改系统、应用程序或特定函数执行流程的技术,这一看好像跟中断机制有点类似,中断服务程序由操作系统负责,运行在内核态,而我们的钩子程序(也称钩子过程) 运行在用户模式。
挂钩(Hooking)机制 挺有趣的,Windows允许程序安装挂钩,以使用来监视各种系统事件,例如鼠标单击和键盘按键。具体机制的介绍我将在 hooking技术 这一小节详细讲解。
在挂钩注入中有两个重要的Windows API,它们分别是 SetWindowsHookEx 和 UnhookWindowsHookEx
SetWindowsHookEx:设置相应类型的钩子程序,当某类事件发生时会调用相应的相应类型的钩子程序。官方文档:SetWindowsHookExA 函数 (winuser.h) - Win32 apps | Microsoft Learn。钩子的类型如下:WH_KEYBOARD:键盘消息钩子WH_MOUSE:鼠标消息钩子WH_CBT:系统回调钩子WH_SHELL:Shell消息钩子WH_CALLWNDPROC:窗口消息钩子更多的钩子类型,请看官方文档
UnhookWindowsHook:删除SetWindowsHookEx函数安装在挂钩链中的挂钩过程。官方文档:UnhookWindowsHookEx 函数 (winuser.h) - Win32 apps | Microsoft Learn
二、流程
创建一个恶意 DLL,该DLL导出一个
EvilFunction函数,函数的主要作用是加载执行shellcode创建一个exe文件,该exe文件的主要作用
解析导出函数的地址,获得
钩子程序,其实也就是EvilFunction的地址使用
SetWindowsHookEx给键盘安装钩子(Hook),然后,返回值为挂钩过程的句柄。受害者运行notepad.exe,使用键盘打字
由于键盘事件是 hooked 的,打字后会触发我们的钩子,notepad.exe 会加载我们的恶意 dll 并调用导出的函数
三、代码实现
挂钩注入主要是 DLL 注入,所以我们需要生成一个携带着恶意shellcode的dll,这个恶意的dll需要导出一个导出函数 EvilFunction。
恶意DLL
exe文件的代码

Last updated