恶意代码分析实战6-1
Posted Neil-Yale
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了恶意代码分析实战6-1相关的知识,希望对你有一定的参考价值。
本次实验我们将会分析lab06-01.exe,lab06-04.exe两个文件。先来看看lab06-01.exe要求解答的问题
Q1由main函数调用的唯一子过程中发现的主要代码结构是什么
Q2位于0x40105f的子过程是什么
Q3这个程度的目的是什么
尝试运行会发现程序一闪而过
载入peview分析,查看其导入表
可以看到WININET.dll,其中其中的InternetGetConnectState函数。利用Windows Internet(WinINet)API,应用程序可以使用http协议访问internet资源
文档在这:https://docs.microsoft.com/en-us/windows/win32/api/wininet/nf-wininet-internetgetconnectedstate
从文档中可知,它会检查本地系统的internet连接状态。如果有网络连接则返回true否则返回false
看字符串部分
有error,success等
初步猜测这个程序就是用来判断网络状况
载入ida分析
main函数唯一调用的只有sub_401000
Q1由main函数调用的唯一子过程中发现的主要代码结构是什么
A1 主要代码结构是位于0x401000处的if语句。
双击跟进去
可以看到这就是典型的if结构,如果网络连接则走左边的分支,无连接则走右边的分支。
在判断网络状态的函数返回后,cmp指令对保存了返回结果的eax寄存器与0进行比较,接着jz指令控制执行流
假设网络有连接,返回1,则eax为1,ZF零标志位被清除,jz会往左边走;反之往右边走。
注意到不论往左还是往右
都会调用sub_40105f
根据调用之前被压到栈上的参数,也就是一段格式化的字符串,并且字符串结尾是\\n这个换行符,可知,这个函数起到的就是printf的作用,负责打印信息
Q2位于0x40105f的子过程是什么
A2.位于0x40105F处的子例程是printf
接着
左侧分支的话,eax被赋1,右侧分支则通过异或eax赋0
然后返回
可见这个函数的作用就是检查是否存在网络连接,存在则打印success,返回1,不存在则打印error,返回0
Q3这个程度的目的是什么
A 3.该程序检查是否有一个可用的Internet 连接。如果找到可用连接,就打印“Success: Internet Connection”,否则,打印"Error 1.1: No Internet"。恶意代码在连接Internet之前,可以使用该程序来检查是否存在-一个连接。
。
接下来分析lab06-04.exe
Q1 本文件中的main调用有什么特点
Q2什么新的代码结构已经被添加到main中
Q3这个实验的解析html的函数和前面实验中的那些有什么区别
Q4这个程序会运行多久
Q5这个恶意代码中有什么新的基于网络的迹象吗
Q6这个恶意代码的目的是什么
首先peview看看字符串
注意到这里ie7.50后面有%d,这说明这个user-agent是会动态生成的。
接下来进行IDA载入后的分析
大致看了一下,调用函数大部分都是相同的,不展开分析了,可以直接回答第一题
Q1 本文件中的main调用有什么特点
A1.在0x401000处的函数是检查Internet连接的方法,0x401040是解析HTML的方法,0x4012B5是printf,0x401150 是switch语句
但是我们在graph view里注意到
这里有一条向上回溯的线
这明显是一个循环
5a0h是10进制的1440
可以看到局部变量var_c用于循环计数。Mov [ebp+var_c],0将计数器初始化为0
通过左下角箭头所指部分,每次循环+1
在右上角箭头所指部分进行检查,将其值与1440比较,小于1440继续循环。
注意到这里调用了sleep,参数为04a60h,10进制为60000ms,即在自增操作前会先休眠60s,即1分钟
由于循环1440次,即整个过程会持续1440分钟,也就是24小时
Q2什么新的代码结构已经被添加到main中
A2.在main函数中加了一个for循环语句
Q4这个程序会运行多久
A4.该程序一共运行1440分钟(24小时)
接下来分析前面的%d所在的部分
这里arg0作为唯一的参数,由于只有main调用,所以这个参数是main传过来的
回到main中调用sub_401040
可以看到main传过来的是var_c
先分析sprintf之前的
有三个push,分别是指针、字符串、参数,对应着分别是目标地址,一个格式化字符串及arg0,之后
sprint创建一个字符串,将其存储在目的缓冲区,即被标记为szAgent的局部变量中。之后szAgent被传给InternetOpenA,即,user-agent会随着计算机递增而改变。
Q3这个实验的解析HTML的函数和前面实验中的那些有什么区别
A3.0x401040 处的函数现在会使用一个参数,使用格式化字符串Internet Explorer 7. 50/ pma%d来调用sprintf函数,从而使用传入的参数创建用于HTTP通信的User-Agent字段。
Q5这个恶意代码中有什么新的基于网络的迹象吗
A5.是的,使用了一个新的User-Agent。 它的形式是Internet Explorer 7.50/ pma%d, 其中%d是程序已经运行的分钟数
Q6这个恶意代码的目的是什么
A6.首先,程序会检查是否有可用的Internet 连接。如果找不到,程序就终止运行。否则,程序使用一个独特的User-Agent 来下载-一个网页, 这个User-Agent包含了一个计数器,用于说明程序已经运行了多少分钟。下载下来的网页中包含了以<!–开头的HTML注释代码,这段注释代码中接下来的第- 一个字符被用于一个switch语句,以决定接下来在本地系统的行为。其中包含了一些硬编码的行为,包括删除-一个文件、创建-一个目录、设置一个注册表run键、复制一个文件、休眠100秒等。该程序会运行24小时后终止。
。
参考:
1.《恶意代码分析实战》
以上是关于恶意代码分析实战6-1的主要内容,如果未能解决你的问题,请参考以下文章