首页
社区
课程
招聘
[原创]WannaMiner2.0之调试svchost拉起的dll服务方法
发表于: 2018-7-14 14:53 10807

[原创]WannaMiner2.0之调试svchost拉起的dll服务方法

2018-7-14 14:53
10807

之前写了一篇文章是关于如何在windows下分析服务。在进入正文之前还要再对这方面进行一些补充。之前有人提出来直接在被调试的服务设置INT3断点可不可以。基于我对INT3的理解,INT3断点属于一种软件层断点,是通过hook的原理实现的,所以就是不开启OD就没有hook,除非是自己打补丁强加的hook,但那种方法比我接下来说的方法都要麻烦。

调试服务的方法不止一种。第二种方法概括来说是强行设置EIP,将EIP调试到SvcMain函数中,调试服务。另外一种方法是将服务OEP处设置一个无限循环,启动服务后会在此处出无限循环,然后将服务附加到OD上,再修改回原样,实现对服务的调试。上述的两种方法均来自于《逆向工程核心原理》的第54章调试练习1。

但是除了.exe文件的服务之外,还有被svchost拉起dll的服务,这该怎么调试?其实只要会调试一般的服务了,dll加载的服务也很容易就能调试。下面结合对WannaMinner2.0的分析对其建立的服务进行调试。



运行WannaMinner2.0母体文件之后,从进程方面,有三个进程会被拉起,spoolsv.exe实际上是(NSA工具包中的DoublePulsar)进行攻击的进程,对局域网内445端口进行扫描;TasksHostServices.exe是挖矿进程,其CPU占比居高不下,并且观察其启动指令也很明显是一个挖矿程序:



svchost的功能众多,它负责拉起spoolsv.exe以及释放TaskHostsServices.exe挖矿程序。看一下svchost的这个启动参数:



netsvcs 参数是在注册表中svchost项下的一个键名,其中包含了多个服务的名称,不能确定该加载的是哪个dll文件,需要逆向进步分析。(分析WannaMinner病毒攻击逻辑的文章已经有不少了,我就不再赘述其攻击逻辑,接下来主要是集中在如何调试该服务上)

开始逆向分析:

该样本没有壳直接加载文件,运行到文件函数中,可疑字符串和调用的关键API下断点,别犹豫,不怕太多就怕遗漏了哪一个一次次的在VM里恢复snapshot:



这里逻辑不是很难我快点过。




这里有两个事值得一提,第一,EnrollCertXaml.dll文件并不是一个真正的dll文件,是一个压缩数据包,其中包含进行攻击的各种组件;第二,虽然路径创建文件和写文件的路径是C:\Windows\System32\ ,但由于我用的是x64 win7的系统,所以实际上并没有在该目录下,而是在C:\Windows\SysWOW64\ 路径下。同事告诉我,这是x64系统对x86程序兼容的问题。该病毒是x86 32位的,而在64位win7系统C:\Windows\System32\路径下存放的是64位的程序,而在C:\Windows\SysWOW64\ 路径下存放的是32位的程序。所以当x64系统得知该程序要往C:\Windows\System32\ 路径下写32位程序时候,就会将其程序写道C:\Windows\SysWOW64\ 路径下,注册表也是一样的,你会惊奇的发现System32下的项目和SysWOW64下的项目结构有很大的相似度。题外话,32下存64位程序,64下存32位程序,INTERESTING。



可以发现该文件是一个带有标准PE头的文件,是一个正确的dll文件。

先是获取svchost.exe文件时间:



然后将wmassrv.dll文件和EnrollCertXaml.dll文件设置成与svchost.exe的时间一致。




服务的path为svchost.exe –k netsvcs与之前看到的启动命令一致。

创建Parameters项在wmassrv服务下:




[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2018-7-14 14:53 被逆向实习生编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 244
活跃值: (174)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
之前在设置HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution Options 后无效,还以为是不是就不能调试了.

对了.楼主请教一个问题
类似迅雷的XLServicePlatform ,服务,它所在的'group'可以为空,这个是怎么设置的?一直没有找到相关资料

你文章里面的这个wmassrv服务所属的组为'netsvcs'

2018-8-20 16:29
0
雪    币: 114
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
想请问一下,怎么调试一个DLL的导出函数,这个导出函数就是ServiveMain,有两个参数,手动构造参数到字符串复制的时候就会报异常
2020-4-28 14:42
0
游客
登录 | 注册 方可回帖
返回
//