恶意代码分析实战 17 C++代码分析

17.1 Lab20-01

问题

  1. 在0x401040处的函数采用了什么参数?

恶意代码分析实战 17 C++代码分析_第1张图片
首先,以①处的一个对new操作符的调用开始,这表明它正在创建一个对象。一个对象的引用会在EAX寄存器中返回最终存储在②处的var_8变量和③处的var_4变量中。var_4变量在④处被移到了ECX寄存器中,这预示着它将被作为函数调用的this指针传递进去。指向URL http://www.praticalmalwareanalysis.com/的一个指针,随后被存储在对象的开头位置,紧接着调用了sub_401040函数。
恶意代码分析实战 17 C++代码分析_第2张图片
在上面的代码中,我们看到ECX中的this指针在①处被访问并存储在var_4变量中。代码的其余部分是参数被压栈,并调用URLDownloadToFileA函数的过程。为了获取将要使用的URL参数值,this指针在②处被读取,随后在③处访问了存储在对象中的第一个数据元素,并将其压入④处的栈中。
回想一下,在main函数中,对象中存储的第一个元素是URL字符串htp:/mwpracticalmalwareanabysiscom/cp p.hml,最后,main函数返回,程序执行完毕。
在0x401040地址处的函数并不带任何参数,但它在ECX中传递了一个对象索引,含义为this指针。

  1. 哪个URL被用来调用URLDownloadToFile?

对URLDownloadToFile函数的调用使用http://wwwpracticalmalwareanalysis.com/cpp.html作为URL参数值。

  1. 这个程序做了什么事情?

这个程序从远程服务器下载文件,并把它存储到本地系统的C:\tempdownload.exe中。

17.2 Lab20-02

问题

  1. 在这个程序中,你可以从有趣的字符串中了解到什么?

使用strings程序检查一下文件。
恶意代码分析实战 17 C++代码分析_第3张图片
可以看到两个可疑的字符串,这意味着这个程序可能是FTP客户端软件。

  1. 导入函数表告诉你关于这个程序的什么信息?

使用Dependency Walker查看程序。
恶意代码分析实战 17 C++代码分析_第4张图片
恶意代码分析实战 17 C++代码分析_第5张图片
这一程序导入了函数FindFirstFile和FindNextFile,这表明这个程序很可能会搜索受害主机的文件系统。而导入了函数Internetopen、Internetconnect、FtpsetcurrentDirectory与FtpPutFile,这告诉我们这一恶意代码会上传受害主机的文件到一个远程FTP服务器。

  1. 在0x4011D9处创建对象的目的是什么?它有什么虚函数吗?

恶意代码分析实战 17 C++代码分析_第6张图片
首先调用了WAStartup,调用了网络函数。
然后使用gethosthome函数获取主机名,最后将一个字符串压栈,然后调用了sub_401000.
恶意代码分析实战 17 C++代码分析_第7张图片
这个蓝色的线说明该程序有循环操作,然后我们可以在循环的开始发现调用了
恶意代码分析实战 17 C++代码分析_第8张图片
在结束调用了
恶意代码分析实战 17 C++代码分析_第9张图片
结合压栈的字符串,我们可以推测,程序进行了遍历文件的操作。
在循环体中,我们也看到了很多字符串操作函数(strcat、strlen、strncmp等等),仔细分析将会发现程序到底在搜索什么。其中一个strncmp函数调用将操纵字符串与.doc进行比较,如果文件名以.doc后结尾,下图代码将会被执行。
恶意代码分析实战 17 C++代码分析_第10张图片
我们知道off_496DC处是一个虚函数表,因为在通过new操作符创建对象之后它马上被写入对象中,如果我们仔细查看off_4969DC的偏移位置,可以发现它保存了一个指向sub_401449地址的函数指针。我们将这一函数标识为docobject_Func1,在这个函数被调用时再来分析它。
在0x004011D9地址创建的对象是一个.doc文件。这个对象在偏移0x00401440地址处有一个虚函数,它将把文件上传至远程FTP服务器

  1. 哪个函数可能被在0x401349处的calll[edx]指令调用?

分析代码可知,这段代码先判断是不是doc文件,在判断是不是pdf文件,最后都会到如下代码处。
恶意代码分析实战 17 C++代码分析_第11张图片
可能调用的就是处理doc、pdf或者什么也不做的函数。
恶意代码分析实战 17 C++代码分析_第12张图片
恶意代码分析实战 17 C++代码分析_第13张图片
恶意代码分析实战 17 C++代码分析_第14张图片
在0x00401349处的虚函数调用将调用在0x00401380、0x00401440或0x00401370处的一个虚拟函数。

  1. 如何简易地搭建这个恶意代码所预料的服务器,不用连接到互联网,就能完整地分析这个恶意代码呢?

首先,安转apateDNS和MINIftp,然后安装Microsoft .NET Runtime >= 2.0。

https://www.microsoft.com/zh-CN/download/confirmation.aspx?id=16614

启动MINIftp。
恶意代码分析实战 17 C++代码分析_第15张图片
打开ApateDNS设置返回到本地。
恶意代码分析实战 17 C++代码分析_第16张图片
在C盘根目录下,放一些doc和pdf文件,然后建立doc和pdf文件夹。
恶意代码分析实战 17 C++代码分析_第17张图片
运行恶意代码。
恶意代码分析实战 17 C++代码分析_第18张图片
恶意代码分析实战 17 C++代码分析_第19张图片
这一恶意代码会使用高层API函数连接到一个远程的FTP服务器,我们可以下载并建立一个本地FTP服务器,并将DNS请求重定向至这一服务器,以充分分析该恶意代码

  1. 这个程序的目的是什么?

这个程序会搜索受害主机的硬盘驱动器,并上传所有.doc和.pdr后缓的文件到远程FTP服务器上。

  1. 在这个程序中实现虚函数调用的目的是什么?

实现虚拟函数调用的目的是让代码对不同文件类型执行不同的上传函数。

17.3 Lab20-03

打开图形化界面的步骤。
恶意代码分析实战 17 C++代码分析_第20张图片
恶意代码分析实战 17 C++代码分析_第21张图片
问题

  1. 你可以在这个程序中得到什么有意思的字符串?

恶意代码分析实战 17 C++代码分析_第22张图片
几个看起来像是错误消息的字符串(Error sending Http post,Error sending Http get Errorr sending response,等等)告诉我们,这个程序将会使用HTTP GET和POST命令。我们也看到HTML路径(/srv.html,/put.html等),这暗示着这个恶意代码尝试打开一些文件。

  1. 导入函数表告诉你关于这个程序的什么信息?

恶意代码分析实战 17 C++代码分析_第23张图片
几个wS2_32中的导入函数告诉我们,这个程序会在网络上进行通信。Createprocess导入函表明,这个程序可能会启动另一个进程。

  1. 在0x4036F0处,存在一个以字符串config error作为输入的函数调用,其后跟着一些指令,然后是一个对cxxThrowException的调用。除这个字符串外,这个函数还用到其他参数了吗?这个函数返回了什么?从这个函数被使用的上下文中,你可以得到哪些信息?

恶意代码分析实战 17 C++代码分析_第24张图片
在0x4036F0地址调用的函数除了一个字符串外,不带任何参数,但ECX寄存器中包含了对象的this指针。我们知道包含这一函数的对象是一个异常对象,因为这个对象在后面被用于CxxThrowException函数的一个参数。通过上下文环境我们可以得知0x4036F0地址的函数初始化了一个异常对象,而异常对象中存储了一个字符串来描述到底引发了何种异常。

  1. 在0x4025C8处的switch表中的6个项都做了什么?

恶意代码分析实战 17 C++代码分析_第25张图片

  • case_1调用delete运算符,然后立即返回而实际上不做任何事情。我们将这个选择重命名为case_doNothing

恶意代码分析实战 17 C++代码分析_第26张图片

  • case_2调用atoi函数,将一个字符串转换为数字,调用sleep函数后便返回。我们将它重命名为case_sleep

恶意代码分析实战 17 C++代码分析_第27张图片

  • case_3做了一次字符串解析,然后调用了createprocess函数。我们将它重命名为case ExecuteCommand

恶意代码分析实战 17 C++代码分析_第28张图片

  • case_4调用了createFile函数,并将从命令和控制服务器获取到的HTTP响应写到了磁盘上,我们将它重命名为casedownloadFile。

恶意代码分析实战 17 C++代码分析_第29张图片

  • case_5也调用CreateFile函数,但它使用HTTPPOST命令, 将从文件读取的数据上传至远程服务器。我们将其重命名为case_uploadFile。

恶意代码分析实战 17 C++代码分析_第30张图片

  • case_6调用了GetComputerName、GetUserName、GetVersionEx和GetDefaultLCID函数, 这些函数起对受害者主机进行调查,然后将结果发送回命令和控制服务器。

恶意代码分析实战 17 C++代码分析_第31张图片
Switch表的6个条目实现了6种不同的后门命令:NOOP、睡觉、执行一个程序、下载文件、上传一个文件,以及调查受害主机。

  1. 这个程序的目的是什么?

该程序实现了一个后门,它使用HTTP作为命令通道,并具备启动程序、下载或上传文件,以及收集受害主机信息的能力。

你可能感兴趣的:(恶意代码分析实战,c++,java,开发语言,windows,恶意代码分析)