恶意代码分析实战Lab7

恶意代码分析实战Lab7

Lab7-1

静态分析

ADVAPI32.dll

image.png

WININET.dll

image.png

查看字符串

image.png

分析主函数

看两个关键参数(lpservicename和lpserviceproc)和两个关键函数(startservicectrldispatcher和sub_401040)

startservocectrldispacher函数将主线程链接到服务控制管理器,说明lab07-01要作为服务程序运行,服务名字是MalService

image.png
进入401040

首先是openmutex检查互斥量HGL345是否存在,存在这说明已经有一个恶意程序在运行了,所以就直接就结束程序,如果不存在则createmutex创建这个互斥量

openscmanager得到服务控制管理器句柄备用

getcurrentprocess得到进程句柄备用

getmodulefilename得到当前进程路径名备用

image.png

createservice把前面备用的都当参数传进去了创建了个malservice’服务,注意参数0x02(dwstarttype)是自启动

systemtimetofiletime将系统时间转换为文件格式备用,其中年设置为2100其他都是0(2010年1月1日00:00)然后他把这个时间传给了setwaitabletimer

createwaitabletimer创建同步定时器对象,对象句柄备用

最后waitforsingleobject等待定时器对象处于信号状态或超时间间隔结束(FFFFFFFFh这么长时间等到啥时候),只有等待成功返回0那么程序就接着做,否则跳转去sleep了(依照参数要等到2100年1月1日处于信号状态)

image.png

首先设置了14h大小的循环控制变量,然后createthread创建线程 14h次就也转去睡觉了.那么这些线程做啥:看startaddress

image.png

进入startaddress

就做一件事一直链接加载这个网址http://www.malwareanalysisbook.com

image.png

image.png

1.当计算机重启后,这个程序如何确保它继续运行(达到持久化驻留)?

在创建服务是否设置dwstarttype为2自启动,所以能确保他继续运行

2.为什么这个程序会使用一个互斥量?

确保只有一个实例在运行

3.可以用来检测这个程序的基于主机特征是什么?

主机特征:互斥量HGL345,服务MalService

4.检测这个恶意代码的基于网络特征是什么?

网络特征对http://www.malwareanalysisbook.com访问流量,使用Internet Explorer 8.0的用户代理

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

目的就是在2100年1月1日对上面那个网址发起DOS攻击

6.这个程序什么时候完成执行?

主线程会sleep 但是程序永不停止,其他线程一直对网站发起访问

Lab7-2

查看字符串

image.png

3个参数

首先oleinitialize初始化com

然后coinitialize获得com的对象,有了对象才能访问com,对象被放在变量ppv了备用,同样要调用成功才能接着玩,要不就结束

image.png

然后variantinit初始化一个变体pvag

然后SysAllocString,生成新字符串然后把那个网址拷贝进去

然后后面就一个call [edx+2ch],然后就是sysfreestring和oleuninitialize了这两个函数用脚趾头想都知道对应上面的sysallocstring和oleinitilize,所以分析了这些没发现他干了啥坏事,现在玄机只剩下这个[edx+2ch]了

image.png

溯本求源可以知道这个[edx+2ch]跟之前的ppv相关,就是ppv取值在加偏移2ch处的值,所以关键要知道ppv到底是什么那就要回到coinitialize的的调用看他的参数riid和rclsid,认真看书的同学会发现这两个数字串在书上出现过,iid就是IwebBrowser2,clsid就是internet explorer,偏移2ch处是navigate函数(参考课本7.4.6,如果遇到新的不认识的那只能搜索了),在分析一下这个函数调用就结束啦
20180517191559429.png

navigate作用是通过http post传输打开网址,可以看到好几个参数都是pvag之前初始化的,主要看flag和url和this,说白了就是打开那个网址

20180517194737586.png

1.这个程序如何完成持久化驻留?

程序就做了一次就结束了

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

目的是弹出那个网址,所以他算是个广告弹窗吧

3.这个程序什么时候完成执行?

显示广告后就结束了

Lab7-3

静态分析

lab7-3.dll

call指令集合

image.png

连接127.26.152.13的80端口

image.png

发送数据hello

image.png

recv接受数据,比5位是否位sleep,如果是则休眠60秒

image.png

当接收的是exec则创建进程执行命令

image.png

执行命令内容是str

image.png

然后是一个循环回去,说明程序不断接受数据

lab7-3.exe

有明显的复制文件操作

image.png

查看字符串

程序可能将kernel32.dll替换为kerne132.dll(1)

image.png

首先程序判断是否有两个参数,否就结束,是才继续做

赋值操作,将第二个参数传给eax,将那一串的字符传给esi

image.png

然后下面是个循环结构看源码,可以知道他在不断的比较eax和esi的每个字节是否相等,只有全等程序才能继续运行,否则结束,这里我们可以知道程序要运行需要一个参数WARNING_THIS_WILL_DESTROY_YOUR_MACHINE

image.png

参数对了之后要干嘛呢(分析时候要在流程图和源代码直接切换分析印证)

下面代码从loc_40148D到loc_401538之间的代码其实就做两件事分别打开lab04-03.dll和kernel32.dll文件并且把他们都映射到当前进程地址空间以能够对其数据随意操作,需要记住ebp存lab07-03.dll的基地址,esi存的是kernel32.dll被映射到进程的基地址

然后再来看loc_401538之后的一系列代码,这之后一长串的代码我们不可能一行行分析,这代价太大,我们先大致浏览一下知道他主要是对esi的一系列操作,还有reps,大部分是mov等指令我们先暂时推测这段代码应该是对kernel32的重写操作,然后先跳过这段

我们接着往下看,这是关闭了之前两个映射的句柄,然后复制Lab07-03.dll到kerne132.dll

image.png

再往下看调用4011E0函数 ,看看做什么,看了下流程图还挺复杂的,再看看调用那些函数,最主要的findfirstfile这些函数告诉我们,这段代码在找文件,那么就有几个疑问,他在找什么文件?他找到文件后做什么?(恶意代码他肯定不是找着玩,肯定是要干坏事,干坏事那很简单应该是要对文件进行什么修改,再联系一下之前的kerne132.dll我们能想到什么?他是不是要把.exe文件的输入表的kernel32.dll做修改成kerne132.dll,他们只有改一个字节就好,这一波联想是不是很有道理,那么我们看具体代码验证一下我们的猜想)
20180518134044502.png

看一下findfirstfile的第一个参数确定他要找什么文件,ebp参数也就是函数4011E0的第一个参数,回去看看对4011E0的调用,找的是c盘下所以的文件

进入sub_4011E0

ac是C:\

image.png

即查找c盘下所有文件

image.png

继续分析关键地方来验证我们的猜想我们看到一个字符串比较函数,相等才调用sub_4010A0(等下我们会知道他是做什么的)

stricmp(不区分大小写比较)的两个参数藏的比较上面往上面翻翻就能找到两个push,一个是.exe一个是str1我们推测这应该是看找到的文件是不是.exe文件是才调用sub_4010A0继续操作

image.png

如果找到exe文件则调用4010a0

image.png

进入函数

mapviewoffile用于将文件映射到内存

image.png

IsBadReadPtr检查内存是否有权限访问指定的内存块

image.png

str1和kernel32.dll比较

image.png

repne scasb用于求字符串长度

rep movsd将esi复制到edi

即将dword_403010内容替换kernel32.dll

image.png

查看dword_403010内容

a转为字符串

image.png

动态分析

设置过滤后运行程序

image.png

只监控文件,并没有什么信息,程序运行需要参数

image.png

cmd输入参数运行

image.png

image.png

C:\WINDOWS\system32

两个文件

image.png

查看c盘下的exe文件的导入表

已经被修改为kernel132.dll

image.png

1.这个程序如何完成持久化驻留,来确保在计算机被重启后它能继续运行?

运行lab07-03.exe会在c盘下找kernel32.dll文件替换为lab07-03.dll

2.这个恶意代码的两个明显的基于主机特征是什么?

连接127.26.152.13的80端口

image.png

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

替换程序,执行命令

4.一旦这个恶意代码被安装,你如何移除它?

c盘下所有exe文件都别感染,需要写脚本将exe文件中的导入表中的kerne132.dll替换为正常的

0%