首页 > 编程知识 正文

流体猫病毒视频,memz彩虹猫谁发明的

时间:2023-05-03 09:56:32 阅读:42648 作者:169

病毒介绍虹彩病毒为MBR病毒,功能上是一种恶作剧病毒。 此病毒会修改MBR主引导扇区,破坏计算机的正常启动。 修改MBR后,计算机重新启动将停留在虹猫屏幕上,因此该病毒被称为虹猫病毒。 这个病毒没有采取隐藏和躲避检阅等技术,适合像我这样的初学者分析。

调试病毒并双击以加载病毒时,会出现这样的提示。 他会告诉你是恶意代码,问你是否真的要启动。 说明这也是恶作剧病毒。

再次单击“确定”后,将显示“最后警告”消息框。

确定后,病毒会打开很多页面。 链接指向谷歌搜索,但由于互联网的原因,我不知道这个浏览器具体说明了什么。 之后,老鼠没有被指控,不断发抖。 各种窗口层出不穷,铺在屏幕上,有些窗口的颜色变成黑色或褐色。

窗口多到一定程度后,系统就会崩溃蓝屏,重启电脑,就会发现无法登录系统,页面上彩虹色的猫在抖动,伴随着音乐。 这表明MBR已更改,无法启动操作系统。

用PEID打开壳,确认有无壳。 我发现没有壳

使用引用函数搜索病毒并在StudyPE中查看导入表

我也不是特别熟悉引进表的作用,但我查了资料后在这里列举了。

导入表名角色KERNEL32.dll控制系统内存管理、数据输入输出操作和中断处理USER32.dll创建窗口和发送消息。 与用户界面相关的GDI32.dll用于绘制图像和显示文本;ADVAPI32.dll用于对象安全;注册表操作和事件日志SHELL32.dll用于打开网页和文件。 创建文件时设置默认文件名WINMM.dll用于低级音频和游戏手柄PSAPI.dllWindows系统进程状态支持模块。 单击导入表,逐一查看调用函数及其功能。 我们可以把这些调用函数分为两种。 一是直观地直接操作电脑; 另一个是从后台操作的功能。

第一种类型的函数如下:

SHELL32ShellExecute通过实现与功能对应的基于链接的函数来改变窗口的颜色和大小,stretchblt调用外部程序,如浏览器,SHELL32ShellExecute用于发出系统报警音winmmplaysoute

第二个函数如下

为实现功能的相应函数进程授予权限OpenprocessToken、LookupPrivilegeValue、AdjustTokenPrivileges建立消息周期GetMessage、TranslateMessage、 分布式消息遍历过程creessage Process32First和Process32Next是窗口的下挂钩SetWindowHookEx、UnhookWindowHookEx和callnexxex

GetCurrentProcessID当前进程的IDOpenProcessToken通过获取进程的令牌句柄LookupPrivilegeValue获取进程权限的LUID值AdjustTokenPrivileges

在这个样品中,使用了后面的3个

因为函数流程图在使用psdxtg逆分析时,我采用了顺序分析层的深方法。 所以,分析的时候看起来有点乱。 因此,在这里,为了明确想法追加了流程图。

psdxtg伪代码分析在psdxtg中调试代码,打开start函数,在F5中生成伪代码并进行分析。

在start函数开始时,调用了GetCommandLineW、CommandLineToArgvW捕获进程的参数。 其中v0获取命令行字符串,pNumArgs获取命令行中的实际参数。

查看代码时,找到与提示框相关的函数并不容易。

首先看看这个有大量文字的代码。 看字符串就知道了。 这个代码主要实现两个弹匣的功能。

消息盒函数的结构如下

MessageBox (句柄、显示内容、标题、MB_OK );

此代码中,如果函数句柄为0,则表示它是当前窗口的句柄。 其中messagebox的返回值为6,表示您单击了确定按钮。

然后,代码使用GetModuleFileName函数记录加载了当前进程的模块的文件的完整路径。

之后,在一个while循环中,循环了5次。 我们使用ShellExecuteW函数创建了五个进程。 此进程打开的程序目录是刚才在v10中指定的。 在指定参数中选择" watchdog ",还可以选择“按最近的位置和大小显示并激活”。 也就是说,代码连续五次调用ShellExecuteW函数,以字符串“watchdog”为参数,生成了五个MEMZ.exe进程。

我们先来看看ShellExecuteEx函数的结构

boolshellexecuteex(_ino

ut_ SHELLEXECUTEINFO *pExecInfo);typedef struct _SHELLEXECUTEINFO { DWORD cbSize;//结构大小,sizeof(SHELLEXECUTEINFO) ULONG fMask;//指定结构成员的有效性 HWND hwnd;//父窗口句柄或出错时显示错误父窗口的句柄,可以为 NULL LPCTSTR lpVerb;//指定该函数的执行动作 LPCTSTR lpFile;//操作对象路径 LPCTSTR lpParameters;//执行参数,可以为 NULL LPCTSTR lpDirectory;//工作目录,可以为 NULL int nShow;//显示方式 HINSTANCE hInstApp;//如果设置了 SEE_MASK_NOCLOSEPROCESS ,并且调用成功则该值大于32,调用cqdbz被设置错误值 LPVOID lpIDList;//ITEMIDLIST结构的地址,存储成员的特别标识符,当fMask不包括SEE_MASK_IDLIST或SEE_MASK_INVOKEIDLIST时该项被忽略 LPCTSTR lpClass;//指明文件类别的名字或GUID,当fMask不包括SEE_MASK_CLASSNAME时该项被忽略 HKEY hkeyClass;//获得已在系统注册的文件类型的Handle,当fMask不包括SEE_MASK_HOTKEY时该项被忽略 DWORD dwHotKey;//程序的热键关联,低位存储虚拟关键码(Key Code),高位存储修改标志位(HOTKEYF_),当fmask不包括SEE_MASK_HOTKEY时该项被忽略 union { HANDLE hIcon;//取得对应文件类型的图标的Handle,当fMask不包括SEE_MASK_ICON时该项被忽略 HANDLE hMonitor;//将文档显示在显示器上的Handle,当fMask不包括SEE_MASK_HMONITOR时该项被忽略 } DUMMYUNIONNAME; HANDLE hProcess;//指向新启动的程序的句柄。若fMask不设为SEE_MASK_NOCLOSEPROCESS则该项值为NULL。 //但若程序没有启动,即使fMask设为SEE_MASK_NOCLOSEPROCESS,该值也仍为NULL。 //如果没有新创建进程,也会为空} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;

通过对照,我们看到,代码又生成了一个参数为main的MEMZ进程,但与前几个不同的是,它又调用SetPriorityClass函数把main进程的优先级调至最高。调至最高的目的是为了防止用户中断该进程。
最后,代码用ExitProcess函数结束自己的进程。
通过这里,我们大体了解了彩虹猫病毒前期工作过程:在两次点击提示框的确定之后,该病毒生成了5个watchdog进程以及一个main进程,然后结束掉自己进程。
有时,病毒要实现多个程序功能,但是为了方便自身的复制繁殖,只能写在同一个代码中,于是就用不同的参数进行命名,这样有助于判断区分,实现不同功能。

watchdog部分 主体

其主体代码较短,但需要一一分析。lstrcmpW函数是不区分大小写的判断,若两个字符串一致,则返回值为零。

CreateThread函数创建了一个线程,每一个进程都会创建一个线程, 因此,对于五个MEMZ进程来说,就创建了五个线程。我们跳转到sub_40114A处进行分析判断。

子函数sub_40114A

子函数内容也较少,可以用一张图概括完毕。
首先是调用三个函数获取进程路径。先使用LocalAlloc函数申请地址存放路径,再用GetCurrentProcess获取进程句柄,最后调用GetProcessImageFileNameA获取进程当前路径。
获取进程路径之后,利用while函数进行循环操作。但需要注意的是,这个while操作是一个死循环,他会不断的执行。执行之初,代码先利用CreateToolhelp32Snapshot函数建立一个关于进程的快照,获取系统中正在运行的进程信息,线程信息。建立快照之后,利用process32First函数来获得第一个进程的句柄。
CreateToolhelp32Snapshot这个函数病毒常常用于对当前状态的获取,以及逃避杀毒软件的查杀来用。
在进行循环进程遍历时,该代码会不断地打开进程,并通过GetProcessImageFileNameA来实现对进程路径的存取并存放到lpString2中。通过比较v3(原有路径)与lpString2(现在进程路径),计算MEMZ进程的数量,并将数目存放到v4中。值得注意的是,下面有一个if语句,如果v4小于v7则会跳转的新的子函数sub_401021中;如果v4大于等于v7,则将v4的值赋给v7换句话说,其实v7存放的是最大进程数。如果小于这个数,则会进行下一步的跳转。sleep函数实现了隔一段时间进行一次检测。

子函数sub_401021

子函数开头代码如下:

在该函数开头,就利用do while 循环连续创建了20个线程。StartAddress是新线程所执行的线程函数地址。我们双击打开(有问题)StartAddress

我们打开sub_401A55子函数,发现该函数用于生成随机数

而在MessageboxB函数中,lpText参数存放的是一些消息,利用v3获取的随机数从26条消息中取出一条显示出来。

在这里代码使用了SetWindowsHookEx函数给窗口下钩子,我们调回到fn函数进行查看。

通过阅读这段代码我们发现,这一段代码主要是随机生成窗口,窗口的位置和大小都是随机生成的。
也就是说该线程的作用主要是随机生成窗口,以及随机生成一些信息。

我们返回sub_401021函数查看其下半部分。
下半部分的代码主要是触发电脑关机,但其设置了两种触发形式,第一种是引发电脑蓝屏,另一种是强制退出Windows系统。
代码先加载了ntdll动态链接库,然后利用RtlAdjustPrivilege函数获取进程ACL的任意权限。该函数由于未在MSDN中公布,所以需要用GetProcAddress获取函数地址,间接调用。而NtRaiseHardError就会让电脑蓝屏,同样也需要间接调用。
后一种方式则是先通过一系列函数进行提权,然后用ExitWindowsEx函数退出Windows系统。

经过以上分析,我们发现sub_401021函数既负责生成大量窗口也用来实现强制关机。

注册窗口

我们再次回到watchdog的主体函数部分。

RegisterClassEx为随后在调用CreatewindowEx函数中使用的窗口注册一个窗口类。CreatewindowEx则创建了一个窗口。
在创建窗口的上面,系统还调用了函数sub_401000,我们发现该函数是一个判断函数,若Msg等于16或者22时,系统就会调用sub_401021强制关机。经过查询资料,发现Msg=16对应窗口消息WM_CLOSE,Msg22对应窗口消息WM_ENDSESSION。若不为二者,代码就会将其转交给DefWindowProcW这个Windows函数来处理消息。

代码编写者在写程序时考虑到了用户可能的两个操作:强制关闭MEMZ进程或者是关机,无论是用户进行哪一个操作,都会触发sub_401021函数进行关机。

消息循环

GetMessage、TranslateMessage、DispatchMessage这几个函数是为了实现消息的循环,完成消息的收取和派发工作。

main部分

在main函数中,使用do while循环了10次,创建了10个线程。这里令人好奇的是为什么要给v9赋予off_405130这样一个地址,在每次循环中还要+2,而且在创建线程中也用其作为参数。怀着这样的疑问,我打开了off_405130的地址段,发现这是数据区。

v9是DWORD类型,每次v9+2即增加两个DWORD的大小,就是8个字节。也就是说v9是按照405130->405138->405140的顺序变化的。而这些,恰好都是每个函数的起始地址。sleep(v9[1])中v9[1]的值为007530h,该值为函数延迟创建线程的 时间。这样类型的数据,一共有10组。

sub_401A2B(不太懂)

这里利用该函数和v9实现对那10个函数的调用。

MBR

在对MBR进行改写的代码中,先调用CreateFileA函数打开了PhysicalDrive0即主硬盘。接着用LocalAlloc分配了65535字节的空间地址,以v3小于303字节为循环条件,向开头的303个字节写入了一段数据,该数据原本存放在byte_402118 - v4中。然后从510字节开始,又写入了一段数据,该段数据大小为1952个字节。

我们不难推断出,第一段数据是代码,用于覆盖MBR;第二段数据较大且已不在MBR中,应该是图像和音乐。
覆盖完毕后,作者写了一段话,用记事本打开显示。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。