码迷,mamicode.com
首页 > 其他好文 > 详细

[转载]Dll注入技术之消息钩子

时间:2015-02-02 21:22:30      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

转自:黑客反病毒

 

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注入技术之消息钩子

标签:

原文地址:http://www.cnblogs.com/Acg-Check/p/4268663.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!