恶意代码分析实战:Lab12-02

问题

首先看一下它的导入函数。
0XStHO.png
由CreateProcessA、GetThreadContext、SetThreadContext可以知道这个程序会创建新的进程,并且修改线程的上下文。ReadProcessMemory和WriteProcessMemory会对进程的内存空间进行读写操作。SizeofResource、LockResource、LoadResource会对资源进行操作。
首先我们来看看main函数中对sub_40149D调用,该函数的目的是组合成一个字符串,也就是系统目录中的svchost.exe的路径。
0XSjPJ.png
下一个函数调用是sub_40132C,可以发现,这里面出现了诸如FindResource、LoadResource、LockResource、SizeOfResource、VirtualAlloc以及memcpy这几个函数。也就是从当前可执行文件的资源段中复制数据到内存中。
0XpFaD.png
对函数以及资源文件进行分析可以看出这里是被加密了的,通过观察我们可以看出,这里进行了异或操作,异或数为0x41。通过winhex对数据进行修改可以得到一个PE文件。
0XphdO.png
接下来调用了函数sub_4010EA,我们先看一下CreateProcessA函数的dwCreationFlags这个参数。这个程序里面,它的值是4,表示的是CREATE_SUSPENDED,也就是允许进程被创建,但是先不启动。还可以看到GetThreadContext这个函数,说明这个恶意程序正在访问一个线程的上下文。它的hThread参数与CreateProcessA函数的lpProcessInformation参数位于同一个缓冲区。这也就说明了,这个程序正在访问挂起的进程的上下文。接下来程序会调用位于0x004011E8处的GetProcAdderss,用于获取NtUnmapViewOfSection函数的地址。并且在0x004011FE的位置,将之前获取的ImageBase作为了NtUnmapViewOfSection函数的一个参数入栈。这样一来,NtUnmapViewOfSection就会将新创建的进程的内存空间释放掉,随后可以开始填充恶意代码了。
0X9YkD.png
接下来是一个循环复制PE可执行段到这个挂起的进程。
0X9jj1.png

1、这个程序的目的是什么?

这个程序的目的是秘密地创建另一个恶意程序。

2、启动器恶意代码是如何隐蔽运行的?

进程的替换技术。

3、恶意代码负载存储在哪里?

资源节中。

4、恶意负载是如何被保护的?

异或加密。

5、字符串列表是如何被保护的?

异或加密。