Chinaunix首页 | 论坛 | 博客
  • 博客访问: 407328
  • 博文数量: 57
  • 博客积分: 193
  • 博客等级: 入伍新兵
  • 技术积分: 1192
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-13 14:37
个人简介

当以艺术眼光看程序,寻找程序后面的原理,做到化而不忘

文章分类

全部博文(57)

文章存档

2017年(5)

2015年(7)

2014年(27)

2013年(18)

我的朋友

分类: Windows平台

2014-06-18 22:41:12

Windows下,DLL注入其实是个结果,不是个原因。没有直接哪个函数可以实现DLL注入,唯一相关的可能就是LoadLibrary了。常见的DLL注入的三个方式如下:

1:CreateRemoteThread()

2AppInit_DLLs注册表

3SetWindowsHookEx()

其中方法1和方法3,都有点歪打正着的感觉,建立远程线程是在其它进程中建立线程,要建立线程自然要线程入口函数,如果将线程入口函数设置成LoadLibrary,就呆以间接实现DLL注入了。设置钩子更甚,你设置钩子函数以后,如果是对其它远程线程下钩子,那么系统会自动替你加载DLL。你都不用自己动力,这个福利太好了。

方法2则是你设置好DLL的路径,只要进程加载了User32.dll,那么这个DLL就会调用LoadLibrary函数将AppInit_DLLs键值下的DLL都加载进来。

对比以上三个方法,感觉微软本身就没有想到过提供DLL注入的功能,所谓的DLL注入其实都是我们想干坏事而自己发明的新用法。

其实这也是没办法,Windows虽然进程空间是隔离的,但是也允许跨进程操作,那样的话,那代码如何写到另外的进程里的?DLL注入算是一个比较简单的方式,你也可以使用Read/WriteProcessMemory实现,但是个太原始了,且关系到重定位的问题。

再来说说SetWindowsHookEx这个函数,它是的本质是钩住Windows的消息。我们都知道,Windows是个事件系统,由消息来驱动,做什么事都要发送消息实现,就连最简单的SetWindowText也只是WM_SETTEXT消息的一个快捷方式而已。那么钩住了消息,就可以为所欲为了。出发点是好的,但是经是好书,就是让和尚念歪了。用这个函数可以做不少坏事。

阅读(1948) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~