恶意代码分析实战11-3

Posted Neil-Yale

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了恶意代码分析实战11-3相关的知识,希望对你有一定的参考价值。

本次实验我们将会分析lab11-03.exe文件。先来看看要求解答的问题
Q1.使用基础的静态分析过程,你可以发现什么有趣的线索?
Q2. 当运行这个恶意代码时,发生了什么?
Q3. Lab11-03.exe 如何安装Lab11-03.dll使其长期驻留?
Q4.这个恶意代码感染Windows系统的哪个文件?
Q5. Lab11-03.dll 做了什么?

先来看lab11-03.exe,在字符串窗口
在这里插入图片描述

看到inet_epar32.dll和net start cisvc。
Net start命令用于在windows上启动一个服务,有待进一步深入分析
再来看看lab11-03.dll
再起导入函数部分
在这里插入图片描述

看到键盘记录器常用的dll
在导出函数部分
在这里插入图片描述

看到一个似乎毫无意义的名字的导出函数
Q1.使用基础的静态分析过程,你可以发现什么有趣的线索?
A1.Labl1-03.exe包含字符串inet_ _epar32.d1l和net start cisvc,这意味着它可能启动CiSvc索引服务。包含字符串C:\\WIND0WS \\System32\\kernel64x.dll的Lab11-03.dl导入了API函数GetAsyncKeyState 和GetForegroundWindow, 这让我们怀疑它是一个记录到文件kernel64x.dll的击键记录器
接下来进行动态分析
首先使用process monitor.exe进行监控,设置好过滤的条件
在这里插入图片描述

双击Lab11-03.exe,查看
在这里插入图片描述

可以看到,会创建inet_epar32.dll
有了之前的经验,我们可以推测,这个dll和实验已经给出的dll会不会是一样的
可以通过md5进行比对
在给出的路径下找到该dll拖入进行比对
在这里插入图片描述

可以看到是一样的。说明恶意代码复制了lab11-03.dll到windows系统目录
另外在process monitor中还看到了与cisvc.exe相关的操作
在这里插入图片描述

恶意代码打开了cisvc.exe的句柄,但是没有任何writefile的操作
Q2.当运行这个恶意代码时,发生了什么?
A2.恶意代码首先复制Lab11-03.dll到Windows系统目录的inet_ epar32.dll中, 并有针对cisvc.exe的操作
接下来我们使用ida分析本次的exe程序
在这里插入图片描述

在main函数中一开始是复制lab11-03.dll到system32系统目录中的inet_epar32.dll。之后创建一个字符串c:\\windows\\system32\\cisvc.exe,将其作为参数传递给了sub_401070.之后是使用系统运行命令net start cisvc,来启动索引服务
跟入sub_401070
先查看其xrefs from的图
在这里插入图片描述

从上图可知调用了createfile,createfilemappingA和MapViewOfffile,将cisvc.exe映射到内存中。这些函数都有访问这个文件的权限
MapViewOfFile返回的内存映射视图的基地址(在下图中看到,被IDA标注为lpBaseAddrress)可以被读写
在这里插入图片描述

走到最下面
在这里插入图片描述

可以看到调用了UnmapViewOfFile,这样对这个文件做的任何修改都会被写入到硬盘。这样子的话就不需要WriteFile之类的函数了。

那我们来分析在调用该函数之前,进行的写入操作,如下所示
在这里插入图片描述

一开始文件的映射位置移入到EDI,用Var_28调整一些偏移量。之后将0x4e载入ECX。写入0x4e数量的DWORD.所以总字节数为0x4e*4=312字节。之后byte_409030被移入ESI,rep movsd复制byte_409030的数据到映射文件中。(这一部分的功能其实就是memcpy)
可以f5看看
在这里插入图片描述

跟入409030
在这里插入图片描述

这一段数据很有可能是shellcode
可以按c键将其强制转换为代码
在这里插入图片描述

转换后结果如下
在这里插入图片描述

可以看到jmp loc_409134
跟入
这里看到了字符串
在这里插入图片描述

这一个是释放的dll的路径
还有一个是之前静态分析时看到的导出函数
在这里插入图片描述

所以我们可以猜测,shellcode加载了这个dll,并调用了它的导出函数
我们来比较运行前后的cisvc.exe
先来看看感染后的在系统目录下的cisvc.exe
在这里插入图片描述

在看感染前的(可以在网上下载一个)
在这里插入图片描述

可以看到这两个文件的入口点不同。
也可以使用beyond compare进行比较
在这里插入图片描述

可以看到上图中红色标注的就是不一样的地方。左边是感染的文件,右边是原始的文件。左边比右边多出来一些数据,这些添加的数据其实就是前面在IDA中发现的那段shellcode
可以回到ida
将shellcode调出来
在这里插入图片描述

ok之后如图所示
在这里插入图片描述

一开始是5589e5
在这里插入图片描述

与这里的是对应的

接下来IDA分析被感染后的文件
在这里插入图片描述

一开始是走到loc_1001b2c
其中调用了sub_1001ad5
跟进,定位到关键函数
在这里插入图片描述

ida没分析0101b0a处的call调用的是什么,我们可以配合od进行分析
直接在od中跳到该位置
ctrl+g输入
在这里插入图片描述

在该位置下断点
在这里插入图片描述

然后直接运行
在这里插入图片描述

可以看到调用的是loadlibrary
在eax处右键-》数据窗口中跟随
在这里插入图片描述

可以知道其作用是将inet_epar32.dll载入内存
回到ida
在这里插入图片描述

看到接下来的call是01001b1b
同样在od下断点,直接运行
在这里插入图片描述

看到此时是调用GetProcAddress,其作用是获取导出函数的地址(在右下角可以看到导出函数)
返回值在eax,接下来将eax赋给ebp-8,之后是call ebp-8
那么也就是说下一个call就是在调用这个导出函数
Q4.这个恶意代码感染Windows系统的哪个文件?
A4.为加载inet_ epar32.dll, 恶意代码感染了cisvc.exe, 然后调用了inet_ epar32.dll 的导出函数zzz69806582.

继续单步,跟着jmp
在这里插入图片描述

我们来到了这里
在这里插入图片描述

这其实就是原始程序的入口点的位置
Q3. Lab11-03.exe 如何安装Lab11-03.dll使其长期驻留?
A3.恶意代码通过入口点重定向从而使它永久性地安装Lab11-03.dll。它通过重定向入口点,来运行加载这个DLL的shellcode
接下来使用ida分析本次的dll文件
直接分析导出函数
在这里插入图片描述

首先是通过CreateThread创建线程
跟踪StartAddress
双击跟入
在这里插入图片描述

首先是通过OpenMutex查看当前是否存在名为MZ的互斥量,如果已经存在,则会终止这个线程
如果不存在,则往右边走,调用CreateMutexA来创建一个名为MZ的互斥量
在这里插入图片描述

接着是调用CreateFile创建一个名为上图中字符串所示的文件
这个文件其实是用于写入日志的
获得kernel64.dll句柄之后
在这里插入图片描述

调用SetFilePointer
其dwMoveMethod值为2
也就是说令文件指针指向文件末尾
接着调用sub_10001380
跟入可以看到是一个循环结构
在这里插入图片描述

调用了sub_10001030,跟入
在这里插入图片描述

跟入sub_10001000
在这里插入图片描述

看到调用了GetForegroundWindow,其实是用于判断当前哪个程序正在输入
通过GetWindowsTextA获取当前的标题
esc返回上个函数
继续往下看
在这里插入图片描述

通过GetAsyncKeyState来判断一个按键是被按下还是弹起
这些函数的组合使用不难看出其实就是起到键盘记录器的功能
Q5.Lab11-03.dll 做了什么?
A5. Lab11-03.dll 是一个轮询的记录器,这在它的导出函数zzz69806582中得到实现
Q6.这个恶意代码将收集的数据存放在何处?
A6.恶意代码存储击键记录和窗体输入记录,其中击键记录被存入到C:\\Windows\\System32\\kernel64x.dll
那么总结一下流程。启动lab11-03.exe后,会修改cisvc.exe。植入shellcode,而shellcode会加载一个dll,并调用导出函数,导出函数起到的作用类似于键盘记录器。记录在kernel64x.dll中。

参考:
1.《恶意代码分析实战》

以上是关于恶意代码分析实战11-3的主要内容,如果未能解决你的问题,请参考以下文章

恶意代码分析实战3-2

恶意代码分析实战11-1

恶意代码分析实战9-1

恶意代码分析实战14-02

恶意代码分析实战11-2

恶意代码分析实战15-3