实验环境:
实验设备环境:windows xp
实验工具:UltraCompare,IDAPro,Ollydbg,WinMD5,strings,processmonitor
实验过程
1、使用基础的静态分析过程,那你可以发现什么有趣的线索?
我们可以使用strings查看目标程序:
可以观察到其调用了lab11-03.dll程序,并且存在系统根目录字符串,说明程序针对根目录做出了一些操作。
net start cisvc
,net start
在windows系统中用来启动一个服务,cisvc是索引服务检测的程序,用来检测内存的使用状况。
下面使用dependency walker查看一下导入dll(lab11-03.dll):
可以看到其存在一个导出函数。
可以看到其调用了GetAsyncKeyState
以及GetForegroundWindow
这两个函数的目的是记录被敲打的键盘。
2、当运行恶意代码时发生了什么?
现在利用process monitor监控进程,在process monitor中设定过滤条件如下:
运行lab11-03.exe程序:
其在系统根目录下面创建了一个dll为inet_epar32.dll
。
下面采用winmd5
这个软件查看哈希,确定其是否和lab11-03.dll是同一个文件:
以上为lab11-03.dll的hash检测。
以上为net_epar32.dl
l的哈希,经过对比发现两者的hash是相同的,也就是说是同一个文件,也就是说恶意程序是将lab11-03.dll复制到了系统根目录下面。
调用了cisvc.exe程序。
3、Lab11-03.exe如何安装Lab11-03.dll使其长期驻留?这个恶意代码感染了哪些文件??
使用IDA打开exe文件:
可以看到程序首先是将Lab11-03.dll文件利用CopyFile函数将其复制到系统根目录下面,之后创建了一个cisvc.exe字符串,并将其作为参数传入了sub_401070
函数中,最后利用net start启动了这个服务,进入sub_401070
函数:
首先看一下其交叉引用图:
其中MapViewOfFile会返回内存映射的基地址:
在IDA汇编界面中,内存映射的基地址被保存在lpBaseAddress
中。
在程序的最后还会如上图所示调用UnmapViewOfFile
,调用这个函数以后,对cisvc.exe文件的任何修改都会被写入到内存中。
如上图所示,此模块会先将lpBaseAddress
的值暂存在edi中,并且利用var_28调整偏移量,在0040127C
处点击F5
之后来到反汇编代码:
可以看到光标其停留在了memcpy上面。
向下分析,esi中保存的是 byte_409030
的值,点击进入查看:
发现其存在一些看不懂的数字信息,现在可以将光标放置在内存地址处,按C
强制转化为代码形式:
可以看到其转换为了代码形式,在程序的最后会跳转到loc_409134
上面,点击提转:
可以看到此过程显示了一个dll文件以及一个导入函数,说明此过程有可能就是调用了inet_epar32.dll中的一个导入函数。
4、lab11-03.dll程序做了什么?恶意代码收集的数据存放在哪里?
使用IDA载入dll文件:
主要分析导出函数,导出函数会创建一个线程,重点在于开始地址即StartAddress
,我们点击进入:
我们会发现其会利用openmutex查看是否存在mz这个互斥量,如果不存在那么就创建这个互斥量。
接下来会在系统根目录下面创建一个kernel64x.dll文件:
其调用了SetFilePointer
函数用于设置文件指针,之后调用了一个sub_10001380
未知函数,点击进入:
整体是存在一个循环函数的,在图中的模块中存在一个未知函数 sub_10001030
,点击进入:
再次进入:
GetForegroundWindow
用于获得当前聚焦的窗口,方便告知键盘记录程序当前位于哪个窗口。GetWindowTextA
用于获取当前窗口的标题。
返回上一层:
向下分析GetAsyncKeyState
函数会识别此按键是被按下还是被抬起的,结合循环总结此函数的目的就是轮询查看键盘是否被敲击。