巧破“4744”病毒

Author: 福建 郭升平 Date: 1996-10-18

        近来发现一种病毒,其特征如下:
        1.侵染.EXE和.COM文件,首先是COMMAND.COM。
        2.病毒进驻内存时,用DIR查看所有染毒文件,均未见长度增加(病毒隐形),甚至用带有写保护的软盘中无毒的MSAV、SCAN116等查找,也发现不了染毒文件的变化。但目录区的文件长度项数值增大了。
        3.以无毒的系统软盘启动,则可发现文件长度都增加了4744字节。
        4.用DEBUG、PCTOOLS等工具将各染毒文件与源文件内容进行分析比较,发现增加的部分竟都不相同(病毒变形)。
        由于病毒具有隐形及变化能力,所以很不容易被发现。
        本人在分析染毒程序时发现一种巧妙的破解法。由于病毒是变化的,无法确定其特征字串,但病毒的隐形功能则暴露了它的一个致命弱点。病毒(驻内存时)为了不让FC等命令比较出染毒文件内容的变化,必然要备份一份源程序的结构数据,以便准在比较时跳开病毒体,回到源程序上。对.EXE文件来说就是.EXE文件头。而标准.EXE文件都是以“MZ”(4D 5A)开始的,且只有一个。“MZ”后面的4个字节分别为文件长除以512的余数及商+1。染毒后可查出两个“4D 5A”,一个是文件头,另一个是源文件头部。为了避免重复,可用“00 00 4D 5A”为特征字串进行查找,这样文件头就被忽略,而查到的“4D 5A”就是病毒保存的文件头,这样就可以确定该文件已染毒。(程序代码通常很少与这个特征串重复的,且文件头部结构与程序代码在数据形态上很容易区分)。“4D 5A”前面的“00”通常取两、三个足够。将两个“4D 5A”后的文件长度数据相减即得4744!.COM型文件无固定的文件头,但也可以用“00 00 ** **”的方式查找。如查找COMMAND.COM文件,特征串为“00 00 E9”。多取一、两个“00”查找,很少有查错的。
        用此法查找“4744”病毒,无一漏网。后来用超级巡警KV200检测保存的病毒种子,才知这是NATAS/拿他死幽灵王!(无穷变形、隐形、攻击.COM、.EXE文件…)
        这里提出以“00”+文件头字节为特征字串查找还原程序长度的一类隐形病毒的方法,避开病毒的特征码,特别适用于变形类病毒。注意查找字符串是对于文件查找,而不对磁盘查找。