WEB开发网
开发学院网络安全安全技术 托管注入深入研究 阅读

托管注入深入研究

 2008-12-11 13:36:11 来源:WEB开发网   
核心提示:这是我发表在《黑客防线》2008年12期上的一篇文章,这里是网络上的首发,托管注入深入研究, 附件是我写的一个工具“超级间谍(SuperSpy)”,主要包括一个窗口探测功能, 我们首先想到的是用常规方法来注入混合dll,结果会发现:只要在DllMain函数里调用了托管代码,甚至能够探测到VC自带

这是我发表在《黑客防线》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函数里调用了托管代码,程序就会崩溃。

1 2 3 4 5  下一页

Tags:托管 注入 深入

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接