首页
社区
课程
招聘
[原创]彩虹猫病毒分析
2021-10-26 20:30 11156

[原创]彩虹猫病毒分析

2021-10-26 20:30
11156

        这里没有放虚拟机运行,直接放微云沙盒跑,样本运行效果如下

        提示是否要继续运行,之后电脑会出现各种弹窗,然后会重启,重启后直接出现彩虹猫并且播放音频

样本分析

样本名:彩虹猫

MD5:19dbec50735b5f2a72d4199c4e184960

SHA-1:6fed7732f7cb6f59743795b2ab154a3676f4c822

SHA-256:a3d5715a81f2fbeb5f76c88c9c21eeee87142909716472f911ff6950c790c24d

File size:14.50 KB (14848 bytes)

Detect It Easy(DIE)查看PE信息如下

    是一个32位程序,且无壳。直接查看导入表

SHELL32.dll

    ShellExecuteW 

    ShellExecuteExW 

    CommandLineToArgvW 

    ShellExecuteA

KERNEL32.dll

    CreateToolhelp32Snapshot 

    GetModuleFileNameW 

    GlobalFree 

    ExitProcess 

    LoadLibraryA 

    lstrlenW 

    Process32NextW 

    GetCurrentProcess 

    LocalAlloc 

    OpenProcess 

    GetCommandLineW 

    GetProcAddress 

    Process32FirstW 

    CreateThread 

    lstrcmpA 

    WriteFile 

    CloseHandle 

    lstrcmpW 

    SetPriorityClass 

    LocalFree 

    GlobalAlloc 

    Sleep 

    CreateFileA 

    GetCurrentThreadId

USER32.dll

    DefWindowProcW 

    SendInput 

    GetMessageW 

    GetSystemMetrics 

    MessageBoxW 

    GetWindowRect 

    UnhookWindowsHookEx 

    DrawIcon 

    EnumChildWindows 

    MessageBoxA 

    GetWindowDC 

    TranslateMessage 

    DispatchMessageW 

    RegisterClassExA 

    GetCursorPos 

    ReleaseDC 

    SetCursorPos 

    CallNextHookEx 

    CreateWindowExA 

    GetDesktopWindow 

    SetWindowsHookExW 

    LoadIconW 

    SendMessageTimeoutW 

    ExitWindowsEx

ADVAPI32.dll

    CryptAcquireContextW 

    AdjustTokenPrivileges 

    LookupPrivilegeValueW 

    CryptGenRandom 

    OpenProcessToken

PSAPI.DLL

    GetProcessImageFileNameA

WINMM.dll

    PlaySoundA

GDI32.dll

    StretchBlt 

    BitBlt

        根据导入表的显示,该样本可能存在的操作如下

提权(AdjustTokenPrivileges、LookupPrivilegeValueW、OpenProcessToken、SetPriorityClass)

遍历进程(CreateToolhelp32Snapshot、Process32FirstW、Process32NextW)

遍历窗口(EnumChildWindows)

全局钩子(SetWindowsHookExW、CallNextHookEx、UnhookWindowsHookEx)

鼠标操作(SetCursorPos、GetCursorPos)

键盘操作(SendInput)

创建窗口(CreateWindowExA)

运行程序(ShellExecuteW)

绘图(BitBlt、StretchBlt)

播放音频(PlaySoundA)

        接下来是拖进IDA进一步的分析。

        大概浏览了伪代码之后,得知该样本存在两种运行方式,附带参数分别为 /watchdog/main。首先是分析/watchdog参数。

一、/watchdog

        以/watchdog方式运行时,会先创建一个线程,然后创建一个窗口。先分析ThreadProc。

[1]ThreadProc分析

        该线程首先是获取自身路径后,进行进程遍历,统计自身进程数,如果自己的数量少了1,则会执行下面的Blue_MsgBox_fixWndSize函数。

[2]Blue_MsgBox_fixWndSize分析

        函数首先是启动了20是个线程,然后触发一个蓝屏,如果蓝屏触发失败则会重启。双击StartAddress,发现光标直接跳到return的位置

        于是切换到反汇编查看汇编代码。

[3]StartAddress分析

        首先调用SetWindowHookExW设置了一个WH_CBT的钩子,钩子函数为fn,这样当窗口有变化时会自动调用fn,紧接从lpText从随机取出一条文本用来弹窗。

.data:004050C8     lpText          dd offset aYouKilledMyTro

.data:004050C8                                             ; DATA XREF: Blue_MsgBox_fixWndSize+10D↑r

.data:004050C8                                             ; "YOU KILLED MY TROJAN!\r\nNow you are go"...

.data:004050CC                     dd offset aRestInPissFore ; "REST IN PISS, FOREVER MISS."

.data:004050D0                     dd offset aIWarnedYou   ; "I WARNED YOU..."

.data:004050D4                     dd offset aHahaN00bL2pG3t ; "HAHA N00B L2P G3T R3KT"

.data:004050D8                     dd offset aYouFailedAtYou ; "You failed at your 1337 h4x0r skillz."

.data:004050DC                     dd offset aYouTriedSoHard ; "YOU TRIED SO HARD AND GOT SO FAR, BUT I"...

.data:004050E0                     dd offset aHackerEnjoyBan ; "HACKER!\r\nENJOY BAN!"

.data:004050E4                     dd offset aGetBetterHaxNe ; "GET BETTER HAX NEXT TIME xD"

.data:004050E8                     dd offset aHaveFunTryingT ; "HAVE FUN TRYING TO RESTORE YOUR DATA :D"

.data:004050EC                     dd offset a32           ; "|\\/|3|\\/|2"

.data:004050F0                     dd offset aBsodIncoming ; "BSOD INCOMING"

.data:004050F4                     dd offset aVirusPrankGone ; "VIRUS PRANK (GONE WRONG)"

.data:004050F8                     dd offset aEnjoyTheNyanCa ; "ENJOY THE NYAN CAT"

.data:004050FC                     dd offset aGetDankAntivir ; "Get dank antivirus m9!"

.data:00405100                     dd offset aYouAreAnIdiotH ; "You are an idiot!\r\nHA HA HA HA HA HA "...

.data:00405104                     dd offset aMakemalwaregre ; "#MakeMalwareGreatAgain"

.data:00405108                     dd offset aSomebodyOnceTo ; "SOMEBODY ONCE TOLD ME THE MEMZ ARE GONN"...

.data:0040510C                     dd offset aWhyDidYouEvenT ; "Why did you even tried to kill MEMZ?\r"...

.data:00405110                     dd offset aSecurebootSuck ; "SecureBoot sucks."

.data:00405114                     dd offset aGr8M8IR888   ; "gr8 m8 i r8 8/8"

.data:00405118                     dd offset aHaveYouTriedTu ; "Have you tried turning it off and on ag"...

.data:0040511C                     dd offset aInsertJoelQuot ; "<Insert Joel quote here>"

.data:00405120                     dd offset aGreetingsToAll ; "Greetings to all GAiA members!"

.data:00405124                     dd offset aWellHelloThere ; "Well, hello there. I don't believe we'v"...

.data:00405128                     dd offset aThisIsEverythi ; "'This is everything I want in my comput"...

.data:0040512C                     dd offset aUhClubPenguinT ; "'Uh, Club Penguin. Time to get banned!'"...


        最后把钩子卸载,接下来看看挂钩的函数干了什么。

[4]fn分析

        可以看到如果消息类型为创建新窗口时,就会修改窗口宽高为屏幕范围内的一个随机值。

        最后我们还差一个函数,那就是创建窗口时,窗口的CallBack

[5]CallBack分析

        内容也很简单,判断当前msg是否为关闭窗口,如果是关闭窗口则直接触发蓝屏操作。

        回到主程序继续分析。

        样本打开了一个串口*\.\PhysicalDrive0*,其中PhysicalDrive0表示本机的物理驱动器0(一般是主硬盘)。

   

        然后开始向MBR写入内容。这里贴一下关于MBR的介绍

    主引导记录(MBR),也被称为主引导扇区,是计算机开机以后访问硬盘时所必须要读取的第一个扇区。在深入讨论主引导扇区内部结构的时候,有时也将其开头的446字节内容特指为“主引导记录”(MBR),其后是4个16字节的“磁盘分区表”(DPT),以及2字节的结束标志(55AA)。因此,在使用“主引导记录”(MBR)这个术语的时候,需要根据具体情况判断其到底是指整个主引导扇区,还是主引导扇区的前446字节。     -来自:百度百科

        其中关键点为主引导记录,也就是开头的446字节,其后的就是DPT还有结束标志0x55AA。

        这段代码有两个While,第一个是直接重写了MBR,这样系统在启动的时候就无法将控制权转交给操作系统,而是执行样本写入的数据。然后是第二个While,只从0x1FE开始写入彩虹猫动画程序,446 + 4*16 = 0x1BE+ 0x40 = 0x1FE,双击loc_402248,也可以看到数据头为0x55AA**。

        之后样本会创建一个note.txt,然后写入内容后并打开。

        最后启动了5个线程。

[6]openWeb_Exe分析

        双击openWeb_Exe之后发现函数将参数作为函数运行,而线程的参数为v9,v9来自off_405130,跳转过去后发现存在一个函数。

        再跳转到这个函数

        这里会调用ShellExecuteA随机执行一些东西。lpFile内容如下:

.data:00405000     lpFile          dd offset aHttpGoogleCoCk

.data:00405000                                             ; DATA XREF: sub_4014FC+18↑r

.data:00405000                                             ; "http://google.co.ck/search?q=best+way+t"...

.data:00405004                     dd offset aHttpGoogleCoCk_0 ; "http://google.co.ck/search?q=how+2+remo"...

.data:00405008                     dd offset aHttpGoogleCoCk_1 ; "http://google.co.ck/search?q=mcafee+vs+"...

.data:0040500C                     dd offset aHttpGoogleCoCk_2 ; "http://google.co.ck/search?q=how+to+sen"...

.data:00405010                     dd offset aHttpGoogleCoCk_3 ; "http://google.co.ck/search?q=minecraft+"...

.data:00405014                     dd offset aHttpGoogleCoCk_4 ; "http://google.co.ck/search?q=how+to+get"...

.data:00405018                     dd offset aHttpGoogleCoCk_5 ; "http://google.co.ck/search?q=bonzi+budd"...

.data:0040501C                     dd offset aHttpGoogleCoCk_6 ; "http://google.co.ck/search?q=how+2+buy+"...

.data:00405020                     dd offset aHttpGoogleCoCk_7 ; "http://google.co.ck/search?q=how+to+cod"...

.data:00405024                     dd offset aHttpGoogleCoCk_8 ; "http://google.co.ck/search?q=what+happe"...

.data:00405028                     dd offset aHttpGoogleCoCk_9 ; "http://google.co.ck/search?q=g3t+r3kt"

.data:0040502C                     dd offset aHttpGoogleCoCk_10 ; "http://google.co.ck/search?q=batch+viru"...

.data:00405030                     dd offset aHttpGoogleCoCk_11 ; "http://google.co.ck/search?q=virus.exe"

.data:00405034                     dd offset aHttpGoogleCoCk_12 ; "http://google.co.ck/search?q=internet+e"...

.data:00405038                     dd offset aHttpGoogleCoCk_13 ; "http://google.co.ck/search?q=facebook+h"...

.data:0040503C                     dd offset aHttpGoogleCoCk_14 ; "http://google.co.ck/search?q=virus+buil"...

.data:00405040                     dd offset aHttpGoogleCoCk_15 ; "http://google.co.ck/search?q=how+to+cre"...

.data:00405044                     dd offset aHttpGoogleCoCk_16 ; "http://google.co.ck/search?q=how+to+rem"...

.data:00405048                     dd offset aHttpGoogleCoCk_17 ; "http://google.co.ck/search?q=my+compute"...

.data:0040504C                     dd offset aHttpGoogleCoCk_18 ; "http://google.co.ck/search?q=dank+memz"

.data:00405050                     dd offset aHttpGoogleCoCk_19 ; "http://google.co.ck/search?q=how+to+dow"...

.data:00405054                     dd offset aHttpGoogleCoCk_20 ; "http://google.co.ck/search?q=half+life+"...

.data:00405058                     dd offset aHttpGoogleCoCk_21 ; "http://google.co.ck/search?q=is+illumin"...

.data:0040505C                     dd offset aHttpGoogleCoCk_22 ; "http://google.co.ck/search?q=montage+pa"...

.data:00405060                     dd offset aHttpGoogleCoCk_23 ; "http://google.co.ck/search?q=the+memz+a"...

.data:00405064                     dd offset aHttpGoogleCoCk_24 ; "http://google.co.ck/search?q=stanky+dan"...

.data:00405068                     dd offset aHttpGoogleCoCk_25 ; "http://google.co.ck/search?q=john+cena+"...

.data:0040506C                     dd offset aHttpGoogleCoCk_26 ; "http://google.co.ck/search?q=vinesauce+"...

.data:00405070                     dd offset aHttpGoogleCoCk_27 ; "http://google.co.ck/search?q=skrillex+s"...

.data:00405074                     dd offset aHttpAnswersMic ; "http://answers.microsoft.com/en-us/prot"...

.data:00405078                     dd offset aHttpMotherboar ; "http://motherboard.vice.com/read/watch-"...

.data:0040507C                     dd offset aHttpPlayClubpe ; "http://play.clubpenguin.com"

.data:00405080                     dd offset aHttpPcoptimize ; "http://pcoptimizerpro.com"

.data:00405084                     dd offset aHttpSoftonicCo ; "http://softonic.com"

.data:00405088                     dd offset aCalc         ; "calc"

.data:0040508C                     dd offset File          ; "notepad"

.data:00405090                     dd offset aCmd          ; "cmd"

.data:00405094                     dd offset aWrite        ; "write"

.data:00405098                     dd offset aRegedit      ; "regedit"

.data:0040509C                     dd offset aExplorer     ; "explorer"

.data:004050A0                     dd offset aTaskmgr      ; "taskmgr"

.data:004050A4                     dd offset aMsconfig     ; "msconfig"

.data:004050A8                     dd offset aMspaint      ; "mspaint"

.data:004050AC                     dd offset aDevmgmtMsc   ; "devmgmt.msc"

.data:004050B0                     dd offset aControl      ; "control"

.data:004050B4                     dd offset aMmc          ; "mmc"

        至此,整个/watchdog部分的分析就结束了。总结一下:当样本以/watchdog参数运行时,会出现一个窗口,然后会打开乱七八糟的网页和一些系统程序,弹出信息框且当有窗口创建时会把宽高修改为随机大小,然后蓝屏。由于存在MBR的修改,导致重启时电脑无法正常启动,且会播放彩虹猫的动画。

二、/main

/main参数运行的代码部分相对来说比较简单,首先是两个提示性的弹窗,然后就是创建了5个以/watchdog参数的进程,此处与前面判断进程数减少部分对应。最后是把自己的优先级到最高HIGH_PRIORITY_CLASS(0x80)

三、MBR部分函数

[1]MoveMouse-随机移动鼠

[2]ChangeDeskBg-修改桌面背景

[3]sub_401688-枚举窗口

[4]PlayBeep-播放声音

[5]sub_4016CD-乱画桌面

[6]autoKeydown-自动按键

[7]DrawIcon-随机位置画Icon


        


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2021-10-26 20:30 被PlaneJun编辑 ,原因:
收藏
点赞2
打赏
分享
最新回复 (1)
雪    币: 9
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
葡萄成熟时 2021-10-29 09:29
2
0
老哥,可以发一下样本吗
游客
登录 | 注册 方可回帖
返回