病毒分析教程第四话–高级静态逆向分析(下)

  • Post author:
  • Post category:其他





高级静态逆向分析(下)


教程参考自《恶意代码分析实战》

程序来自:

http://www.nostarch.com/malware.htm




Lab 7-3

本节实验使用样本Lab07-03.exe和Lab07-03.dll。


Lab07-03.exe

先来分析Lab07-03.exe,程序的开头先判断参数是否为“WARNING_THIS_WILL_DESTROY_YOUR_MACHINE”,若不是则立即退出程序,不做任何操作。

1

然后打开文件C:\Windows\System32\Kernel32.dll和Lab07-03.dll,并将它们都映射到内存中。

2

将它们映射到内存中后,程序开始做一列串的乏味工作,这一大段只调用了两个函数sub_401040和sub_401070。这些函数均很短,并且几乎没有相互调用,所以我们猜测它们的主要功能是比较内存、计算偏移,或者写入内存。

3

程序末尾调用了两个CloseHandle预示着程序对Kernel32.dll和Lab07-03.dll的操作已完成。完成了对着两个文件的操作后,将Lab07-03.dll复制到C:\windows\system32\kerne132.dll,注意这是1不是l,看来是想将Lab07-03.dll伪装起来。最后函数调用了sub_4011E0,参数为“C:\*”,这个sub_4011E0就是我们重点分析的对象了。

4

sub_4011E0开头处调用了FindFirstFileA,并且根据传入的参数C:\*,可以确定这里的操作是遍历C盘下的文件。

5

检查文件是否为exe文件,若是,则调用sub_4010A0函数进行操作。先记住这个函数,我们稍后对其进行分析。

6

这里又再次调用了本函数sub_4011E0和FindNextFileA。这些,该函数整体架构已经理清了,递归遍历C盘下的文件,若文件为exe文件,就调用sub_4010A0对其进行操作。

7

进入sub_4010A0,发现它就是做了几个简单操作,将每个exe文件中的“kernel32.dll”替换为dword_403010。

8

我在dword_403010上按下“a”键,便可将dword_403010转换成字符串,转换后的字符串为“kernel132.dll”。通过以上分析,我们可以断定这个恶意代码修改exe文件让它们防卫kernel132.dll,而不是kernel32.dll。

9

我们回过头来对比分析kernel132.dll和Lab07-03.dll,发现kernel132.dll就是多了一个导出节,导出了所有kernel32.dll的导出函数,并且这些是重定向导出函数,所以实际功能还是在kernel32.dll。kernel132.dll的功能应该就是执行恶意代码+中转kernel32.dll的函数调用。

10



Lab07-03.dll

程序开头是常规的检查互斥量,避免重复运行。然后调用WSAStartup初始化网络连接的函数。

11

创建socket,连接到127.26.152.13的80端口。

12

连接成功后,发送“hello”通信暗号。

13

然后调用recv接收C&C服务器发来的命令,这里比较特别的是,recv直接将接收的命令保存在栈上[esp+120Ch+buf]。然后比较命令若为“sleep”,则睡眠60s。

14

若为exec,则调用CreateProcess创建一个进程,那么究竟是创建什么进程呢,就要看CommandLine,CommandLine的位置为[esp+1224h+CommandLine],其实就是recv接收的数据,也就是说,若接收到的命令为“exec [path_to_file]”,则调用CreateProcess创建[path_to_file]。

15

Lab07-03.exe和Lab07-03.dll都分析完了,病毒总体流程如下:

  1. 恶意篡改C盘下的所有exe文件,劫持kernel32.dll。
  2. 当每个exe加载kerne132.dll时,都会自动连接C&C服务器执行命令,睡眠或创建一个指定进程。



版权声明:本文为m0_37552052原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。