恶意代码静态分析-1
中国人民公安大学
实验报告
课程名称: 恶意代码分析与检测技术
实验项目: 恶意代码静态分析
实验类型: 综合型实验
姓名: cao yiming
学号: 201721230025
年级: 2017级
专业: 网络安全与执法
指导教师: 王威
成绩:
一、实验内容
1、使用IDA Pro完成对恶意代码Lab06-03.exe的高级静态分析,回答下列问题。
1)比较在main函数与实验6-2的main函数的调用。从main中调用的新的函数是什么?
2)这个新的函数使用的参数是什么?
3)这个函数包含的主要代码结构是什么?
4)这个函数能够做什么?
5)在这个恶意代码中有什么本地特征吗?
6)这个恶意代码的目的是什么?
2、使用IDA Pro分析Windows恶意代码Lab07-01.exe,回答下列问题。
1)当计算机重启后,这个程序如何确保它继续运行(达到持久化驻留)?
2)为什么这个程序会使用一个互斥量?
3)可以用来检测这个程序的基于主机特征是什么?
4)检测这个恶意代码的基于网络特征是什么?
5)这个程序的目的是什么?
6)这个程序什么时候完成执行?
二、实验目的和要求
通过本次实验,掌握IDA Pro的使用技巧,能够分析恶意代码的结构,识别恶意代码的主机和网络行为。
三、回答问题、采集实验数据(注意对截图有必要的文字说明)
运行IDA Pro 6.8 分析Lab6-3.exe。

(1)可以看到sub_401130是这次实验main调用的新函数,sub_401000和sub401040与lab 6-2中的一样。
(2)新函数使用了2个参数,一个是解析html返回的数据,通过赋值给ecx并压入栈,另外一个是argv(程序名称)通过赋值给eax(相当于指针)并压入栈。(书中说这个argv相当于argv[0],也就是当前运行程序的名字)



var_8在这里被设置成al,sub_401040的返回值(可能就是从相关网址上拿到的命令)
(3)

如果ecx值大于4,执行无条件跳转,输出一个Error

小于等于4的话来到这

这个jmp跳转到一个跳转表上

如果获得的参数是a,跳转loc_40115A
如果是b,跳转loc_40116c
如果是c,跳转loc_40117F
如果是d,跳转loc_40118C
如果是e,跳转loc_4011D4
所以这个函数的代码结构就是一个switch
(4)如果获得的参数是a的时候,

创建一个目录在C盘的Temp下。
如果获得参数是b,

Call出CopyFileA函数。好像和copy有点关系?

挨个点进去看,会发现这个函数就是将本身复制进Temp下,名为cc的执行文件。
如果获得参数是c,

DeleteFileA,删除文件呗。
d的话,

RegOpenKey和RegSetValue分别对应打开注册表以及把这个程序写进去。
e的话,
Call ds:sleep
休眠指令,会调用出系统休眠,时间为186A0h毫秒,约为100000毫秒
(5)会在本地创建一个C:\\Temp文件夹和创建一个C:\\Temp\\cc.exe文件,然后会在注册表中Software\Microsoft\Windows\CurrentVersion\Run中添加一个值C:\Temp\cc.exe。这都是这个程序留下来的痕迹。

(6)综上所见,该程序将自己复制进temp文件夹并尝试写入注册表,为的就是能被开机启动。


综合其所具备的能力,以及与Lab6-2的对比,我们可以知道:
其先通过sub_401000检查有没有网络,如果有,sub_401040下载网页去解析其中的HTML注释。根据内容switch分别执行诸如删除文件,复制本身,休眠,自启动等操作。
2.
(1)
这个代码先是将ServiceStartTable.lpServiceName的值赋为MalService
然后又将ServicesStartTable.lpServiceProc的值赋为了sub_401040,后面又调用了StartServiceCtrlDispatcherA
结合汇编代码分析,大致应该是将sub_401040以MalService形式安装(安装到服务?)

随后发现的OpenSCManagerA(在指定的计算机上建立与服务控制管理器的连接,并打开指定的服务管理器数据库)和CreateServiceA(创建服务)函数更明确了这是一个服务,来保证它在系统重启后依旧能运行。
(2)互斥量

回到sub_401040,根据OpenMutexA 与push offest Name “HGL345”判断出互斥量在这里。
Push 1F0001h将对互斥体的完全访问入参。
这个汇编段的意思就是以要求所有权限的方式,打开一个名叫HGL345的互斥量
如果没打开互斥量,程序将走jz跳转,执行右下角的loc_401064
如果打开了,说明有程序已经运行了,test之后zf为0,不跳转,程序将Exit,也就是退出。编写者的意图就是让程序只能同时运行一个。

(3)搜索问题(1)中的MalService,或者(2)中的HGL345

.
(4)在这个CreateThread函数里涉及到了网络通信


函数调用InternetOpenA,用户代理为IE8.0,访问www.malwareanalysisbook.com,而且找不到跳出循环的路径,loc_40116D会不断执行。
(5)在(4)之前有个时间戳


SystemTime所有值都被设置为0但在wYear上被赋值为834h,换算十进制为2100

到点之前都会sleep
因此该程序会在2100年启动。
结合程序运行特征,我们判断它是一个DDoS程序,保护自己每次开机都被启动,在设定的时间戳启运行并使相关网站服务器大量收到请求而不能正常服务。
(6)最后一个循环没有跳出,属于无限循环。因此该程序永远不会完成执行并停止。
正如书中所说,恶意代码只需要满足作者达到破坏的目标,不需要考虑规范性。对作者来说,受感染的“僵尸机”只需要一直攻击就好。
四、实验总结(请将实验过程中遇到的问题和心得记录下来)
本次实验在学习汇编语言与恶意代码相关知识之后,使用IDA pro分析了两个恶意程序并了解相关代码与功能,进而探讨编写该代码作者的意图。
实验是对课堂知识的一次强化吸收,但因为我们是分析恶意代码,因此要小心配置好安全的虚拟环境并避免联网,这是学习课程的基本意识。
在分析程序前,尝试导入函数可以通过函数名大致了解程序能实现的相关功能,从而判断程序可能是做些什么,有助于程序分析。从main函数线性调查,深入查看相关名称函数,结合名称判断函数功能,有的时候一个特殊的函数就代表着整个程序的核心。
学习恶意代码分析,重在分析两个字。代码层面是汇编和之前已经了解的基础,我们的学习应该把眼光放大,分析程序重在程序的整个框架逻辑上,通过恶意代码经常会使用的“套路”去深入挖掘,就能有意想不到的惊喜。比如第一个程序中,找到跳转表,结合6-2就应该想到程序将要实现很多分支功能。往下看果然十分明确。这就是我们在这门课程所应学的能力。之后我也将在这方面重点下手,培养自己的大局观与逻辑思维,便能在更复杂的代码面前目无全牛。

浙公网安备 33010602011771号