pizzabamboo 发表于 2022-6-10 11:43

恶意代码分析Lab 11-3

本帖最后由 pizzabamboo 于 2022-6-10 12:51 编辑

Lab 11-3分析恶意代码Lab11-03.exe和Lab11-03.dll。确保这两个文件在分析时位于同一个目录中。
问题
1. 使用基础的静态分析过程,你可以发现什么有趣的线索?
我们先来看exe的导入表有些啥:

放到IDA里面再看看,在这里我们能够看到C : \WINDOwS\1System32\ linet_epar32.dll还有Lab11-03.dll这俩dll,cisvc.exe这个exe程序以及net start cisvc这条命令。

dll接下来再看,我们先了解一下cisvc.exe是个啥东西:

似乎不是什么不好的东西,而net start cisvc则是启动这个服务的命令,于是我们转移目标,看Lab11-03.dll:

我们能发现,这里的GetForegroundWindow;GetiindowTextA;GetAsyncKeyState三个导入函数。初步推断是要做键盘记录。再看看导出函数。

这个导出函数暂时也不知道是干什么的。我们再到IDA里面看看,这里好像创建了个kernel64x.dll的文件,其他还有创建文件,创建互斥体,创建线程什么的,我们就先不管。

Lab11-03.exe包含字符串inet_epar32.dll和 net start cisvc,这意味着它可能启动CiSvc索引服务。包含字符串C:\WINDOWS\System32\kernel64x.dll的Lab11-03.dl导入了API函数GetAsyncKeyState和 GetForegroundwindow,这让我们怀疑它是一个记录到文件kernel64x.dll的击键记录器。

2. 当运行这个恶意代码时,发生了什么?
我们用procmon来监测一下,过滤一下:

我们看到以下这些行为


可以看到,这里会创建inet_epar32.dll,还有Lab11-03.dll的一堆操作。我们打开创建的inet_epar32.dll看看)。进行MD5比对能够发现,inet_epar32.dll和Lab11-03.dll是相同的文件,所以我们可以知道恶意代码复制了lab11-03.dll到windows系统目录。

监控到的还有cisvc.exe的创建,不过并没有其他的相关操作。
恶意代码首先复制Lab11-03.dll到Windows系统目录的inet_ epar32.dll中, 并有针对cisvc.exe的操作

3. Lab11-03.exe 如何安装Lab11-03.dll使其长期驻留?
我们用IDA调试一下Lab11-03.exe

在main函数中一开始是复制lab11-03.dll到system32系统目录中的inet_epar32.dll。之后创建一个字符c:\windows\system32\cisvc.exe,将其作为参数传递给了sub_401070.之后是使用系统运行命令net start cisvc,来启动索引服务。
接下来我们看看他的子函数

从上图可知调用了createfile(创建文件),createfilemappingA(创建一个文件映射内核对象)和MapViewOfFile(将一个文件映射对象映射到当前应用程序的地址空间),将cisvc.exe映射到内存中。这些函数都有访问这个文件的权限。MapViewOfFile返回的内存映射视图的基地址(lpBaseAddrress)可以被读写

我们接着往下看

可以看到调用了UnmapViewOfFile(停止当前程序的一个内存映射),这样对这个文件做的任何修改都会被写入到硬盘。
同时我们顺着绿色那条线看下来(上三图的下面那张),查看在调用该函数sub_401070之前的操作。能够发现其实是进行了写入操作。一开始文件的映射位置移入到EDI,用Var_28调整一些偏移量。rep movsd循环,用ecx(4E)计数来写入该数量的DWORD。之后byte_409030被移入ESI,复制byte_409030的数据到映射文件中。
接下来F5跟进一下

跟一下dword_409030

这里一大段不知道是个啥东西,来c一下看看

可以看到这里出现了一个跳转jmp loc_409134,跟过去看看

发现这里出现了被感染的dll和这个exe的导出函数。所以我们可以猜测,shellcode加载了这个dll,并调用了它的导出函数。
接下来IDA分析一下感染后的文件

这里call了sub_1001AD5,我们跟过去看看

这里call的这些个函数不知道是个啥,所以我们上OD里面调试一下
在01001B0A用这个函数的位置下断点,运行

提示出用的是loadlibrary函数,在数据窗口看一下这个位置

可以知道其作用是将inet_epar32.dll载入内存
同理接着看下一个函数,00101B1B处下断点,看到此时是调用GetProcAddress,其作用是获取导出函数的地址(在右下角可以看到导出函数)返回值在eax,接下来将eax赋给ebp-8,之后是call ebp-8,那么也就是说下一个call就是在调用这个导出函数。
接着往下单步

通过一个jmp后到达原始程序的入口点。
所以,恶意代码通过入口点重定向从而使它永久性地安装Lab11-03.dll。它通过重定向入口点,来运行加载这个DLL的shellcode
接下来使用ida分析本次的dll文件

4. 这个恶意代码感染Windows系统的哪个文件?
为加载inet epar32.dll,恶意代码感染了cisvc.exe,然后调用了inet_epar32.dll的导出函数zzz69806582。

5. Lab11-03.dll做了什么?
来看他的导出函数

这里有个创建线程,其中有个startaddress参数,跟过去看看

这里创建了个“MZ”互斥量(因为前面OpenMutexA那个地方没有互斥量,所以跟着绿线运行下来)
接着往下看

创建了个文件"C:\WINDOWS \System32\kernel64x.dll"

SetFilePointer:在一个文件中设置新的读取位置,dwMoveMethod值为2(开始点为文件的结尾位置)
然后call了个sub_10001380,看看是什么

call了个sub_10001030,看看

这又call了个sub_10001000,过去看看

这里看到了一开始静态分析的时候看到的GetForegroundWindow,GetiindowTextA,用来判断当前哪个程序正在输入和获取当前的标题。
再看回sub_10001030,能发现下面用到了GetAsyncKeyState判断一个按键是被按下还是弹起。

Lab11-03.dll 是一个轮询的记录器,这在它的导出函数zzz69806582中得到实现

6. 这个恶意代码将收集的数据存放在何处?
恶意代码存储击键记录和窗体输入记录,其中击键记录被存入到C:\Windows\System32\kernel64x.dll。

zhangsf123 发表于 2022-8-10 22:45

我竟然看完了。佩服我自己一下先。

pizzabamboo 发表于 2022-6-13 11:51

居然没有人来水贴噢{:301_973:}

tfrist 发表于 2022-6-16 06:26

谢谢分享!这才是52需要的!

jsncy 发表于 2022-7-1 10:46

谢谢分享

Paulinho8 发表于 2022-7-7 21:34

感谢分享

iloveasdl 发表于 2022-8-1 09:12

感谢分享
页: [1]
查看完整版本: 恶意代码分析Lab 11-3