彩虹猫病毒分析报告
基本信息
报告名称:彩虹猫病毒分析报告
作者:sshui
报告更新日期:2023年4月24日
样本发现日期:***
样本信息
壳信息
病毒调用CryptGenRandom函数。
简介
彩虹猫病毒属于MBR病毒,从功能上看,它是一款恶作剧病毒。该病毒会修改MBR主引导扇区,以此来破坏电脑的正常启动。在修改MBR后,电脑重启会停留在一个彩虹猫的画面,因此该病毒被称为是彩虹猫病毒。
行为分析
- 自动弹出多个浏览器搜索窗口
- 鼠标异常晃动
- 窗口颜色怪异
- 反复出现系统提示音
- 出现六个MEMZ进程
当用户尝试关闭任意一个MEMZ进程或者手动关闭计算机,都会出现大量弹窗随后蓝屏,接着Windows无法正常启动,只会循环播放一只彩虹猫附带还款的背景音乐,无论多少次重启均如此。
详细分析
查壳
启动PEiD发现使用ASProtect v1.32*进行加壳或加密
使用StudyPE+进行分析,查看样本的导入表,发现大量导入的函数,对函数进行分类:
- 和发生现象有明显直接联系的函数:
- 自动弹出多个浏览器搜索窗口——ShellExecute
- 鼠标异常晃动——SetCursorPos、GetCursorPos
- 桌面出现奇怪图标——DrawIcon
- 窗口颜色怪异——BitBlt、StretchBlt
- 反复出现系统提示音——PlaySoundA
- 出现6个MEMZ进程——ShellExecute
- 不直接关联,常成对出现完成某些功能
- OpenProcessToken、AdjustTokenPrivilege、LookUpPrivilegeValue——给进程提权
- GetMessage、TranslateMessage、DispatchMessage——简历消息循环
- CreateToolhelp32Snapshot、Process32First、Process32Nest——遍历进程
- SetWindowHookEx、UnhookWindowHookEx、CallNextHookEx——给窗口下钩子
- LoadLibrary、GetProcAddress——加载库并导入函数
- 不确定干啥
- SendInput、GetSystemMetrics、DefWindowProc……
入口部分
使用IDA载入样本,定位到入口函数Start并获取伪代码。在start函数的起始部分调用GetCommandLineW、CommandLineToArgvW获取进程参数,之后整个start函数可以根据进程参数分为“无参数”、“watchdog”、“main”三部分。注意,以下反编译得到伪代码部分函数、变量均为了方便查看对名称进行了一定修改,使其更符合其作用。
无参数部分
首先利用MessageBox弹出两个警告消息对话框,当两个对话框都被用户确认时,调用GetModuleFIleNameW获取当前进程的路径并保存。
然后使用do while循环执行5次ShellExecuteW,参数为刚刚得到的样本进程路径、字符串“/watchdog”,生成5个MEMZ.exe进程。
最后调用ShellExecuteExW以“/main”为参数生成了一个MEMZ.exe进程。
该函数接受一个SHELLEXECUTEINFOA结构体,结构体中设定了进程路径和执行参数。后续调用SetPriorityClass,对当中的hProcess成员赋值为0x80,意味着创建的进程拥有最高响应优先级。最后调用ExitProcess使当前进程结束。
故,我们可以得知6个MEMZ.exe的来源:当双击样本时生成了一个原始进程,而原始进程生成了5个watchdog进程和一个main进程,最后原始进程迅速结束了自己,当我们打开任务管理器时,还存在6个MEMZ.exe。
watchdog部分
主体
首先是调用CrateThread创建了一个线程,暂时命名为GetVirProce(IDA自动命名为sub_40114A,作者在分析过程中改变了命名)。
子函数GetVirProce(sub_40114A)
前三个函数用来获取当前进程路径并存储。然后一个大的永真的while循环,利用CreateToolhelp32Snapshot给进程拍快照,再用Process32FirstW和Process32NextW进行遍历,对当前MEMZ.exe进程数进行统计。由于sleep函数的存在,死循环每隔一段时间就能统计出当前MEMZ.exe进程的数量并保存在findVirusProcessCount中,然后先判断allVirusProcessCount和findVirusProcessCount的大小,再让allVirusProcessCount保存findVirusProcessCount的值。当findVirusProcessCount的值小于allVirusProcessCount的值,也就是MEMZ.exe进程减少时,调用AdjustProPrivileges函数(原sub_401021)。在表现中,我们关闭一个MEMZ.exe进程,系统就会进行蓝屏重启,可推测AdjustProPrivileges就是完成蓝屏重启功能的。
子函数AdjustProPrivileges(sub_401021)
首先调用CreateThread创建了20个StartAddress线程。
函数StartAddres
SetWindowsHookExW和UnhookWindowsHookEx用于给窗口下钩子,干了什么事要到回调函数fn里去看。
函数fn
code==3表示目标窗口即将被创建,此刻IParam表示该窗口的基本信息(坐标、大小等),能够发现这些信息正在被随机修改,同时此刻的修改是能够立即起效的。
当创建了完20个随机窗口后,AdjustProPrivileges函数调用Shutdown函数(原sub_401050)进行关机。
函数Shutdown
前一种方式是使用LoadLibraryA加载ntdll库,再连续两次调用GetProcAddress获取“RtlAdjustPrivilege”、“NtRaiseHardError”两个未公开Windows API地址。随后调用这两个函数主动引发蓝屏。
后者则是先利用一系列函数给当前进程提权,然后调用ExitWindowsEx主动关闭Windows。
总结:AdjustProPrivileges函数主要功能为强制关机,首先在关机前创建大量位置内容随机的窗口,然后使用蓝屏或者退出Windows的方式来强制关闭计算机。
注册并创建窗口
回到主体部分,在创建完AdjustProPrivileges线程后,调用RegisterClassExA注册了一个名为“hax”的用户自定义窗口类型,并调用CreateWindowExA将其创建。
回调函数DefWindowPro(原sub_401000)
创建的窗口存在一个回调函数DefWindowPro。查看代码可知,该窗口回调函数会对窗口消息进行过滤,若消息为WM_CLOSE或者WM_ENDSESSION,则调用AdjustProPrivileges强制关机,若是其他消息就不做任何处理,直接丢给系统默认处理函数DefWindowProcW。
消息循环
接着调用GetMessage、TranslateMessage、DispatchMessage包进一个大的while循环(俗称消息循环),对前面创建的窗体完成收取消息和派发消息的工作。
main部分
MBR部分
主体
程序首先对引导区扇区进行覆盖,在前304字节填充第一部分数据,然后使用0填充206字节数据,再填充1952字节的第二部分数据。这部分代码就是开机重启后屏幕播放跑动的小猫的部分。
炫耀
程序创建了一个名为note.txt的记事本,往里面写入了一段话进行炫耀。再使用Windows自带的记事本打开。
其他部分
主体
此刻程序调用CreateThread函数生成了10个线程,同时为参数v9赋初始值off_405130,且每次循环v9都自增2。
v9指向的是一块数据区,不难看出这里存储的是函数地址,同时还保存有函数创建延迟时间。
综上,这部分代码创建了十个进程,这十个进程和创建它们的延迟时间被存放在v9指向静态地址为off_405130数据区。通过查看具体的代码不难发现,这调用十个函数都属于破坏页面显示的攻击函数。
子函数InfiniteLoopFunction(原sub_401A2B)
这部分代码就是循环执行上面主体部分提到的十个攻击函数,名称和作用分别是:
| 原名称 | 自定义函数名 | 作用 |
|---|---|---|
| sub_004014FC | GetRandomLink | 运行浏览器,随机打开网站浏览,运行任务管理器,注册表管理器等 |
| sub_0040156D | desCursor | 鼠标失控 |
| sub_004017A5 | Keyboard | 插入键盘事件,对键盘进行监控 |
| sub_004016A0 | PlaySound | 病毒运行过程中发出声音 |
| sub_004015D4 | BecomeTwinkling | 改变屏幕显示并且桌面上软件界面被复制 |
| sub_0040162A | MoreDialog | 更多的弹窗 |
| sub_00401866 | DrawingIcon | 绘制ICON |
| sub_00401688 | EnumChildWindow | 枚举子窗口,随后对子窗口进行变形操作 |
| sub_004017E9 | StretchWindow | 界面大小改变,桌面变形 |
| sub_004016CD | ChangeDesktopColor | 让桌面变色 |
具体的操作就不再进行分析了。
解决方案及防范措施
- 若系统还能正常运行,先使用查杀软件查杀后,重建MBR引导程序。
- 若系统无法运行,可通过U盘启动运行系统,再对原引导区进行引导修复,重建MBR。
- 安装合规的病毒木马查杀程序。
- 不打开、下载、安装来路不明的软件。






















