高级静态逆向分析(上)
教程参考自《恶意代码分析实战》
程序来自:http://www.nostarch.com/malware.htm
PS:由于高级静态逆向分析过程冗杂,所以本话使用问答的方式进行讲解。
Lab 7-1
本节实验使用样本Lab07-01.exe。
当计算机重启后,这个程序任何确保它继续运行(达到持久化驻留)?
使用IDA打开Lab07-01.exe,切换到导入表视图,一眼就瞟到了几个创建服务的API,跟进查看CreateServiceA函数,发现该样本注册了一个名为“MalService”的服务,而且,服务运行状态(dwStartType)为自启动(0x02),所以可以确定,该样本是通过注册一个自启动服务来实现持久化驻留的。
为什么这个程序会使用一个互斥量?
大部分病毒为了防止自己被重复运行(比如勒索病毒,无需重复运行),就使用了创建互斥量或创建一个注册表键的方式来标识自己是否运行过。在这里,Lab07-01.exe使用的是互斥量识别法。病毒每次运行时都会检查是否存在互斥量“HGL345”,若已存在,则不执行任何操作,直接退出。
可以用来检测这个程序的基于主机的特征是什么?
我们可以搜索一个名为HGL345的互斥量,以及MalService服务来检测该样本是否运行于主机中。
检测这个恶意代码的基于网络特征是什么?
如下图,可以看到该样本伪造代理Internet Explorer 8.0,并和http://www.malwareanalysisbook.com通信。
这个程序的目的是什么?
接着上面那张图,我们注意到一个细节,就是call InternetOpenUrlA下面有一个jmp short loc_40116D指令,这是一个死循环,会不断地访问http://www.malwareanalysisbook.com,也就是说这是一个DDos行为。
我们在该DDos函数起始处(0x401150)查询交叉引用,发现仅有一处调用了它,跟进去。
原来DDos函数是以线程的形式运行的,同时,这里也有一个循环,循环数为20(mov esi,14h),也就是说,样本会创建20个DDos线程。这个程序的目的也就慢慢浮现出来了,创建一个服务来实现持久化驻留,运行后便创建20个线程不断地对http://www.malwareanalysisbook.com进行DDos。
这个程序什么时候完成执行?
我们看到代码中调用了SystemTimeToFileTime函数(时间格式转换)和SetWaitableTime函数(设置等待时间),要想知道这个程序什么时候完成执行,就查看它们的参数就行了。设置等待时间的参数为lpDueTime,该参数来自上面传入SystemTimeToFileTime的0x834(红框标识),0x834转换成10进制是2100,其它Day、Hour都被设为0,所以结束时间为2100年1月1日。可见,这个病毒要是感染范围大,那该多可怕。
Lab 7-2
本节实验使用样本Lab07-02.exe。
这个程序如何完成持久化驻留?
查看该样本的的函数导入表,并没有操作服务及注册表的操作。所以可以判断该样本没有持久化驻留的行为,运行一次便退出了。
这个程序的目的是什么?
看到上图红框中的函数,这些都是与COM相关的函数,其中CoCreateInstance是创建COM对象的函数,所以,该样本为何只有几个导入函数就解释的通了,它们通过COM的接口调用函数,这些函数并不会在IAT中保存。
CoCreateInstance有两个重要的参数,riid和rclsid,双击查看它们的值分别是D30C1661-CDAF-11D0-8A3E-00C04FC9E26E和0002DF01-0000-0000-C000-000000000046。
通过搜索查看注册表键值,可以知道这个IID对应IwebBrowser2,CLSID对应Internet Explorer。
样本核心功能在函数[edx+2Ch]中实现,edx是IWebBrowser2接口的函数表,偏移2C预示着将调用表中的哪个函数。
这里介绍一个技巧,打开Structures视图,按下Insert键,出现定义结构提示框,但由于IDA已经有IwebBrowser2的结构定义了,所以我们直接点Add standard structure按钮查询IWebBrowser2结构。
添加完IWebBrowser2结构后,回到[edx+2Ch]处点击右键,便会出现IWebBrowser2Vtbl.Navigate的标识。
选中后,IDA便会将[edx+2Ch]识别成Navigate函数,同时对应的参数也全识别出来了。Navigate函数的功能是打开IE访问一个网页,其中这里的URL为http://www.malwareanalysisbook.com/ad.htm。
这个程序什么时候完成执行?
样本执行完上述操作后便退出了,所以该样本不会持久化驻留。
未完待续。。。。。