在尝试学习分析的过程中,判断结论不一定准确,只是一些我自己的思考和探索。敬请批评指正!
- 总结部分:计算机病毒实践总结一:简单静态分析
1. 实践一:Lab01_01
(1)将样例代码上传到http://www.virustotal.com进行分析并查看报告,从报告可以看出什么信息?
-
一直无法正常打开这个网站。
-
经过查找,这个网站是用作“病毒引擎检测、可疑文件分析服务”的,于是我就查找有没有功能相同的同类网站,有一些国外网站无法访问,有的(像金山火眼)需要注册和邀请码。
-
最后找到了VirSCAN可以免费使用。
-
上传Lab01_01.dll文件并检测。
-
可以查看文件行为分析
-
上传Lab01_01.exe文件并检测。
分析通过查看报告得到的信息:
- 首先,我们可以从报告中获得一些常用的杀毒软件病毒库对于这个文件的比对结果,从而判断是否是病毒文件。
- 第二,我们可以看到这个文件的壳或编译器信息,有助于我们找到分析的方向。
- 第三,在dll的文件信息中,我们可以看到它的网络行为:
发送一个已连接的套接字数据
,发送套接字的详细信息和端口号为:127.26.152.13:80
;还可以看到这个文件有获取系统权限的行为。
(2)利用PEiD软件分析这两个文件是否加壳了?
-
使用PEiD软件打开这两个文件
分析:
- 可以看到显示出的是
Microsoft Visual C++
,这是编译器的信息,说明两个文件没有加壳,是通过Microsoft Visual C++编译的。
(3)利用PEView/PEBrowse Professional/PEExplorer软件查看两个样例代码的编译时间。
-
使用PE Explorer查看两个样例代码编译时间
分析:
- 第一个.dll文件编译时间是
2010年12月19日,16:16:38
- 第二个.exe文件编译时间是
2010年12月19日,16:16:19
- 两个文件几乎是同时编译的,说明它们可能有一定的联系,很可能共同完成某项工作。
(4)利用Dependency Walker软件判断Lab01-01.exe这个样本代码中含有那些导入函数,他们可能是用来使得该样本程序完成什么功能的?
-
使用Dependency Walker打开Lab01_01.exe
分析:
-
Lab01_01.exe中有两个dll文件:KERNEL32.DLL和MSVCRT.DLL
-
从KERNEL32.DLL中可以看到10个导入函数:
- CloseHandle:关闭一个内核对象 - CopyFile:拷贝(覆盖)文件 - CreateFileMapping:创建一个新的文件映射内核对象 - FindClose:关闭FindFirstFile创建的搜索句柄 - FindFirstFile:根据文件名查找文件 - FindNextFile:此函数用于遍历目录或文件时,判断当前目录下是否有下一个目录或文件 - IsBadReadPtr:判断一个内存是否能够被读取 - MapViewOfFile:将一个文件映射对象映射到当前应用程序的地址空间 - UnmapViewOfFile:在当前应用程序的内存地址空间解除对一个文件映射对象的映射
-
MSVCRT.DLL是微软在windows操作系统中提供的c语言运行库执行文件,其中提供了C语言库函数的具体实现。
-
我认为,这个exe文件主要的功能应该是把系统中某个关键位置的dll文件删除,并且替换换成这个程序中某段dll代码。
(5)从对两个文件的分析来看,里面是否包含有关于其他文件的线索可以帮助你在被该恶意代码感染的主机上进行搜索?
-
由于软件使用的不熟练,这个问题真的研究了很久,不清楚从哪里入手进行分析,浪费了很多的时间。
-
其实通过之前的分析,恶意代码应该是换掉了系统的文件,顺着这个思路,最后在用WinHex查看exe文件的时候发现这个位置可能有问题:
-
这里的两个.dll文件是不一样的!上面的
kerne132.dll
是数字“1”,后一个kernel32.dll
中是字母“L”。 -
所以恶意代码应该就是把这个类似kernel32.dll的文件放进了
C:\windows\system32\
中,在主机上可以通过查找是否有这个伪装的kerne132.dll
文件判断自己是否被感染。 -
WARNING_THIS_WILL_DESTROY_YOUR_MACHINE
应该是编写代码的人加上的吧...破坏电脑的友情提示?
(6)从对两个文件的分析来看,是否有基于网络连接的线索可以用来探查这个恶意代码?
-
在第一步上传Lab01_01.dll查看分析报告的时候,就有关于网络行为的描述:
-
但是里面127.26.152.13:80是本机的保留地址,如果换成是外网的ip地址的话就可能就是网络方面的线索了。
(7)你猜测这两个文件的目的是什么?
-
C盘下的Kernel文件
-
这两个文件主要的功能应该是把系统盘c:\windows\system32中的kernel.dll文件换成这个程序中的Kerne1.dll文件,非法获得系统权限。
2. 实践二:Lab01_02(略)
-
上传并检测
-
探测是否加壳
- 使用UPX加壳
-
脱壳并查看编译器信息
-
脱壳后显示更多导入函数
-
WININET.DLL中有一些
3. 实践二:Lab01_03(略)
-
上传并检测
-
探测是否加壳
- 使用FSG加壳
-
脱壳并查看编译器信息
-
脱壳前后比较
4. 实践二:Lab01_04
(1)将样例代码上传到在线杀毒中心进行分析并查看报告,从报告可以看出什么信息?
-
上传并检测
分析通过查看报告得到的信息:
- 39个病毒搜索引擎中有25个将其标记为恶意代码。
- 通过观察这个报告,我们可以看到这个恶意代码应该是基于Win32系统的木马病毒,其主要行为是与下载相关的。
(2)这个文件是否加壳了?如果加壳了,请进行脱壳
-
使用PEiD软件打开这两个文件
分析:
- 通过PEiD的检测,显示出的是Microsoft Visual C++,这是编译器的信息,说明文件没有加壳,是通过Microsoft Visual C++编译的。
(3)有没有导入函数能够暗示出这个程序的功能?如果有,你认为是那些函数?从这些函数可以得到什么信息?
-
使用Dependency Walker打开Lab01_01.exe
分析:
-
Lab01_04.exe中有三个dll文件:KERNEL32.DLL、ADVAPI32.DLL和MSVCRT.DLL
-
KERNEL32.DLL中的一些关键导入函数:
- CreateFileA:打开或创建对象 - CreateRemoteThread:创建一个在其它进程地址空间中运行的线程(也称:创建远程线程) - FindResource:确定指定模块中指定类型和名称的资源所在位置 - GetWindowsDirectory:获取Windows目录的完整路径名 - LoadLibrary:加载动态连接库 - LoadResource:装载指定资源到全局存储器 - SizeofResource:返回指定资源节的大小 - WinExec:运行指定程序
-
ADVAPI32.DLL中的一些关键导入函数:
- AdjustTokenPrivileges:用于启用或禁止,指定访问令牌的特权 - LookupPrivilegeValueA:函数查看系统权限的特权值 - OpenProcessToken:数用来打开与进程相关联的访问令牌
-
通过查阅相关资料(参考资料1),我们从ADVAPI32.DLL导入函数可以判断这个程序应该是进行了提权的操作。结合KERNEL32.DLL的导入函数,通过FindResource找到一个资源、然后用LoadResource将指定资源装载到全局存储器,然后将其写在其它位置(GetWindowsDirectory获取了Windows目录的完整路径名,所以很可能是放在系统目录中了),并用WinExec执行这个文件。
(4)有没有什么线索可以用来在被感染主机上进行该恶意代码的查找?
分析:
-
使用PEView查看
-
这个文件有资源节,并且是二进制BIN文件
-
发现这个资源节有着和Lab01_04一样的头部:
-
使用Resource Hacker查看其资源节,并导出成新的exe文件
-
在资源节中,看到了\system32\wupdmgrd.exe和http://www.practicalmalwareanlysis.com/updater.exe两个字串。wupdmgrd.exe是windows update manger的缩写,是Windows自动升级程序。说明代码很有可能从该网站地址中下载了一个恶意代码,其运行后很有可能在\system32\目录下创建或覆盖一个wupdmgrd.exe文件。
-
再查看资源节的PE文件:
-
urlmon.dll是微软Microsoft对象链接和嵌入相关模块,这里很可能是URLDownloadToFile是从指定URL地址读取内容并将读取到的内容保存到特定的文件里,很可能会下载恶意程序并使用WinExec执行。
参考资料1:《恶意代码分析实战》读书笔记——入门与基础篇
参考资料2:提升进程权限