查看原文
其他

记一次MEMZ样本分析

0xNOPE 看雪学苑 2022-07-01
本文为看雪论坛优秀文章
看雪论坛作者ID:0xNOPE


1


样本信息

彩虹猫病毒是一个基本的恶搞病毒,没有采取隐藏或者免杀等技术,适合新手分析。该病毒会修改MBR主引导扇区,以此来破坏电脑的正常启动,属于MBR病毒。在修改MBR后,电脑蓝屏,Windows无法启动,一直播放一个彩虹猫的画面。

 

2


运行样本

双击加载病毒,会出现这样的2个提示框,告知你这是一个恶搞程序,是否要运行。

点击确认过后弹出记事本程序。 
之后会出现:
  • 6个MEMZ进程
  • 多个浏览器窗口
  • 鼠标不受控制
  • 窗口颜色发生变化
  • 弹出很多图标
  • ...

任意关掉一个MEMZ进程,或者关闭计算机,系统就会崩溃蓝屏,重启电脑之后,会发现无法登陆系统,一只彩虹猫随着音乐在那儿跳。这说明MBR已经被修改,无法引导操作系统的启动。


3


静态分析

首先使用PEID和ExeInfoPE对样本进行查壳,查壳结果如下:
 
 
PEID查出有ASProtect壳,但是拖入ida似乎是没壳的,很奇怪。
 
StudyPE+查看导入表:

导入函数中我们需要注意如下API函数:


将样本载入ida,整体上看start()函数,函数大体上是由两个if判断组成。
 
由于start()函数大体上可以分成三个部分:启动部分、watchdog部分、main部分。

启动部分


在最开始,程序先获取窗口长、宽和命令行参数。
由于我们第一次双击样本时自然是不带参数的,于是程序流跳转到下面两个弹窗的if判断部分。
 
如果用户在这两个提示窗口都点击了确认,系统则会分配局部内存对象。
 
以"/watch2dog"为参数创建5个名为MEMZ的进程。
之后以"/main"为参数再生成一个MEMZ的进程。
 
到这里,样本创建了6个MEMZ的进程。
 
然后SetPriorityClass函数把main进程的优先级设置为最高。
最后,用ExitProcess函数结束自己的进程。至此,启动部分结束。

watchdog部分


首先判断是否为”/watchdog“为参数的MEMZ进程,如果不是,创建线程,注册窗口并进行消息循环。
启动阶段创建的5个以“/watchdog”为参数的MEMZ进程。这5个进程一共应该创建了5个线程。我们进入sub_40114A看看这个线程具体干了些什么事。


sub_40114A


首先LocalAlloc在堆中分配空间用来存路径字符串,然后GetCurrentProcess获取当前进程句柄,然后GetProcessImageFileNameA获取进程路径。
 
然后一个while死循环,其中大概可以分为两个部分:
 
CreateToolhelp32Snapshot拍摄进程快照,再用Process32FirstW和Process32NextW进行遍历。do-while循环统计MEMZ进程的数量,将其存入v4变量。而sleep函数的存在也使得while死循环每隔一段时间统计当前MEMZ进程的个数并存放在v4变量中。
 
v4存放当前遍历到的MEMZ进程数量,而v7存放上一次遍历到的MEMZ的进程的数量,一旦V4的值小于v7,代表如果我们关闭了一个MEMZ进程,那么就会被if检测语句检测到,执行sub_401021函数内容。结合之前运行病毒我们可以推测sub_401021就是蓝屏关机。

sub_401021


这个函数就有意思了。do-while循环20次创建了20个线程,每次sleep0.1秒;而紧接着RtlAdjustPrivilege提权过后NtRaiseHardError制造系统蓝屏。
 
之后OpenProcessToken获取进程token,AdjustTokenPrivilege利用得到的进程token提权过后ExitWindowsEx强制注销系统。
 

StartAddress


线程函数指针StartAddress点不开,我们直接查看汇编代码如下:

SetWindowsHookEx和UnhookWindowsHookEx用于给窗口下钩子,回调函数fn中看具体操作。
code=等于3代表着窗口即将被创建,lParam表示该窗口的基本信息,创建窗口之前修改当前窗口的这些信息用于随机修改窗口的位置。
 
有26条消息保存在lpText所指向的地址中。使用sub_401A55获取随机数,ds:dword_402AD0存放的值为0x1A,随机数对0x1A取余,结果存放在edx寄存器,以实现在26条消息中随机选取一条MessageBoxA弹出显示。

 
至此我们确认了sub_40114A函数的作用,正如我们上面的猜想,sub_40114A函数确实制造了蓝屏关机,先创建20个线程弹出大量位置和内容都随机的窗口,再蓝屏、强制关机。

sub_401000


sub_401000是个回调函数。16和22分别对应窗口消息WM_CLOSE和WM_ENDSESSION,而WM_CLOSE或WM_ENDSESSION消息是在系统关机时,由操作系统发送给各个窗口。
如果是WM_CLOSE和WM_ENDSESSION,则调用sub_401021函数蓝屏强制关机,如果是其他消息,丢给系统默认处理函数DefWindowProcW。
 
sub_401021这个强制关机函数在两处被调用。第一个是监测watchdog参数的MEMZ进程数量,如有减少就调用。第二个是监测用户是否主动关机,如果主动关机也调用此函数。这和我们运行阶段看到的一致。

main部分


main部分大致也可细分为两个部分:覆盖MBR部分和10个线程部分。我们先来看看下面的10个线程部分:

10个线程部分


此处的do-while循环以v8为计数器循环十次,调用CreateThread创建线程,创建10个线程。参数v9被赋予初始值off_405130,每次循环自增2。

off_405130
 
off_405130内容如下:
稍微修改一下,显示为下图这样:
结合上面的代码,容易看出,此处数据是个结构体组成的数组,数组元素有10个,结构体大致如下:
struct FuncAddrDelay { DWORD pFuncAddr; DWORD dwTimeDelay;}

j结合代码,我们知道CreateThread创建了10个进程,每次创建有一定的延迟时间,延迟时间和进程的函数地址组成一个结构体,共10组放在一个大数组off_405130里。
 
然后sub_401A2B依次调用这10个函数。10个函数每个的返回值被保存在v1,每次循环都会在if语句中判断v1自减1后是否为0,其实返回值就是决定循环的次数,以及这10个函数的激活时间。这10个函数中,有的需要一个固定的激活时间,有的需要一个随机的激活时间,只需要控制返回值即v1就可以了。
这10个函数就是打开浏览器,鼠标失控,弹窗,弹图标等等操作。下面我们来单独看看:

线程1:运行浏览器软件,随机打开网站浏览,运行任务管理器,注册表管理器,计算器等。


 

线程2:鼠标位置失控。

线程3:插入键盘事件,对键盘进行监控。 

线程4:病毒运行的过程中发出声音。

线程5:改变屏幕显示复制桌面界面。

此次BitBlt的作用就是对桌面像素进行位块转换。

线程6:弹出“Still using this computer?”的MessageBox。

线程7:在鼠标位置绘制图标。 

线程8:枚举子窗口,将子窗口变形。

线程9:界面大小改变,桌面变形。

线程10:改变桌面颜色。

覆盖MBR部分


该部分是病毒的核心部分,硬盘最开头的512字节就是MBR部分。MBR里的代码进行各种初始化工作,然后再把控制权转移给操作系统。
 
而该病毒覆盖MBR(Master Boot Record)主引导区,写入播放循环彩虹猫视频的代码,导致Windows系统无法启动。
先来看看覆盖MBR部分:

 
首先CreateFileA以读写权限打开文件PhysicalDrive0即主硬盘文件,再在堆中写入恶意代码,然后通过WriteFile将堆中的恶意代码写到PhysicalDrive0主硬盘文件。然后用LocalAlloc以0为初始值分配一段内存空间,拷贝两段恶意代码数据到分配的内存空间。
 
第一段byte_402118大小303字节覆盖部分MBR(或者初始化恶意代码?因为并没有完全覆盖MBR),第二段开始于510字节处,byte_402248大小1952字节,推测是覆盖MBR后播放的那段彩虹猫的数据。(不太清楚为什么中间跳过了206字节?)。
 
下面我们将这两部分数据dump出来分析。
 
然后作者创建了个note.txt文件,在其中写了段话,并用notepad.exe打开note.txt文件。
静态分析大概就这些内容。


 


看雪ID:0xNOPE

https://bbs.pediy.com/user-home-911233.htm

*本文由看雪论坛 0xNOPE 原创,转载请注明来自看雪社区





# 往期推荐

1. Dex起步探索

2. cocos2d逆向入门和某捕鱼游戏分析

3. Cocos2dlua手游 Lua解密与资源解密实战

4. Windows驱动编程之NetFilter SDK

5. GlobeImposter家族的病毒样本分析

6. CVE-2010-2553 堆溢出漏洞分析



公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com



球分享

球点赞

球在看



点击“阅读原文”,了解更多!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存