恶意代码分析实战12-01

Posted Neil-Yale

tags:

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

本次实验我们将会分析lab12-01.exe文件。先来看看要求解答的问题:
Q1.在你运行恶意代码可执行文件时,会发生什么?
Q2.哪个进程会被注入?
Q3.你如何能够让恶意代码停止弹出窗口?
Q4.这个恶意代码样本是如何工作的?
通过peview载入lab12-01.exe

可以看到一些导入函数:CreateRemoteThread,WriteProcessMemory以及VirtualAllocEx.这些导入函数是恶意代码在进行进程注入时常用的。
再到字符串窗口

可以看到explorer.exe,lab12-01.dll,psapi.dll。这些可能就是恶意代码要注入的目标

接下来我们通过ida进行分析

首先可以看到有三组调用:通过LoadLibraryA和GetProcAddress手动解析psapi.dll的三个函数
将获取的函数的地址分别保存在dword_408714,dword_40870c,dword_408710
为了后续分析的方便,可以对其重命名
之后如图所示

继续往下

看到调用了myEnumProcess
它用于获取在系统中每一个进程对象的PID,会返回一个由局部变量dwProcessId引用的PID数组
再往下

可以看到是循环结构,dwProcessId被用于迭代进程列表

在循环结构中可以看到,会对每一个PID调用sub_401000
跟入分析

调用OpenProcess后会调用EnumProcessModule

之后调用GetModuleBaseNameA,将PID翻译为进程名
call __strnicmp将获得的字符串与explorer.exe进行比较。
也就是说这一部分就是用于在内存中查找explorer.exe进程。
如果找到了explorer.exe,就走右边,把1赋给eax,返回
回到上一层函数

会判定sub_401000返回值是否为1
如果是1,走右边

会调用OpenProcess,打开指向它的句柄。
如果成功获得了句柄,则会有进一步的动作

调用了VirtualAllocEx,动态地在explorer.exe中分配内存。往上看到是push 104h,也就是说0x104字节通过压入dwSize而被分配。
如果VirtualAllocEx执行成功,执行被分配内存的指针将被移动到lpBaseAddress
在调用WriteProcessMemory时和进程句柄hProcess一起被传入,用于向explorer.exe写入数据。写入的内容就是在lpBufer中
往上回溯,看看buffer被设置的地方

调用了GetCurrentDirectoryA获取当前路径,并与Lab12-01.dll拼接
也就是buffer的内容就是lab12-01.dll的路径,也就是写入到了explorer.exe中
回到上一步分析的地方

先是调用WriteProcessMemory,写入之后会调用GetModuleHandleA,GetProcAddress,用于获取kernerl32.dll中的LoadLibrary的地址
返回的地址在eax,赋给了lpStartAddress
而其又成了后面调用的CreateRemoteThread的参数

这样就可以强制explorer.exe调用LoadLibraryA。LoadLibraryA的参数是通过lpParameter传递的,也就是包含lab12-01.dll的字符串。
组合起来看,在远程进程中启动一个线程,以参数lab12-01.dll来调用LoadLibraryA。这也就是典型的dll注入,将Lab12-01.dll注入到了explorer.exe中

我们接下来运行这个程序,运行前打开process explorer监控
注意到会有弹窗,而且每分钟会弹出一次
Q1.在你运行恶意代码可执行文件时,会发生什么?
A1运行这个恶意代码之后,每分钟在屏幕上显示一 次弹出消息

在prorcess explorer中查找dll

可以看到确实注入到了explorer.exe中

为了关闭弹窗,我们可以先关闭进程,kill process即可
然后file->run

运行explorer.exe进程

这时在下方的窗口中不存在lab12-01.dll了。
弹窗也消失了
Q2.哪个进程会被注入?
A2.被注入的进程是explorer. Exe
Q3.如何能够让恶意代码停止弹出窗口?
A3.可以重新启动explorer.exe进程

我们接下来分析下是如何工作的。
Ida载入lab12-01.dll

一开始调用CreateThread创建线程
而具体功能在sub_10001030,跟入

看到是一个循环
循环里面可以看到调用了sleep,参数为60000毫秒

也就是说每隔一分钟会执行一次循环
这里也有个CreateThread来创建一个线程,而线程要实现的功能在StartAddress,双击跟入

会调用MessageBoxA创建消息提示框显示Press OK to reboot
回到上一个函数

这里有一个var_18,一开始被赋了0
进入循环后会通过sprintf拼接到practical malware analysis ,,这个字符串后面的%d就是用保存在var_18变量的计算器替换

后面看到var_8是有一个自增的操作
分析之后,可以得出结论:这个dll会每分钟弹窗,弹出的信息就是刚才看到的字符串,不会做其他危险的操作。
Q4.这个恶意代码样本是如何工作的?
A4.这个恶意代码执行DLL注入,来在explorer.exe中启动Labl2-01.dll。一旦Labl2-01.dll被注入它在屏幕上每分钟显示一个消息框,并通过一个计数器,来显示已经过去了多少分钟

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

恶意代码分析实战9-2

恶意代码分析实战11-2

恶意代码分析实战17-3

恶意代码分析实战11-3

恶意代码分析实战16-03

恶意代码分析实战16-03