极安御信学习笔记——消息钩子注入

原理

钩子是WINDOWS中消息处理机制的一个要点,我们通过安装钩子,可以监视消息的传递,并能在消息到达目标窗口前提前进行处理

注意事项

1.目标进程需要存在消息循环机制
2.核心函数SetWindowsHookEx只能将32位DLL注入到32位进程,64位DLL注入到32位进程。不能将 32 位 DLL 注入到 64 位进程中,64 位 DLL 无法注入到 32 位进程中

步骤

1.首先就是创建需要的句柄:
一个钩子句柄

HHOOK g_Hook

一个用于注入的模块句柄

HMODULE hModule = LoadLibraryA(szPath);

还得给需要注入的目标程序拍个快照

HANDLE hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,dwProcessId);

2.初始化一些需要的变量和结构体:
获取注入函数的地址

DWORD dwFuncAddr = (DWORD)GetProcAddress(hModule, "rkdd");

初始化一个线程快照的结构体

THREADENTRY32 te32 = { sizeof(THREADENTRY32) };

3.然后开始检索快照
但凡找到一个进程ID和我们需要注入的进程的ID相同的快照,我们就通过SetWindowsHookEx函数进行挂钩

HHOOK SetWindowsHookExA(
  [in] int       idHook,		//挂钩过程的类型
  [in] HOOKPROC  lpfn,			//指向挂钩过程的指针
  [in] HINSTANCE hmod,			//需要注入的DLL的句柄
  [in] DWORD     dwThreadId		//与挂钩过程关联的线程标识符
);
#include <stdio.h>
#include <Windows.h>
#include <TlHelp32.h>

BOOL Inject(DWORD dwProcessId, LPCSTR szPath)
{
	HHOOK g_Hook;
	HMODULE hModule = LoadLibraryA(szPath);
	DWORD dwFuncAddr = (DWORD)GetProcAddress(hModule, "rkdd");
	HANDLE hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, dwProcessId);
	THREADENTRY32 te32 = { sizeof(THREADENTRY32) };
	while (Thread32Next(hThreadSnap, &te32))
	{
		if (te32.th32OwnerProcessID == dwProcessId)
		{
			g_Hook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC)dwFuncAddr, hModule, te32.th32ThreadID);
			break;
		}
	}
	return TRUE;
}

int main()
{
	Inject(14956, "C:\\Users\\Allure_Love\\Desktop\\Dll1.dll");
	system("pause");
	return 0;
}

本文为极安御信对应课程的学习笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值