[转载]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导出函数有深刻的认识就可以很容编写,所以代码简单,比较容易实现。

时间: 2024-12-16 06:47:38

[转载]Dll注入技术之消息钩子的相关文章

[转载]Dll注入技术之劫持进程创建注入

转自:黑客反病毒 DLL注入技术之劫持进程创建注入 劫持进程创建注入原理是利用Windows系统中CreateProcess()这个API创建一个进程,并将第6个参数设为CREATE_SUSPENDED,进而创建一个挂起状态的进程,利用这个进程状态进行远程线程注入DLL,然后用ResumeThread()函数恢复进程.1.创建挂起的进程     下面是创建一个挂起的计算器程序进程的主要代码: STARTUPINFO si = {0}; si.cb = sizeof si; si.dwFlags

[转载]Dll注入技术之远程线程注入

转自:黑客反病毒 DLL注入技术之远线程注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EXE文件中的API),或以被注入EXE的身份去执行一些操作等等.     远线程注入原理是利用Windows 系统中CreateRemoteThread()这个API,其中第4个参数是准备运行的线程,我们可以将LoadLibrary()填入其中,这样就可以执行远程进程中的LoadLi

[转载]Dll注入技术之注册表注入

转自:黑客反病毒论坛 DLL注入技术之REG注入    DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EXE文件中的API),或以被注入EXE的身份去执行一些操作等等.     REG注入原理是利用在Windows 系统中,当REG以下键值中存在有DLL文件路径时,会跟随EXE文件的启动加载这个DLL文件路径中的DLL文件.当如果遇到有多个DLL文件时,需要用逗号或者空格隔开

[转载]Dll注入技术之ComRes注入

转自:黑客反病毒 DLL注入技术之ComRes注入     ComRes注入的原理是利用Windows 系统中C:\WINDOWS\system32目录下的ComRes.dll这个文件,当待注入EXE如果使用CoCreateInstance()这个API时,COM服务器会加载ComRes.dll到EXE中,我们利用这个加载过程,移花接木的把ComRes.dll替换掉,并在伪造的ComRes.dll,然后利用LoadLibrary()将事先准备好的DLL加载到目标的EXE中. 1.编写测试文件  

[转载]Dll注入技术之依赖可信进程注入

转自:黑客反病毒 DLL注入技术之依赖可信进程注入 依赖可信进程注入原理是利用Windows 系统中Services.exe这个权限较高的进程,首先将a.dll远线程注入到Services.exe中,再利用a.dll将b.dll远线程注入到待注入进程中.具体过程如下图所示: 这里提供一个小技巧,当注入到Services.exe里的DLL时,想在做完事情后悄无声息的将自己释放掉,在Windows 中有这样的一个API函数FreeLibraryAndExitThread(),它可以把自己卸载掉并且退

[转载]Dll注入技术之APC注入

转自:黑客反病毒 APC注入的原理是利用当线程被唤醒时APC中的注册函数会被执行的机制,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的,其具体流程如下:     1)当EXE里某个线程执行到SleepEx()或者WaitForSingleObjectEx()时,系统就会产生一个软中断.     2)当线程再次被唤醒时,此线程会首先执行APC队列中的被注册的函数.     3)利用QueueUserAPC()这个API可以在软中断时向线程的APC队列插入一个函数指针,如果我们插入的是L

<ReversingEngineering>关于windows32位系统下的dll注入技术经验汇

上个学期把自己闷在图书馆一直在看关于逆向工程技术方面的书,从入门到初级,现在也敢说自己一条腿已经迈进了这片知识的大门里,因为该博客刚开通先将一些经验记录下来,也是留给自己一方面做个参照. <逆向工程核心原理>((韩)李承远 )<Reversing:逆向工程揭密(电子工业出版社)><黑客反汇编揭密>((俄)卡巴斯基 ) dll注入技术是一门逆向工程中非常基础非常初步的技术,也是打开大门的钥匙,逆向破解的前提条件.API勾取 ,Rootkit进程隐藏都需要dll注入为先决条

Windows系统的dll注入

声明:这篇博客原为本人在CSDN上发布的,但是CSDN这个网站违背了本人的分享和开源精神,另外CSDN的广告满天飞.审核重重(所有的下载必须使用CSDN下载,而下载需要积分,这严重违背本人的无私分享精神.开源精神.),即使审核通过也会不定时进行重新审核,CSDN的这些操作严重影响了本人的博客管理.因此,本着无私分享精神.开源精神.轻松使用原则,本人摒弃了CSDN,并将博文重新编辑并发布在博客园网站上,而原博文作删除处理! 一.什么是dll注入 在Windows操作系统中,运行的每一个进程都生活在

windows消息钩子

1.消息钩子的概念: Windows应用程序是基于消息驱动的,不论什么线程仅仅要注冊窗体类都会有一个消息队列用于接收用户输入的消息和系统消息.为了拦截消息,Windows提出了钩子的概念.钩子(Hook)是Windows消息处理机制中的一个监视点,钩子提供一个回调函数.当在某个程序中安装钩子后,它将监视改程序的消息,在指定消息没有到达该窗体之前钩子先捕获这个消息,这样就会对消息进行过滤或者对window消息进行实时监控 消息分为局部钩子和全局钩子,局部钩子仅仅拦截指定进程中的指定消息,全局钩子拦