-
-
[原创]WannaMiner2.0之调试svchost拉起的dll服务方法
-
发表于:
2018-7-14 14:53
10792
-
[原创]WannaMiner2.0之调试svchost拉起的dll服务方法
之前写了一篇文章是关于如何在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服务下:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2018-7-14 14:53
被逆向实习生编辑
,原因: