Lab6-1
在这个实验中,你将分析在文件Lab06-01.exe中发现的恶意代码。
问题
1.由main函数调用的唯一子过程中发现的主要代码结构是什么?
首先进行静态分析。
通过上图标记的几个函数发现,该程序可能会联网。
接下来进行动态分析。
运行发现打印输出了"Internet Connection"字样,并没有什么有意思的东西。
将该程序加载到IDA Pro中进行分析
函数main的唯一调用是函数 sub_401000
,进入查看如下图:
该函数调用了InterGetConnectedState
,用于测试网络连接的状态,当存在可用连接时,返回1,否则返回0。在函数sub_401000中,将InterGetConnectedState
的返回结果与0进行比较,如果相等,说明无可用连接,否则有可用连接。因此,main的唯一调用采用的是if结构。
2.位于0x40105F的子过程是什么?
对于初学者来讲,函数0x40105F
处的函数里面过于混乱,我们可以通过简单的分析在函数调用前压入栈的参数和函数的返回值来大致猜测该函数的功能。
不难发现,该函数在两处调用前都分别将字符串压入栈,且字符串的结尾都是"\n",我们可以猜测该函数的功能就是 printf
打印。
3.这个程序的目的是什么?
通过前面的分析我们可以得出结论:该程序的目的是检查是否存在一个可用的Internet连接。
Lab 6-2
分析在文件Lab06-02.exe中发现的恶意代码。
问题
1.main函数调用的第一个子过程执行了什么操作?
先进行静态分析
发现该程序调用了打开URL的函数,可以猜测该程序也会进行相应的网络连接。
查看字符串发现该程序的功能可能和Lab06-01.exe功能相似,但是多了一个URL
尝试运行改程序,发现该程序对某个网站尝试进行了连接
通过ApateDNS我们可以了解到该程序试图连接到下图中国第二个网址
接下来将该文件加载到IDA Pro中进行分析
进入main调用的第一个子过程
发现了和Lab06-01.exe中相同的函数,基本可以断定,该子过程的功能就是判断是否存在可用的链接了。
2.位于0x40117F的子过程是什么?
和Lab06-01.exe类似,该子过程的功能是printf
打印。
3.被main函数调用的第二个子过程做了什么?
被main函数调用的第二个子过程是sub_401040,该子过程调用了如下函数:
InternetOpenA
:用于初始化WinNet库,并设置用于HTTP通信的User-Agent字段
InternetOpenUrlA
:使用一个完整的FTP或者HTTP的URL打开一个句柄。
InternetReadFile
:从InternetOpenUrlA
打开的句柄中读取数据
InternetCloseHandle
:用于关闭已经打开文件的句柄。
从以上函数可以大致猜测该子过程的作用是连接到一个网址:www.practicalmaiwareanalysis.com
4.在这个子过程中使用了什么类型的代码结构?
使用了分支结构,将InternetReadFile返回的数据填充到一个字符数组中,然后逐个字节进行解析
5.在这个程序中有任何基于网络的指示吗?
有两条网络特征:
①Internet Explorer 7.5/pma
作为User-Agent字段
②http://www.practicalwareanalysis.com/cc.html
下载了HTML页面
6.这个恶意代码的目的是什么?
该程序首先判断是否存在一个可用的网络连接,如果存在,就利用一个独特的用户代理尝试下载一个网页,如果不存在可用连接,则终止运行。
Lab 6-3
在这个实验中,我们会分析在文件Lab06-03.exe中发现的恶意代码。
首先进行静态分析:
PEid发现该文件并没有加壳
导入函数中发现了创建目录函数和删除文件函数
WinNet.dll中标注(上图)的函数说明该文件可能与Lab06-02.exe具有类似的功能
上图为查看字符串的结果,发现了cc.html的网址和写入文件的函数
至此我们不难推断出该文件的功能与Lab06-02.exe功能相似:从下载上述网页并保存在本地文件中,其中可能会涉及到目录的相关操作
问题回答:
1.比较在main函数与实验6-2的main函数的调用。从main中调用的新的函数是什么?
经过比较发现sub_401130函数是多出来的一个
2.这个新的函数使用的参数是什么?
这个函数共有两个参数,第一个为eax的内容,注释告诉我们是程序名,第二是ecx(cl)的内容,也就是var_8,var_8通过al设置,al又是sub_401040函数的返回结果,该函数返回的是从http网页上下载数据的结果
3.这个函数的主要代码结构是什么
通过注释,switch,case0,case1等字符可以大致判断该代码的结构是switch分支结构
该代码中,将var_8的值,也就是解析html文件的结果减去61h(a),再与0,1,2,3,4五个数字比较,分别跳转到响应的代码区,如果不是这五个数字则执行default部分
4.这个函数能够做什么?
case0:
这个分支的作用是创建一个目录:C:\\Temp
case1:
这个分支的作用是文件拷贝:即将Lab06-03.exe
这个文件拷贝到C:\\Temp\\cc.exe
这个地址
case2:
该分支的功能是删除一个文件,文件的地址保存在Data中,双击Data:发现文件的路径为:C:\\Temp\cc.exe
,所以这个分支的功能是删除C:\\Temp\\cc.exe
文件
case3:
这个分支的功能是将C:\Temp\cc.exe
这个文件写入自启动注册表中
case4:
这个分支的功能是睡眠100秒
default case:
这个分支的功能是执行函数sub_401271
,由上面分析我们已经知道,函数sub_401271
的功能就是printf功能,打印的内容存在aError32NotAVal字符串中,双击我们就可以发现字符串的内容了
5.在这个恶意代码中有什么本地特征吗?
由问题4我们可以知道,这个恶意代码有两个本地特征,第一个是在case3中出现的自启动注册表:Software\\Microsoft\\Windows\\CurrenVersion\\Run
另一个就是文件拷贝的目录:C:\\Temp\\cc.exe
6.这个恶意代码的目的是什么?
这个恶意程序的功能如下:
①判断是否存在一个可用的网络连接,如果不存在,返回错误信息。
②如果存在网络连接,从给定网址中下载一个网页,并根据不同的返回信息执行响应的分支功能。
③分支的功能包括:创建目录,拷贝文件,删除文件,添加自启动,睡眠100秒,返回响应的错误信息
Lab 6-4
在这个实验中,我们会分析在文件Lab06-04.exe中发现的恶意代码。
1.在实验6-3和6-4的main函数中的调用之间的区别是什么?
由函数总览我们可以发现main函数中多了循环结构
2.什么新的代码结构已经被添加到main中?
循环结构
3.这个实验的解析HTML的函数和前面实验中的那些有什么区别?
首先,这个函数和Lab06-03.exe相比多了一个参数,在main函数中不难发现,解析HTML函数的唯一一个参数就是main函数中循环的计数器。在这个函数中,计数器和一个字符串:Internet Explorer 7.50/pma%d
组合在一起存在缓冲区里,作为下一个函数InternetOpenA
函数的参数,也就是说,这个函数利用了动态生成的User-Agent来打开一个网络连接。
4.这个程序会运行多久?(假设它已经连接到互联网。)
由上图可知,var_C即循环的计数器初值为0,当小于等于5A0h(换为十进制:7440)时结束循环
在循环体中调用了sleep函数,函数的参数为60000毫秒,也就是一分钟。综上所述,该程序共执行1440次,每次耗时一分钟,也就是1440分钟即24小时。
5.在这个恶意代码中有什么新的基于网络的迹象吗?
这个恶意代码基于网络的迹象有两个,分别是动态生成的User-Agent和下载并解析的URL
6.这个恶意代码的目的是什么?
这个恶意代码首先会判断是否存在一个可用的网络连接,如果存在,则对如下操作进行循环:
尝试下载指定的网页,并对第五个字符进行解析,根据解析的结果分别进行不同的文件操作
共循环1440次,并在24小时后结束程序。