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

极安御信学习笔记——消息钩子注入原理 钩子是 WINDOWS 中消息处理机制的一个要点 我们通过安装钩子 可以监视消息的传递 并能在消息到达目标窗口前提前进行处理 注意事项 1 目标进程需要存在消息循环机制 2 核心函数 SetWindowsHo 只能将 32 位 DLL 注入到 32 位进程 64 位 DLL 注入到 32 位进程 不能将 32 位 DLL 注入到 64

大家好,我是讯享网,很高兴认识大家。

原理

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

注意事项

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

步骤

HHOOK g_Hook 

讯享网

一个用于注入的模块句柄

讯享网HMODULE hModule = LoadLibraryA(szPath); 

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


讯享网

HANDLE hThreadSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,dwProcessId); 
讯享网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; } 

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

小讯
上一篇 2025-03-31 13:36
下一篇 2025-04-09 15:04

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/68818.html