查看原文
其他

MacOS平台一个古老的恶意软件INIT29的分析

一壶葱茜 看雪学院 2021-03-07

本文为看雪论坛优秀文章
看雪论坛作者ID:一壶葱茜



在上一篇文章(https://knight.sc/software/2020/04/19/classic-macos-development.html)中,我介绍了我设置的“经典” Mac OS仿真器。


我设置模拟器的目的之一是能够查看和分析感染旧版Mac OS的病毒。


我认为研究旧病毒很有趣的原因有二。首先,它很好地概述了68k汇编。其次,这提供了一个研究恶意软件历史的有趣角度。我决定研究的第一个病毒称为INIT 29。



概述


下面是Disinfectant 3.7.1的帮助文件对此病毒的简短描述:


INIT 29病毒于1988年底首次出现。我们对其起源了解不多。第二个较小的变异出现在1994年3月。两种类型之间没有显着差异。原始型称为“ INIT 29 A”。该变型称为“ INIT 29 B”。


INIT 29具有极强的感染性。它迅速传播。与Scores和nVIR不同,系统不必运行应用程序即可被感染,而且INIT 29可以感染几乎所有文件,包括应用程序,系统文件和文档文件。文档文件可以被感染,但没有传染性。该病毒只能通过系统文件和应用程序文件传播。


感染的应用


使用ResEdit可以轻松识别感染了INIT 29病毒的应用程序。如下图:

 

 

病毒的第一个指示是恰好712个字节的CODE资源。第二个指示可以在跳转表中看到。


每个可执行文件都有一个包含跳转表的ID为0的CODE资源。如果是小型应用程序,则表中可能只有一两个条目。


通常,当编译器构建应用程序时,它将顺序创建CODE资源,并且类似地,跳转表也将以线性方式进行布局。跳转表中的第一个条目指向可执行文件的主要入口点。


然而对于上面的跳转表,跳转表中的第一个条目实际上指向ID为3的CODE资源。基于资源名称,你可以看到ID 1的名称为“ Main”,且包含最多的代码,这应该是应用程序的入口点,但是INIT 29病毒已修改了跳转表入口以指向自身。

 

下图显示了一部分病毒代码。您可以看到它如何将原始跳转表条目保存到ID为1的CODE资源中。

 

 

运行受感染的应用程序时,它将调用UseResFile并传递refNum值为零。这将检索系统资源文件。


然后,它将在INIT资源部分中创建一个ID为29的新条目。这也是病毒名称的来源。病毒会将其所有712字节自身复制到此INIT资源中。然后,当系统下次启动时,将执行此代码。



感染的系统文件


使用ResEdit也很容易识别受感染的系统文件。我们可以在模拟器中运行受感染的应用程序,然后在病毒启动前后使用ResEdit比较系统文件。

 

 

左侧是病毒启动前的应用程序,右侧是病毒启动后。


你可以看到,在运行了受感染的应用程序之后,现在有了ID为29,大小为712字节的新 INIT资源。如果我们反汇编病毒代码,则可以看到以下内容:

 

 

INIT代码很短,它调用传入$A997的GetTrapAddress来获取当前OpenResFile函数的地址。


它将检查是否已打补丁,如果尚未打补丁,则会保存指向原始函数的指针。然后,它在系统堆上分配712个字节,并在那里复制其自身。


最后,它调用SetTrapAddress将其自身安装为新的OpenResFile函数。



被劫持的OpenResFile


OpenResFile是重要的系统API, Finder每次打开文件或运行可执行文件时,都要调用OpenResFile查找有关该文件的信息。


由于使用频率很高,所以病毒利用它也非常容易感染其他文件。


劫持的OpenResFile版本首先调用该函数的原始操作系统版本。这将加载资源文件并将其设置为当前资源。


然后,病毒会查看该文件是否有任何CODE资源。如果该文件没有任何CODE资源,则该病毒会创建ID为29的INIT资源,并将其712字节复制到其中。


这样会导致文档文件包含病毒代码,但无法感染其他任何文件。如果打开的资源确实具有CODE资源,则病毒会尝试查找要使用的空闲ID。它将使用最低的空闲ID来创建新的资源条目,并将其712字节复制到其中。


之后,它将打开ID为0的CODE资源,并修补跳转表以指向刚创建的新资源。这导致应用程序在下次尝试感染系统文件时开始运行病毒代码。



总结


通过INIT 29病毒尝试感染打开的每个资源文件,可以很容易地看出为什么Disinfectant帮助文件称该病毒为“极具传染性”。


在大多数情况下,该病毒是无害的,只会感染文件。但是,由于它确实劫持了应用程序的启动,因此有可能在启动程序时注意到速度变慢。特


别有趣的是,这个病毒仅用712字节的代码就能完成这么多的工作。



IOCs





- End -





看雪ID:一壶葱茜

https://bbs.pediy.com/user-665727.htm 

*本文由看雪翻译小组 一壶葱茜 翻译、Nxe校对
原文地址:https://knight.sc/malware/2020/05/02/init-29.html



推荐文章++++

*  Ghidra 分析程序及个人感受

*  封包式游戏功能的原理与实现

*  Protobuf协议逆向和仿真&举个栗子

*  网鼎杯2020 伪虚拟机逆向 wp

*  网鼎杯-武为止戈


好书推荐






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



“阅读原文”一起来充电吧!

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

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