MSIL-PE-EXE感染策略.doc.doc

MSIL-PE-EXE感染策略.doc.doc

MSIL-PE-EXE 感染策略 翻译 by littlewisp 2010-02-06 不妥之处,敬请指出。 /lib/vbe00.html 在我的上一篇关于.NET平台的文章“Microsoft .NET Common Language Runtime Overview”中,我介绍了.NET 平台Beta2给我们提供的技术。演示了一个用C#写的针对.NET程序的感染者(叫做”Donut” by Averz)。发布Beta2不久之后微软发布了新的Visual Studio .NET版本。从发布Beta2那时起基本上没改变,该版本跟Beta2版本差别不大。但我有更多的时间,文挡和知识来探索该环境。 当我编写I-Worm.Serotonin的时候,我想比Donut更深入一步。Donut能以某些特殊的方式用自己的东西替换CLR头和元数据,但没有有效的方式来返回来执行宿主程序。我确信必定有方法来编写.NET程序真正的感染者。时间一天天过去,下一步在等待。不替换但通过添加新的病毒数据来感染元数据,来保证它们激活后返回宿主程序。这意味着分析元数据的结构并且找到一种新的方法来给当前代码来植入新的成员,不会在用户的屏幕上带来任何的bug和可疑的行为。 当我分析CLR文档的时候我发现该环境有非常丰富的接口来与CLR交互,并且非常透明,它可以在托管程序内部访问,也可以在外部访问(对于本地程序来说)。通过工具和帮助,程序不必直接访问元数据。他们只需要调用正确的环境函数。编译器,链接器,调试器不需要知道内部结构,一切由系统托管。 注意:包含COR.INC用来帮助应对CLR和元数据,可以在29A#7中找到。你可以在MSVS_NET_PATH\FrameworkSDK\Tool Developers guide\docs路径里找到详细的文挡。 我以前说过,CLR环境提供了一些COM接口,基础的接口(文中讨论的)如下: 用来打开元数据的: IMetaDataDispenser IMetaDataDispenserEx 用来修改元数据(和清单)的: IMetaDataEmit IMetaDataAssemblyEmit 用来分析元数据(和清单)的: IMetaDataImport IMetaDataAssemblyImport 我将以最简单的任务开始。让我们打开存储在磁盘上的原数据。首先我们要初始化COM,然后创建”Dispenser”对象,该对象会给我们提供需要的接口。代码如下: push 0 ;reserved, must be 0 call CoInitialize push offset ppv ;pointer to returned interface call @over_iid IID_IMetaDataDispenserEx ;required interface identifier @over_iid: push 1 ;CLSCTX_INPROC_SERVER push 0 ;not part of an agregate call @over_clsid CLSID_CorMetaDataDispenser ;object identifier @over_clsid: call CoCreateInstance 现在我们有了ImetaDataDispenserEx接口的指针,我们可以调用它的方法: DefineScope OpenScope OpenScopeOnMemory 最有趣的方法是是OpenScope,它允许优雅的访问磁盘上可执行文件。该方法返回一个接口。((IMetaDataEmit, IMetaDataImport, IMetaDataAssemblyEmit or IMetaDataAssemblyImport),通过接口我们可以访问元数据成员。 push offset pEmit ;pointer to returned interface call @over_iid2 IID_IMetaDataEmit ;requested interface identifier @over_iid2: push 0 ;open for read (1 for write) call @over_wsz ;filename in unicode dw c,:,\,p,r,o,g,.,e,x,e,0 @over_wsz: mov eax,[ppv] ;EAX = pointer to Dispenser object push eax ;this calling convention mov eax,[eax] call [e

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档