欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

使用Windbg分析.NET恶意软件

来源:本站整理 作者:佚名 时间:2017-07-26 TAG: 我要投稿

.NET渐渐成为微软生态系统的重要组成部分,为不同的语言和硬件平台提供交互操作的共享框架。很多微软的工具(如PowerShell)和其他的管理函数都会依赖.NET平台。很明显,这使得.NET也成为恶意软件开发者的宠儿。因此,恶意软件研究人员必须熟悉这门语言并且能有必要的技能来分析这个平台的恶意软件。
分析工具(如ILSpy)帮助研究员反编译代码,但是不能用于自动分析多个样本。本文我们将介绍如何使用Windbg和微软提供的SOS扩展来分析.NET应用程序。
本文描述:
在.NET API中插入一个断点来分析PowerShell脚本
创建简单的脚本完成.NET样本自动化脱壳
另外,你能从我们的github上下载一个Python脚本(基于Windbg pykd扩展),来自动分析.NET。这个脚本也在本文中有描述。
0x01 SOS扩展
SOS扩展为Windbg提供.NET支持。扩展提供了丰富的命令;本文我们将只介绍一些帮助分析的命令。
首先,SOS扩展不只一个库,且依赖于.NET的版本。在我们使用SOS扩展之前我们必须将库加载到Windbg中。
对于.NET 4,扩展位于CLR.dll,并且可以使用下面的命令加载:
 

在.NET 2和3中,SOS扩展位于mscorwks库:
 

下面是本文使用的命令:
!bpmd:这个命令用于在托管代码(.NET)中设置断点。命令有两个参数。第1个参数是函数所在的.NET dll,第2个是函数名
!CLRStack:显示CLR栈内容。对于确定.NET的参数很有用
!DumpObj:显示指定对象的信息
本文中,这3个命令用于针对一个指定的.NET API创建一个断点,以得到传入API的参数,并且显示内容。
0x02 用例#1:PowerShell分析
很少有人知道PowerShell能使用.NET框架。通过检查.NET API的用法,我们能自动化分析PowerShell。
例1:Start-Process API
这个例子中,我们将分析下面的PowerShell代码:
 

当你执行这个任务时,PowerShell使用Process.Start() API。因此,我们能设置断点,能暂停代码执行(在加载SOS扩展之后):
 

一旦设置断点后,我们输入g命令来执行PowerShell脚本。Windbg将断在Start-Process处:
 

CLRStack命令显示了提供给Process.Start API的参数。在我们的例子中,参数是一个System.Diagnostics.ProcessStartInfo对象。
 

最后,DumpObj命令显示这个对象的内容:
 

ProcessStartInfo对象的第一个字段是一个System.String对象(名为filename)。我们能使用DumpObj得到对象的内容:
 

我们能看那个filename字符串是notepad二进制文件的路径。
例2:DownloadFile API
在第二个例子中,我们将分析下面的代码:
 

这个代码的目的是下载一个文件,并存储在硬盘上。这是恶意软件下载payload常用的技术。
我们在DownloadFile API处设置一个断点,并输入g执行PowerShell:
 

当API执行时,WIndbg自动断下执行:
 

我们还是使用CLRStack和DumpObj命令。根据微软内存布局的标准,我们能直接从寄存器中得到值(第一个字符串位于RDX+0xC,第二个位于R8+0xC):
 

下面是执行的片段:
 

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载