恶意代码分析实战6-3

Posted Neil-Yale

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了恶意代码分析实战6-3相关的知识,希望对你有一定的参考价值。

本次实验分析lab06-03.exe,需要回答如下问题
Q1比较在main函数与6-2的main函数的调用。从main中调用的新的函数是什么
Q2这个新的函数使用的参数是什么
Q3这个函数包含的主要代码结构是什么
Q4这个函数能够做什么
Q5在这个恶意代码中有什么本地特征吗
Q6这个恶意代码的目的是什么
同样先载入peview
在这里插入图片描述

RegOpenKeyExA函数一般与RegSetValueExA一起用于往注册表中插入信息,在恶意代码将其自身或其他程序设置为随着系统开机就自启动以持久化运行时,通常会使用这两个函数。
看看字符串
在这里插入图片描述

可以看到software\\Microsoft\\windows\\currentversion\\run是注册表中一个常用的autorun的位置。后面的c:\\temp\\cc.exe是文件名,猜测可能会通过上面看到的导入函数写到注册表中,用于将其设置为随着系统开机就自启动。
Q5在这个恶意代码中有什么本地特征吗
A5注册表键Software\\Microsoft \\Windows \\CurrentVers ion\\Run\\Malware和文件路径C:\\Temp\\cc.exe都可以当作本地特征
接下来IDA分析
可以看到与之前的文件相比,多了一个call sub_401130
Q1比较在main函数与6-2的main函数的调用。从main中调用的新的函数是什么
A1.在0x401000和0x401040处的函数与Lab6-2的一样。在0x401271处的是printf。0x401130处的函数则是本实验中新出现的。
在这里插入图片描述


我们看一下call时传入的参数
跟进去
在这里插入图片描述

可以看到头部有两个正数,即有两个参数。

从下图可以看到两个参数分别保存在eax,ecx
在这里插入图片描述

先看eax,可以看到eax实际由argv决定
在这里插入图片描述

可以看到
在这里插入图片描述

argv实际上就是argv【0】,是当前运行程序的名字,即lab06-03.exe
再来看看ecx
可以看到ecx实际由var_8赋予
在这里插入图片描述

往上看看var_8
在这里插入图片描述

可以看到取决于al,而al包含在eax中,eax是sub_401040的返回结果
之前我们分析过sub_401040,其返回结果是从html注释中解析出来的指令字符
Q2这个新的函数使用的参数是什么
A2.这个新的函数有两个参数,第一个是从HTML注释中解析来的指令字符,第二个参数是标准main函数的参数中的argv[0],也就是程序名本身

接下来跟入sub_401130
在这里插入图片描述

arg_0是由IDA自动生成的标签,用于标记调用前最后一个被压栈的参数,也就是说arg_0是解析得到的指令字符。它被赋给var_8,然后在上图箭头所指处加载到eax
sub ecx,61h是从ecx中减掉0x61(ascii的a),如果arg_0是a,则执行后ecx为0
mov [ebp+var_8],ecx cmp [ebp+var_8],4 是将ecx与4进行比较,以判断该指令字符是否为a,b,c,d,e,如果不是其中的话则跳到右侧
在这里插入图片描述

如果是的话则走左侧,在根据具体情况呈switch结构
在这里插入图片描述

这里箭头指向的指令:edx被乘以4,这是因为跳转表是一组指向不同执行路径的内存地址,而每个地址的大小为4字节
下图中可以看到跳转表有5条记录
在这里插入图片描述

编译器在为switch语句生成汇编代码时,经常使用这样的跳转表
在这里插入图片描述

这图为函数的graph view,可以看到代码中有6条可能的执行路径,包括5个case和1个default,大于4就跳转的那条会走最右边的,也就是default路径,而在其他情况下,跳转表会引发从a分支到e分支的其中一条执行路径。
Q3这个函数包含的主要代码结构是什么
A3.新的函数包含了一条switch语句和-一个跳转表
先看a的
在这里插入图片描述

调用了createdirectory,参数为c:\\temp,如果该目录不存在,则创建
b的:
在这里插入图片描述

调用copyfile,有两个参数,分别是源文件和目的文件。这里目的文件是c:\\tmep\\cc.exe,源文件是argv[0].也就是当前程序名。换句话说,这个case的功能就是讲lab06-03.exe复制为c:\\temp\\cc.exe
c的:
在这里插入图片描述

调用deletefile,参数是c:\\temp\\cc.exe,如果存在该文件则删除
d的:
在这里插入图片描述

调用regopenkeyex,regsetvalueex,用于在windows注册表设置一个值,以获得持久性运行。由字符串的信息可知,会将注册表键值software\\microsoft\\windows\\currentversion\\run\\malware的值设置为c:\\tmep\\cc.exe。这样如果之前经过了copyfile的操作,那么每次系统启动时恶意代码就会被运行起来。
e的:
在这里插入图片描述

186a0可以选中后,右键选择另外一种表示方法
在这里插入图片描述

是休息100000ms
default则是打印error…
Q4这个函数能够做什么
A4.新的函数可以打印出错信息、删除一个文件、创建-一个文件夹、设置一一个注 册表项的值、复制一个文件,或者休眠100秒等
结合以上的分析,就可以得出结论:首先检查是否存在可用的internet连接,如果不存在,程序终止,否则尝试下载一个网页,从<!—开头的html注释中解析出下一个字符,通过switch来决定下一步的行为。
Q6这个恶意代码的目的是什么
A6:该程序先检查是否存在有效的Internet 连接。如果找不到,程序直接终止。否则,该程序会尝试下载-一个网页,该网页包含了一段以<!–开头的HTML注释。该注释的第-一个字符被用于switch语句来决定程序在本地系统运行的下一步行为,包括是否删除一个文件、 创建一个目录、设置一个注册表run键、复制一个文件或者休眠100秒

参考:
1.《恶意代码分析实战》

以上是关于恶意代码分析实战6-3的主要内容,如果未能解决你的问题,请参考以下文章

恶意代码分析实战3-2

恶意代码分析实战11-1

恶意代码分析实战9-1

恶意代码分析实战14-02

恶意代码分析实战11-2

恶意代码分析实战15-3