转自:黑客反病毒

DLL注入技术之消息钩子注入

消息钩子注入原理是利用Windows 系统中SetWindowsHookEx()这个API,他可以拦截目标进程的消息到指定的DLL中导出的函数,利用这个特性,我们可以将DLL注入到指定进程中。主要流程如下图所示

1.准备阶段
    需要编写一个DLL,并且显式导出MyMessageProc()函数,主要代码如下:

  1. LRESULT WINAPI MyMessageProc(int code,WPARAM wParam,LPARAM lParam)
  2. {
  3. return CallNextHookEx(NULL, code, wParam, lParam);
  4. }

显示导出某个函数需要在.def文件中的EXPORTS填写MyMessageProc(),如下图所示:

2.HOOK阶段       
    使用SetWindowsHookEx()之前首先需要将HOOK的DLL 加载到本身的进程中,以此得到DLL的模块句柄,再使用GetProcAddress()得到DLL中显示导出的函数MyMessageProc()的函数地址,最后遍历出待注入进程的线程ID,这样SetWindowsHookEx()就可以利用这些参数进行HOOK了。主要代码如下图所示:

  1. //加载DLL到本身进程
  2. hMod = LoadLibrary(pDllName);
  3. if(!hMod) return FALSE;
  4. //得到显示函数的地址
  5. lpFunc = (DWORD)GetProcAddress(hMod, "MyMessageProc");
  6. if(!lpFunc)
  7. {
  8. if(hMod) FreeLibrary(hMod);
  9. return FALSE;
  10. }
  11. //得到待注入EXE的进程ID
  12. dwProcessId = GetProcessId(pExeName);
  13. if(!dwProcessId)
  14. {
  15. if(hMod) FreeLibrary(hMod);
  16. return FALSE;
  17. }
  18. //得到待注入EXE的线程ID
  19. dwThreadId = GetThreadId(dwProcessId);
  20. if(!dwThreadId)
  21. {
  22. if(hMod) FreeLibrary(hMod);
  23. return FALSE;
  24. }
  25. //利用HOOK进行注入
  26. hhook = SetWindowsHookEx(
  27. WH_GETMESSAGE,//WH_KEYBOARD,//WH_CALLWNDPROC,
  28. (HOOKPROC)lpFunc,
  29. hMod,
  30. dwThreadId);

3.释放阶段
    利用LoadLibrary()得到的模块句柄把本身进程的DLL释放掉,代码如下所示:

  1. if(hMod) FreeLibrary(hMod);

消息钩子注入只需要对SetWindowsHookEx()和DLL导出函数有深刻的认识就可以很容编写,所以代码简单,比较容易实现。

http://blog.csdn.net/programmingring/article/details/18954469

Dll注入技术之消息钩子的更多相关文章

  1. Dll注入:Windows消息钩子注入

    SetWindowsHook() 是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的.当消息到达后,在目标窗口处理函数之 ...

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

    上个学期把自己闷在图书馆一直在看关于逆向工程技术方面的书,从入门到初级,现在也敢说自己一条腿已经迈进了这片知识的大门里,因为该博客刚开通先将一些经验记录下来,也是留给自己一方面做个参照. <逆向 ...

  3. DLL注入之windows消息钩取

    DLL注入之windows消息钩取 0x00 通过Windows消息的钩取 通过Windows消息钩取可以使用SetWindowsHookEx.该函数的原型如下: SetWindowsHookEx( ...

  4. Dll注入技术之注册表注入

    DLL注入技术之REG注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EX ...

  5. Dll注入技术之ComRes注入

    DLL注入技术之ComRes注入 ComRes注入的原理是利用Windows 系统中C:\WINDOWS\system32目录下的ComRes.dll这个文件,当待注入EXE如果使用CoCreateI ...

  6. Dll注入技术之远程线程注入

    DLL注入技术之远线程注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EX ...

  7. DLL注入技术之依赖可信进程注入

    DLL注入技术之依赖可信进程注入 依赖可信进程注入原理是利用Windows 系统中Services.exe这个权限较高的进程,首先将a.dll远线程注入到Services.exe中,再利用a.dll将 ...

  8. Dll注入技术之输入法注入

    DLL注入技术之输入法注入 输入法注入原理是利用Windows系统中在切换输入法需要输入字符时,系统就会把这个输入法需要的ime文件装载到当前进程中,而由于这个Ime文件本质上只是个存放在C:\WIN ...

  9. 系统安全攻防战:DLL注入技术详解

    DLL注入是一种允许攻击者在另一个进程的地址空间的上下文中运行任意代码的技术.攻击者使用DLL注入的过程中如果被赋予过多的运行特权,那么攻击者就很有可能会在DLL文件中嵌入自己的恶意攻击代码以获取更高 ...

随机推荐

  1. Spring Boot集成EHCache实现缓存机制

    SpringBoot 缓存(EhCache 2.x 篇) SpringBoot 缓存 在 Spring Boot中,通过@EnableCaching注解自动化配置合适的缓存管理器(CacheManag ...

  2. php实现 查找输入整数二进制中1的个数

    php实现 查找输入整数二进制中1的个数 一.总结 一句话总结: 1.if($j&intval($num)){}的作用是什么? 1 <?php 2 while($num=trim(fge ...

  3. RTC时钟和BKP的配置stm32

    摘自:https://blog.csdn.net/gtkknd/article/details/52233605 RTC和后备寄存器通过一个开关供电,在VDD有效的时候选择VDD供电,否则选择VBAT ...

  4. (转)ipv4的网段表示方法

    简单一点举例说明:ip段:10.0.0.1-10.0.0.255            的表示方法:10.0.0.0/24ip段:10.0.0.1-10.0.255.255        的表示方法: ...

  5. [AngularFire 2] Push, remove, update

    import { Injectable } from '@angular/core'; import {RealtimeService} from "../shared"; imp ...

  6. [AngularFire 2] Joins in Firebase

    Lets see how to query Firebase. First thing, when we do query, 'index' will always help, for both SQ ...

  7. MySQL启动关闭添加到 /etc/init.d/mysqld

      cp /data/mysql/support-files/mysql.server /etc/init.d/mysqld       然后就可以使用此命令启动/关闭 mysql: /etc/ini ...

  8. ping localhost 没反应解决方式

    今天在搭建导师公司的spark的集群的时候须要有一台机器须要ssh 到自己.可是运行以下两条命令后发现没有反应 ping localhost ping 127.0.0.1 之后问了下别人,发现是/et ...

  9. windows2003 IIS6下安装ISAPI_Rewrite3破解版

    摘抄的https://jingyan.baidu.com/article/ff42efa931a2c0c19e220298.html 非常感谢,我是怕百度经验有一天消失了,以防万一 iis6 ISAP ...

  10. [Recompose] Flatten a Prop using Recompose

    Learn how to use the ‘flattenProp’ higher order component to take a single object prop and spread ea ...