首页 > 代码库 > [转载]Dll注入技术之消息钩子
[转载]Dll注入技术之消息钩子
转自:黑客反病毒
DLL注入技术之消息钩子注入
消息钩子注入原理是利用Windows 系统中SetWindowsHookEx()这个API,他可以拦截目标进程的消息到指定的DLL中导出的函数,利用这个特性,我们可以将DLL注入到指定进程中。主要流程如下图所示
1.准备阶段 需要编写一个DLL,并且显式导出MyMessageProc()函数,主要代码如下:
LRESULT WINAPI MyMessageProc(int code,WPARAM wParam,LPARAM lParam){ return CallNextHookEx(NULL, code, wParam, lParam);}
显示导出某个函数需要在.def文件中的EXPORTS填写MyMessageProc(),如下图所示:
2.HOOK阶段 使用SetWindowsHookEx()之前首先需要将HOOK的DLL 加载到本身的进程中,以此得到DLL的模块句柄,再使用GetProcAddress()得到DLL中显示导出的函数MyMessageProc()的函数地址,最后遍历出待注入进程的线程ID,这样SetWindowsHookEx()就可以利用这些参数进行HOOK了。主要代码如下图所示:
//加载DLL到本身进程 hMod = LoadLibrary(pDllName); if(!hMod) return FALSE; //得到显示函数的地址 lpFunc = (DWORD)GetProcAddress(hMod, "MyMessageProc"); if(!lpFunc) { if(hMod) FreeLibrary(hMod); return FALSE; } //得到待注入EXE的进程ID dwProcessId = GetProcessId(pExeName); if(!dwProcessId) { if(hMod) FreeLibrary(hMod); return FALSE; } //得到待注入EXE的线程ID dwThreadId = GetThreadId(dwProcessId); if(!dwThreadId) { if(hMod) FreeLibrary(hMod); return FALSE; } //利用HOOK进行注入 hhook = SetWindowsHookEx( WH_GETMESSAGE,//WH_KEYBOARD,//WH_CALLWNDPROC, (HOOKPROC)lpFunc, hMod, dwThreadId);
3.释放阶段 利用LoadLibrary()得到的模块句柄把本身进程的DLL释放掉,代码如下所示:
if(hMod) FreeLibrary(hMod);
消息钩子注入只需要对SetWindowsHookEx()和DLL导出函数有深刻的认识就可以很容编写,所以代码简单,比较容易实现。
[转载]Dll注入技术之消息钩子
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。