恶意代码分析实战21-2

Posted Neil-Yale

tags:

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

本次实验我们将会分析lab21-02文件。先来看看要求解答的问题
Q1.恶意代码的资源节有什么有趣的东西?
Q2.这个恶意代码是为x64编译的,还是为x86编译的?
Q3.恶意代码是如何确定出它正在运行的环境类型的?
Q4.与在x86环境中相比,恶意代码在x64环境中会做哪些不同的事情?
Q5.恶意代码在x86环境中运行时会释放出哪些文件?你可以在哪里找到这些文件?
Q6.当运行在x64机器上时,恶意代码丢弃了哪些文件?你在哪里能找到这个或这些文件?
Q7.当运行在x64系统上时,恶意代码启动什么类型的进程?
Q8.这个恶意代码的目的是什么?

载入IDA,切换到strings窗口
在这里插入图片描述

注意到IsWoW64Process,这是一个API调用,它可以告诉恶意代码自己是否在一个64位系统上以32位进程的方式运行。
同时看到了与本次实验相关的字符串:Lab21-02.dll,Lab21-02x.dll,Lab21-02x.exe
载入peview
在这里插入图片描述

可以看到这是32位编译的
在这里插入图片描述

可以看到三个不同的资源节:x64,x64dll,x86
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

而且从MZ头,DOS存根可知,每个资源节都包含了一个嵌入的PE格式文件
如果我们在x86或者x64上尝试运行,会看到都是可以运行的
Q1.恶意代码的资源节有什么有趣的东西?
A1.这个恶意代码包含了X64、X64DLL和X86资源节。每个资源节中都包含了一个内嵌的PE文件。
Q2.这个恶意代码是为x64编译的,还是为x86编译的?
A2:这是为x86编译的

回到IDA继续分析
查看IsWoW64Process的交叉引用
在这里插入图片描述

来到main中
在这里插入图片描述

在401303处获取到了kernel32.dll的句柄,在401306调用GetProcAddress,尝试动态定位IsWoW64Process函数地址
成功获取到地址后将其保存到dword_40a7a8,这里将其重命名为myIsWoW64Process
之后通过test指令来确定恶意代码是否找到了IsWoW64Process函数
Q3.恶意代码是如何确定出它正在运行的环境类型的?
A3.该恶意代码试图解析并调用IsWow64Process函数,以确定它是否在x64系统上运
接着通过GetCurrentProcess获得自己的PID
然后调用dword_40a7a8,也就是myIsWoW64Process。var_10变量中是函数的返回结果t
根据var_10值的不同,出现了两条分支,对应恶意代码的两条执行路径:x86,x64
在这里插入图片描述

先来分析x86的路径
在这里插入图片描述

首先将字符串Lab21-02.dll,x86传递到sub_401000函数中,跟入

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

通过这些函数调用我们可以知道,这是在将x86资源节中的文件提取到磁盘上
传入的第二个参数Lab21-02.dll
在这里插入图片描述

则是附加到GetSystemDirectoryA函数获取的结果字符串上,从而将x86资源提取到c:\\windows\\systme32\\lab21-02.dll
Q5.恶意代码在x86环境中运行时会释放出哪些文件?你可以在哪里找到这些文件?
A5.在x86系统上,恶意代码将Lab21-02.dll安置到Windows系统目录中,通常是C:\\Windows\\System32\\。
所以可以给该函数重命名为extractxResource

回到mainJ继续
在这里插入图片描述

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

通过这些API函数设置了SeDebugPrivilege,用于提升权限
返回main
在这里插入图片描述

调用了dword_40a7b0,往前回溯
在这里插入图片描述

这是调用了EnumProcess函数遍历进程列表
在main中继续分析
在这里插入图片描述

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

使用strnicmp函数查找一个名称为explorer.exe的进程
返回main
在这里插入图片描述

调用VirtualAllocEx,CreateRemoteThread将Lab21-02.dll注入到explorer.exe中。

再分析x64的执行
在这里插入图片描述

可以看到一开始调用了两次extractResource函数,将x64,x64dll资源节提取到磁盘上,保存为lab21-02x.dll,lab21-02x.exe,并置于GetSytemDirectory返回的目录下,如果是在64位环境下运行这个32位程序,程序会运行在WOW64环境下,系统路径被映射至c:\\windows\\syswow64,如下所示这是在64位系统下运行的结果
在这里插入图片描述

Q6.当运行在x64机器上时,恶意代码丢弃了哪些文件?你在哪里能找到这个或这些文件?
A6.在x64系统上,恶意代码将Lab21-02x.dll和Lab21-02x.exe释放到Windows系统目录中,但由于这是一个在WOW64中运行的32位进程,所以目录是C:\\WindowslSysWOW64\\。

回到main继续分析
在这里插入图片描述

之后通过ShellExecute启动lab21-02x.exe
将释放的lab21-02x.exe载入到peview
在这里插入图片描述

可以这个文件是为x64模式编译的,也会作为一个64位进程运行。
Q7.当运行在x64系统上时,恶意代码启动什么类型的进程?
A7.在x64系统上,恶意代码将启动Lab21-02x.exe, 这是一个64位进程
我们可以使用IDA分析释放出的lab21-02x.exe
在这里插入图片描述

这和我们之前分析的lab21-02.exe差不多。也是通过遍历进程列表,动态地定位API函数。在使用lstrcpyA,lstrcatA函数创建字符串时,就出现不同了。这里从字符串看到的位置和我们前面动态运行后找到的文件的位置是符合的。这一字符串的结构将被保存在String1
在这里插入图片描述

1400012cf将String赋给r8,而r8作为lpBuffer参数传给WriteProcessMemory
这样字符串就被写入内存
之后调用CreateRemoteThread。
这种模式说明在执行dll注入
在strings窗口找到explorer.exe字符串
在这里插入图片描述

查看交叉引用
在这里插入图片描述

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

QueryFullProcessImageNameA函数返回值和explorer.exe作为参数传递给14000110c处的strstr(一些机器上可能无法识别该函数)字符串比较函数
那么我们就清楚了,这是在注入explorer.exe进程,不过是注入到64位的explorer.exe
Q4.与在x86环境中相比,恶意代码在x64环境中会做哪些不同的事情?
A4.在x86机器上,恶意代码会将X86资源节解析到磁盘上,并将其注入explorer.exe中。在x64机器上,恶意代码会从X64和X64DLL资源节中释放两个文件到磁盘上,并以一个64位进程启动该执行文件
Q8.这个恶意代码的目的是什么?
A8.在x64 和x86系统上,恶意代码都对explorer.exe执行DLL注入。在x64系统上,它安置并运行一个64位的二进制程序,并注入一个64位的DLL到64位模式运行的explorer.exe进程。在x86系统上,它注入一个32位的DLL到32位模式运行的explorer.exe进程中。

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

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

恶意代码分析实战3-2

恶意代码分析实战11-1

恶意代码分析实战9-1

恶意代码分析实战14-02

恶意代码分析实战11-2

恶意代码分析实战15-3