恶意代码分析实战6-3

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

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

可以看到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处的函数则是本实验中新出现的。
恶意代码分析实战6-3_第3张图片


我们看一下call时传入的参数
跟进去
恶意代码分析实战6-3_第4张图片

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

从下图可以看到两个参数分别保存在eax,ecx
恶意代码分析实战6-3_第5张图片

先看eax,可以看到eax实际由argv决定
恶意代码分析实战6-3_第6张图片

可以看到
恶意代码分析实战6-3_第7张图片

argv实际上就是argv【0】,是当前运行程序的名字,即lab06-03.exe
再来看看ecx
可以看到ecx实际由var_8赋予
恶意代码分析实战6-3_第8张图片

往上看看var_8
恶意代码分析实战6-3_第9张图片

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

接下来跟入sub_401130
恶意代码分析实战6-3_第10张图片

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,如果不是其中的话则跳到右侧
恶意代码分析实战6-3_第11张图片

如果是的话则走左侧,在根据具体情况呈switch结构
恶意代码分析实战6-3_第12张图片

这里箭头指向的指令:edx被乘以4,这是因为跳转表是一组指向不同执行路径的内存地址,而每个地址的大小为4字节
下图中可以看到跳转表有5条记录
恶意代码分析实战6-3_第13张图片

编译器在为switch语句生成汇编代码时,经常使用这样的跳转表
恶意代码分析实战6-3_第14张图片

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

调用了createdirectory,参数为c:\temp,如果该目录不存在,则创建
b的:
恶意代码分析实战6-3_第16张图片

调用copyfile,有两个参数,分别是源文件和目的文件。这里目的文件是c:\tmep\cc.exe,源文件是argv[0].也就是当前程序名。换句话说,这个case的功能就是讲lab06-03.exe复制为c:\temp\cc.exe
c的:
恶意代码分析实战6-3_第17张图片

调用deletefile,参数是c:\temp\cc.exe,如果存在该文件则删除
d的:
恶意代码分析实战6-3_第18张图片

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

186a0可以选中后,右键选择另外一种表示方法
恶意代码分析实战6-3_第20张图片

是休息100000ms
default则是打印error…
Q4这个函数能够做什么
A4.新的函数可以打印出错信息、删除一个文件、创建-一个文件夹、设置一一个注 册表项的值、复制一个文件,或者休眠100秒等
结合以上的分析,就可以得出结论:首先检查是否存在可用的internet连接,如果不存在,程序终止,否则尝试下载一个网页,从 Q6这个恶意代码的目的是什么
A6:该程序先检查是否存在有效的Internet 连接。如果找不到,程序直接终止。否则,该程序会尝试下载-一个网页,该网页包含了一段以
参考:
1.《恶意代码分析实战》

你可能感兴趣的:(malware)