此样本来自《恶意代码分析实战》第12章的实验练习。这本书到第12章为止,讲解了恶意代码的基本行为,因此在这一章的练习中,主要是鉴别恶意代码的行为和研究解决方案。
样本来源:《恶意代码分析实战》Lab12-01

环境和工具

  • Windows xp操作系统
  • VMware虚拟机环境
  • strings(字符串提取)
  • PEID
  • PEview
  • IDA pro
  • 火绒剑

一、静态分析

首先观察这个样本,这个样本由一个exe文件和一个dll文件组成,初步猜测dll有可能是在exe文件运行时动态加载进来。

1、查壳:

使用PEID查壳如下图所示。
PEID查壳截图
exe文件查壳结果,无壳。
PEID查壳截图
dll文件查壳结果,无壳。

2、提取字符串:

(1)exe文件:

  • 字符串中出现了explorer.exe,猜测和这个程序的进程有关;
  • 字符串中出现了Lab12-01.dll说明exe文件与dll文件相关,另外还有psapi.dll文件,这是一个Windows系统进程状态支持模块,猜测恶意程序可能利用这个来获取进程的状态;
  • 其他还有一些导入函数,稍后分析。
    字符串提取截图
    explorer.exe是Windows程序管理器或者文件资源管理器,它用于管理Windows图形壳,包括桌面和文件管理,删除该程序会导致Windows图形界面无法使用。不要将此进程与浏览器进程(iexplore.exe)混淆。

    (2) dll文件:

    字符串提取截图
    一些关于月份、星期的单词的字符串,不清楚作用。
    字符串提取截图
    “Press OK to reboot”可能和重启有关,也可能只是一个字符串,还不确定。
    “Practical Malware Analysis %d”可能是要打印的字符串,%d可能是输出一个整数。
    其他还有导入函数,稍后分析。

    3、查看导入表:

    (1)exe文件:

    exe文件导入表截图
    这几个导入函数OpenProcess、CreateRemoteThread、WriteProcessMemory、VirtualAllocEx包括了打开进程、创建远程线程、将数据写入进程内存、动态分配内存,这是进程注入的标志,初步判断这个恶意程序使用进程注入技术。
    exe文件导入表截图
    这些就是进程、内存、文件操作,还有环境变量操作,感觉没什么需要分析的。

    (2)dll文件:

    dll文件导入表截图
    线程、进程、文件操作,环境变量操作,再就没什么了。

静态分析总结:以上就是静态分析结果,总体来说,能够确定的一点是这个恶意程序应该是一个使用进程注入技术的程序,还涉及到psapi.dll、Lab12-01.dll、explorer.exe文件,下面的分析目标就是找到注入的恶意程序和被害程序,了解运行后的结果,以及如何处理解决。

二、基础动态分析:

双击exe文件运行恶意程序,火绒剑中弹出一个Lab12-01.exe进程,随后进程消失,之后的时间里进程监控没有变化。没有明显的创建或修改任何文件的动作。
之后,每隔一分钟,就会弹出一个如下图的消息框,无论点击OK按钮还是点击右上角的×,一分钟后都会重新弹出这个消息框,暂不清楚这个消息框产生的来源。
消息框截图

三、IDA反汇编分析:

从动态分析可以看到,恶意程序的主要行为应该就是不断弹出那个十分恼人的消息框,为了弄清楚这个消息框的来源(以便消除这个行为),我用IDA反汇编分析看看。

exe文件:
main:调用函数LoadLibraryA和GetProcAddress ,解析psapi.dll中的EnumProcessModules函数(作为参数引入) ,结果返回到EnumProcessModules、GetModuleBaseNameA、EnumProcesses三个地方。
汇编代码截图
后面调用EnumProcesses,之后跳转到4011D0,再跳转到4011FA。
汇编代码截图
在这里将进程PID(dwProcessId)作为参数传入到sub_401000函数。
汇编代码截图
sub_401000 :PID传入OpenProcess。如果返回值是0,跳转到401095;若不为0,调用EnumProcessModules,若返回值为0,跳转到401095;若返回值不为0,调用GetModuleBaseNameA。
汇编代码截图
401095:出现了“explorer.exe”,还有字符串比较,猜测应该是将之前的PID解析为进程名,并和进程名explorer.exe相比较。如果相同(找到该进程),则跳转到4010C2,之后返回1。
汇编代码截图
汇编代码截图
以上我追踪代码运行过程中的地址和函数,了解了恶意代码通过解析psapi.dll,获取了系统中的进程的PID,之后用获得的PID和每一个正在运行的进程比较,最终找出目标进程 explorer.exe ,这也是目前为止这个恶意程序想要达到的目标。这里猜测 explorer.exe 应该就是那个被害进程。

接着分析,回到4011FA:
接下来到了401242,调用OpenProcess,到这里已经不难看出受害进程就是explorer.exe,此时恶意代码打开了这个进程,再往后的代码调用的函数显而易见就是在进行进程注入。
汇编代码截图
40128C:动态分配内存。
4012BE:WriteProcessMemory向explorer.exe写入数据,我需要知道写入了什么数据,这个数据的写入关乎到注入的恶意线程的真面目。于是我找到传入的参数Buffer,向前回溯,就找到main中的当前目录字符串“//”和”Lab12-01.dll”,所以可以确定恶意代码将Lab12-01.dll线程注入到explorer.exe进程中。
汇编代码截图
汇编代码截图
汇编代码截图
到此,我基本上完成了exe文件的反汇编分析,得到结论:这个恶意代码使用进程注入技术,被害进程是explorer.exe进程,注入的是Lab12-01.dll线程,猜测那个不断弹出的恼人的消息框就是这个线程导致的,因此,我重新进行动态运行,看看是否能够验证这个结论。

四、再次动态运行:

双击exe文件,火绒剑中出现explorer.exe进程,这次我右键查看这个进程的详细信息,并终止其中的 Lab12-01.dll线程 ,果然,那个消息框没有再次弹出。
进程管理截图
到这里为止,我确定了被害进程、注入的恶意线程,找到了解决方法,但是还有一点不清楚,就是这个线程除了弹出这个消息框,还有没有其他行为,这个消息框又是个什么东西。于是我决定反汇编分析Lab12-01.dll看看。

五、反汇编分析Lab12-01.dll:

进入dllmain,看到调用创建线程,一定是弹出对话框的线程。获取起始地址参数是通过调用sub_10001030函数得到的,跳转到这个函数。
汇编代码截图
sub_10001030:
调用函数打印、创建线程、Sleep用来计时,其中打印函数_sprintf的参数”Practical Malware Analysis %d”正是那个对话框的标题。通过动态运行,可以确定,%d就是输出一个整数,而这个整数是通过Sleep计时获取的,每隔一分钟这个整数加1,并打印出来。
汇编代码截图
创建线程的地址参数是StartAddress,跳转过去,终于看到了字符串”Press OK to reboot”,正是那个对话框中的文字,这些代码证实了这个对话框弹出后并不会真的重启,而只是每分钟弹出烦人的对话框而已。
汇编代码截图

六、总结:

  • 运行恶意代码可执行文件会发生什么?
    每隔一分钟弹出一个对话框。
  • 哪个进程会被注入?
    explorer.exe
  • 如何能让恶意代码停止弹出窗口?
    法一:重新启动explorer.exe进程。
    法二:终止explorer.exe进程中的Lab12-01.dll创建的线程。
  • 这个恶意代码样本是如何工作的?
    这个恶意代码通过dll注入,在explorer.exe进程中注入Lab12-01.dll创建的线程,每隔一分钟弹出一个消息框,还能通过一个计数器,显示已经过去了多少分钟。

理解
这个样本实际上只是在不断弹出消息框的过程中让你不胜其烦,在分析过程中十分恼人。但是这个看似无害的功能不容小觑,比如它可以用作恶意的推广营销。尤其是如果非法人员在这个过程中如果向毫不知情的用户勒索费用,只有给钱才能帮你解决掉这个让你不胜其烦的消息框,那就非常棘手了。
这个恶意代码使用了进程注入技术,这种技术很多时候能够避开很多杀毒软件的侦察,十分隐蔽。因此,如果不是专业人员,只是普通用户遇到了这个问题,打开进程管理器后很难发现那个恶意线程的存在,很难在短时间内找到对策。