Lab01-03.exe
问题及分析
第一问
将Lab01-03.exe文件上传至http://www.VirusTotal.com/进行分析并查看报告。文件匹配到了已有的反病毒软件特征吗?
使用virustotal.com
查看程序的报告如上图,匹配到了已有的反病毒软件特征
- Suspicious 有可疑问题
- Trojan/Win32.Agent 该木马会在用户不知情的情况下,自动链接到网络中下载其他恶意程序,同时该木马会尝试关闭受影响系统中的反病毒软件。
- Packer.FSG.A 木马程式可让黑客远端控制受感染的电脑系统,并进行各种操作。这些操作受制于使用者权限,通常用于窃取资料、修改或删除档案、键盘记录、和占据电脑成为僵尸网络以便大量发送垃圾邮件或执行分散式阻断服务攻击。
- Trojan Clicker 木马点击病毒
第二问
是否有这个文件被加壳或混淆的任何迹象?如何是这样,这些迹象是什么?
首先使用PEiD分析,如下图,可以看出该程序是加了FSG 1.0->dulek/xt的壳
然后我们用Dependency Walker
,我们就会发现这个代码的导入表KERNEL32.DLL 中有两个函数LoadLibraryA
,GetProcAddress
.这两个函数都是加壳的迹象,因为加壳的程序运行时候脱壳是必须要这两个函数的.
下面我们使用PEview
再次确认是否加壳,如下图:
通过上图可以发现没有分节的标志,说明这个程序可能进行加壳了,下面我们进行虚拟大小与原始数据大小进行比较,可以很明显的看出虚拟大小总是大于原始数据大小,所以可以实锤该程序是加壳的
分节 | 虚拟大小 | 原始数据大小 |
---|---|---|
第一个 | 00003000 | 00004000 |
第二个 | 00001000 | 0000028C |
第三个 | 00001000 | 00000200 |
下面准备尝试脱壳,首先由于不是UPX的壳所以不能使用UPX.exe脱掉壳. 这里我准备采用单步追踪法使用OllyDump进行脱壳
下图中是我发现在0050E1的位置有一个长跳JE 00401090
,这里可能是被加壳程序的入口
跳到00401090
后,下面应该是源程序,但由于没有找到如何手工脱壳的方法,所以这个方法搁浅了.
但是我在搜索资料的时候发现了一个宝贝,就是万能脱壳神器.我立马下载使用了一番,效果如下:
很高兴,这个壳被脱掉了,哈哈哈哈
第三问
有没有任何导入函数能够暗示这个程序的功能?如果有,是哪些导入函数,它们会告诉你什么?
现在我们继续对脱壳后的程序分析,使用Dependency Walker
对该程序进行分析:
这几个模块都是不怎么常见的模块.
MSVCRT.DLL (名称:Microsoft C Runtime Library)提供了printf,malloc,strcpy等C语言库函数,并且为使用C/C++(Vc)编绎的程序提供了初始化(如获取命令行参数)以及退出等功能
__getmainargs 这个如果你有C语言的编程经验就好理解了,这是从stdin获取程序参数的函数,说明这个程序会从用户输入获得运行所必须的参数
__getmainargs 这个如果你有C语言的编程经验就好理解了,这是从stdin获取程序参数的函数,说明这个程序会从用户输入获得运行所必须的参数
_controlfp 这个函数从MSDN上的解释来说,是Get and set the floating-point control word.,翻译过来就是获取并设置浮点控制字,这个函数在MSDN中的定义是这样unsigned int _controlfp( unsigned int new , unsigned int mask );,对这个函数具体做什么感兴趣的同学可以点这里 -> _controlfp
_except_handler3 同样引用MSDN的说法,内部 CRT 函数。 由框架用于查找相应的异常处理程序,以处理当前异常,说明这个程序有一个自己的错误处理机制
__set_app_type 设置当前应用类型。,有这么几种方式,_UNKNOWN_APP 未知应用程序类型;_CONSOLE_APP 控台 (命令行) 应用程序;_GUI_APP (GUI) Windows 应用程序。
__p_fmode 指向_fmode 全局变量的指针,它为文件 I/O 操作指定默认 文件提交模式。,这个函数只供内部调用。
__p_commande 这个函数MSDN里面没用文档化,根据上面那个的解释推理,这是指向commande全局变量的指针,也是只供内部调用(因为前面两个下划线)
_exit 这个就好理解了,是程序的退出函数的
_XcpFliter 这也是MSDN里面未文档化的函数,暂时用途不明
__p_initenv 这也是MSDN未文档化的函数,不过我们知道initenv函数是初始化环境变量的函数,那同理可得__p_initenv是指向initenv变量的指针,也是只供内部调用
_initterm 调用所有的静态构造的模块中是通过函数指针阵列枚举,依次调用每一个指针的一个简单的事情,按照文档的解释,这个编译器会帮你完成
__setusermatherr 指定用户提供的事务来处理算术错误,而不是_matherr事务。
_adjust_fdiv 这个也是未文档化的函数
OLE32.DLL 文件是链接和嵌入在应用程序中的对象的过程文件。它是用于编写和整合来自不同应用程序的数据在Windows作业系统的骨干部分。
这里我没有能发现什么异常,最大的疑点就是这里的DLL不是常见的DLL
第四问
哪些基于主机或基于网络的迹象可以被用来确定被这个恶意代码所感染的机器?
下面使用Strings.exe对脱完壳的程序进行分析:
由上图可得,出现可疑的URL: www.malwareanalysisbook.com/ad.html 还有IE8.0 推测应该是使用IE打开该网站
关键提示和要求:
1、使用virustotal.com查看程序,分析报告;
2、用PEview分析是否加壳(注意该程序的节的名称);导入表叫什么名字?
3、使用PEiD做加壳分析,确认由什么方式加壳的。
4、使用Dependecy Walker 分析导入函数有哪些。
引用
- 《 Practical Malware Analysis 》 By Michael Sikorski, Andrew Honig · 2012
- 以及网上前辈的一些作品,由于查阅过多过细,这里就不一一例举。