托管注入深入研究
2008-12-11 13:36:11 来源:WEB开发网这是我发表在《黑客防线》2008年12期上的一篇文章,这里是网络上的首发。
附件是我写的一个工具“超级间谍(SuperSpy)”,主要包括一个窗口探测功能,甚至能够探测到VC自带的SPY++所不能探测到的窗口;当然,还包括这里提到的“托管注入”功能。
程序需运行在.Net2.0以上,如果需要使用注入功能,则需要.Net3.5以上。
超级间谍下载地址:http://download.csdn.net/source/850509
网上关于dll注入的文章实在太多,但基本上都是针对Win32 dll的,而很少涉及到托管dll。
首先让我们来看看Win32 dll是如何注入的,通常有两种方法:钩子和远程线程。而远程线程更灵活,所以本文主要讨论远程线程的方法,为了便于交流,先明确以下概念:
1. 主程序:用于将dll注入到其它进程的exe
2. dll:被注入其它进程的dll
3. 宿主:dll将被注入的其它程序
前两个程序都是我们自己写的,而第3个是原来就有的。
远程注入的基本步骤为:主程序通过CreateRemoteThread函数迫使宿主调用LoadLibrary函数加载dll,从而执行dll的入口函数DllMain,只要我们把代码放到DllMain里,就可以被调用了。
现在我们来看托管dll的注入:
用C#或VB.NET写的dll没有DllMain函数,我们自然想到了功能强大的C++。通常,我们把用C#或VB.NET写的dll,或者用C++写的,但编译为/clr:pure的dll称为托管dll
而把用C++编写的,但编译为/clr的dll称为混合dll。
混合dll也可以调用托管代码,所以也可以将其称为托管dll,本文所说的托管dll注入,实际上是混合dll的注入。
我们首先想到的是用常规方法来注入混合dll,结果会发现:只要在DllMain函数里调用了托管代码,程序就会崩溃。
- ››注入漏洞及参数化查询
- ››深入理解JAR包
- ››深入分析Volatile的实现原理
- ››深入理解Flash Player的应用程序域(Application ...
- ››深入理解flash函数(AS2)
- ››深入理解Android消息处理系统——Looper、Handler...
- ››深入理解SET NAMES和mysql(i)_set_charset的区别
- ››深入理解Mysql字符集设置
- ››深入浅出实战攻防恶意PDF文档
- ››深入剖析防火墙策略的执行过程:ISA2006系列之六
- ››深入JavaScript与.NET Framework中的日期时间(3)...
- ››深入JavaScript与.NET Framework中的日期时间(2)...
更多精彩
赞助商链接