恶意代码分析实战 Lab7

lab07-01

1惯例静态分析一波结论::无加密,输入表两个关键dll,显示程序会有网络和注册表相关操作(ADVAPI32.dll和WININET.dll),kernel.dll导入了互斥量和线程相关操作,认识的dll和函数也就这些了

恶意代码分析实战 Lab7

再看看字符串

恶意代码分析实战 Lab7

分析主函数:看两个关键参数(lpservicename和lpserviceproc)和两个关键函数(startservicectrldispatcher和sub_401040),startservocectrldispacher函数将主线程链接到服务控制管理器,说明lab07-01要作为服务程序运行,服务名字是MalService,开始运行地址是sub_401040,所以分析一下sub_401040就可以知道他在干嘛.

恶意代码分析实战 Lab7

双击跳转到401040处,看程序流程图分析一波:

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

然后是打开openscmanager得到服务控制管理器句柄备用

然后getcurrentprocess得到进程句柄备用

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

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

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

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

然后setwaitabletimer**(使用前两个备用作为关键参数)

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

那么成功等待之后做啥呢:

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

恶意代码分析实战 Lab7

恶意代码分析实战 Lab7

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

恶意代码分析实战 Lab7


程序分析结束,回答问题

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

2确保只有一个实例在运行

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

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

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

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


lab07-02

无加密,输入表:com相关库的导入,字符串也就一个网址有用信息

恶意代码分析实战 Lab7恶意代码分析实战 Lab7

分析mian函数

首先oleinitialize初始化com(都是套路别问为啥),调用失败就没得玩了成功才有然后

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

然后variantinit初始化一个变体pvag

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

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

恶意代码分析实战 Lab7

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

恶意代码分析实战 Lab7

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

恶意代码分析实战 Lab7

好了分析结束

1程序就做了一次就结束了

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

3显示广告后就结束了

lab07-03

1看看函数lab07-03.exe导入的都是一些文件操作函数,看不出啥,再看看字符串,猫腻啊,这明显是要替换kernel32.dll为kerne132.dll l变为1了看清楚,再进一步假设,这个新的kerne132.dll就是lab07-03.dll有不有,那么lab07-03.exe的作用很可能就是将lab07-03.dll复制成kerne132.dll来替换系统原来的kernel32.dll了(大胆假设很重要,有一个想法是比较好的,之后我们就只是需要验证我们想法即可,而不是毫无头绪的就进去分析代码) 还有.exe和C:\\需要注意,他可能还做了其他的事,暂时的推测就这样了

恶意代码分析实战 Lab7

恶意代码分析实战 Lab7

IDApro打开看一下流程图发现比我们之前接触的要庞大许多,之前几次的代码分析都尽量讲到很细节,但是当代码量增加的时候我们就不能着眼于细节,而是整体上把握程序的结构,整体上了解程序都主要做了啥事

程序很大,我们需要耐心慢慢来:

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

恶意代码分析实战 Lab7

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

恶意代码分析实战 Lab7

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

恶意代码分析实战 Lab7

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

下面一系列代码从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,

恶意代码分析实战 Lab7

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

恶意代码分析实战 Lab7

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

恶意代码分析实战 Lab7恶意代码分析实战 Lab7

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

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

恶意代码分析实战 Lab7恶意代码分析实战 Lab7

再看看4010A0(IsBadReadPtr检查内存时候有权访问),都是一些熟悉的函数调用告诉我们,函数将这个文件映射到内存,然后他在找kernel32.dll,找到了他就把403010写回去,403010是如图,好了,到这里差不多验证了我们之前的猜想,程序lab07-03.exe就是把原来的lab07-03.dll伪装成kerne132.dll,然后修改c盘下的所以.exe文件中的kernel32.dll为kerne132.dll

恶意代码分析实战 Lab7

恶意代码分析实战 Lab7

恶意代码分析实战 Lab7

注意看ebp,第一次是esi+3ch地方的值付给他,这是个得到PE头偏移值,后面加上esi基地址后ebp就是指向PE头(也就是文件里面5045"PE"这个地方)然后再加上D0h这就到了Bound import table处然后下面都把他的偏移和大小设为0了,这是为了让程序不会再次导入kernel32.dll而做的操作.

恶意代码分析实战 Lab7

恶意代码分析实战 Lab7


现在我们再来看看lab07-03.dll在干嘛

导入了WS2_32.dll显然有网络相关操作,再看看字符串,ip很重要,

恶意代码分析实战 Lab7恶意代码分析实战 Lab7

第一个函数被标识为_alloca_probe,分配栈

后面是几个互斥量操作也很熟悉了互斥量"SADFHUHF"可以作为主机特征

这几个是在连接ip地址为127.26.152.13的主机

恶意代码分析实战 Lab7

然后程序发送了hello,接着等待接受对面的信息,判断接收到的信息是不是sleep命令,是就睡觉不是就看看发过来的信息是不是exec命令,是就执行创建进程操作,然后再发送hello,等待不断执行这个操作,知道收到q才结束程序

恶意代码分析实战 Lab7

因为第一个参数为0,所以commandline是要打开程序绝对路径,他由远端谁exec命令一起发送过来

恶意代码分析实战 Lab7

123问题在前面分析过程都有提到

第四个问题,这么移除恶意代码,最好的是有备份,恢复一下就好,再一个是写个程序再把被修改的文件都该回去,其实可以对原恶意代码进行修改然后dump出来成为一个新exe来对所以exe文件的kerne132.dll改回kernel32.dll,这是比较容易实现的可以用ollydbg修改,不建议说把kernel32.dll改成kern132.dll,治标不治本,如果出现新的exe文件怎么办呢是吧?所以不推荐

分析到此结束.