-
-
[讨论][讨论]注入技术——消息钩子注入
-
发表于: 2020-9-22 15:50 3142
-
最近在学习几种注入技术,消息钩子注入可把我难到了,希望大佬能够指点一下。
首先本人(新手小白)对于消息钩子注入的理解:消息钩子函数(SetWindowsHookEx)是微软提供的实现消息拦截的API,当然它还可以用做DLL注入。下面是实现Dll注入的核心代码:
//利用Windows API SetWindowsHookEx 实现注入DLL BOOL SetWinHKInject(char * pszDllPatn, char * pszProcess) { //加载待注入的Dll到本进程空间 hMod = LoadLibrary(pszDllPath); if(!hMod) { OutputDebugString("[+] LoadLibrary error !\n"); goto Exit; } // 获取待注入的Dll中常导出的消息钩子过程函数的地址 lpFunc = (DWROD)GetProcAddress(hMod, "MyMessageProc"); if (!lpFunc) { OutputDebugString("[+] GetProcAddress error!\n"); goto Exit; } //获取待注入进程的线程ID dwThreadId = GetTargetThreadIdFromProcname(pszProcess); if (!dwThreadId) goto Exit; //调用SetWindowsHookEx实现消息钩子注入 g_hHook = SetWindowsHookEx( WH_GETMESSAGE, //WH_KEYBOARD, //WH_CALLWNDPROC. (HOOKPROC)lpFunc, hMod, dwThreadId ); Exit: if (hMod) FreeLibrary(hMod); return bSuccess; } // DLL.CPP BOOL _stdcall DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { if( ul_reason_for_call == DLL_PROCESS_ATTACH ) { // //加入你想在目标进程空间HOOK的代码 // MessageBox(NULL, "SetWindowsHookEx inject success", "dll inject", MB_OK); } return TRUE; } __declspec(dllexport)LRESULT MyMessageProc(int code, WPARAM wParam, LPARAM lParam) { // //你自己对消息的处理 // return CallNextHookEx(g_hhook, code, wParam, lParam); }
针对上述注入代码我有以下几个问题:
为何需要加载待注入的Dll到本进程空间?
消息钩子的过程函数中的CallNextHookEx()原理是什么?(一些资料中解释它用作向下传递消息,如何向下传递?传递给谁?)
开发人员在消息钩子过程函数中具体消息能进行哪些处理?(能否用代码体现?)
//加入你想在目标进程中Hook的代码 是什么意思?(用代码体现),它 与 //你自己对消息的处理 有和区别?
注:本人菜鸟一枚,希望论坛大佬能够不吝赐教,带带小弟。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
看原图
赞赏
雪币:
留言: