特征码选取的基本方法
MD5以及CRC32这样的算法
1、计算校验和
这种方法的特点是简单快速,也是我们之前的专杀工具所采用的方式。但是采用这种方法,一种特征码只能匹配一个病毒,即便病毒的变动很小,也需要重新提取特征码,这造成的后果是会使得特征码库过于庞大,一般用于临时提取特征码。所以这种计算校验和的方式不是我们讨论的重点。
2、提取特征字符串
病毒文件中总会存在一些可供识别的字符串,很多时候,这些字符串是某个病毒所特有的,因此这种方式适用于所有病毒的特征码的提取。采用这种方式甚至还能识别某一大类病毒,但是缺点是需要耗费比较多的扫描时间。以我们之前讨论过的“熊猫烧香”病毒为例,经过我们之前的逆向分析可以知道,病毒最开始会使用“xboy”以及“whboy”这两个字符串来进行解密的操作。比如我们尝试一下,在病毒程序的二进制代码中搜索“whboy”:
相信一般的程序中不会出现“whboy”以及“xboy”这两段字符,因此就可以考虑将这两个字符串或者其中的一个字符串作为“熊猫烧香”病毒的特征码。这样只要对目标程序中的可打印字符串进行检索,如果发现了“whboy”就可以认为目标程序是“熊猫烧香”病毒程序。这样即便是病毒出现了变种,只要它依旧包含有“whboy”,我们就依然能够实现查杀的工作。或者我们也可以考虑使用更长的字符串,比如上图中开始的那32个字节,即“***武*汉*男*生*感*染*下*载*者***”,将其十六进制代码提取出来作为特征码,也是可以的。那么我就将这段字符串作为“熊猫烧香”的特征码。
3、提取特征反汇编代码
病毒的反汇编代码往往都会有一些比较有特色的地方,那么我们就可以将这些反汇编代码的十六进制数值提取出来作为特征码,以唯一的标识该病毒。当然在实际的工作中,对于同一个病毒而言,为了保险起见,特征码可能会选择多处,既有字符串,又有反汇编代码,从而保证检测的准确性。
4、两段检验和形式
这种方式包含两段病毒文件特殊位置的数据,该数据能够代表该病毒的特性。我们将这两段数据的校验和计算出来。那么在检测扫描目标程序时,先计算目标文件在该位置处的校验和的值,通过判断是否符合相应的特征码来判定目标程序是否为病毒程序。这种方法的准确率高,耗时也比较少。很多时候能够利用一个特征码检测出同一类的病毒。
特征码检测的不足
病毒特征码只是一种检测的方式,只能够防患于未然。如果说计算机已经中了病毒,那么就算我们拥有该病毒的特征码,至多只能将病毒从计算机中删除,而无法修复该病毒对计算机造成的危害。另外,现在有些软件能够实现对病毒特征码的定位,也就是能够将病毒程序分为几个部分,然后使用杀毒软件对这些部分进行查杀,哪部分报毒,就说明特征码在哪部分中,然后再不断地进行细分,再用杀软进行检测,最终确定特征码的具体位置。而找到特征码后,就可以修改特征码,从而实现针对于某一款或某几款杀毒软件的免杀。