病毒分析 - 特征码提取

资料收集与网络(点击对应标题有原帖地址)

  • 特征码

  • 什么是特征码 * 怎么提取特征码 * 特征码选取的基本方法

  • 1、计算校验和 * 2、提取特征字符串

特征码

什么是特征码

程序运行时,在内存中为完成特定的动作,要有特殊的指令,一个程序在运行时,同一内存地址的指令是相同的同一个程序中,一段连续的地址(它的指令相同) ,那么我截取这段地址,就可以判断它是不是这个程序。为了防止出现病毒的误查杀,可以提取出多段特征码。

怎么提取特征码

一般来说,病毒特征码需要满足以下几个要求:

1 1、不能从数据区提取,因为数据区的内容很容易改变,一旦病毒程序变更版本,改变了数据内容,特征码就会失效。而其它的区块则相对来说保险一些。 2 3 2、在保持特征码的唯一性的前提下,应当尽量使得特征码短小精悍,从而减少检测过程中的时间与空间的复杂度,提高检测效率。 4 5 3、经过详细的逆向分析之后选取出来的特征码,才足以将该病毒与其它病毒或正常程序相区别。 6 7 4、病毒程序的特征码一定不能匹配到普通程序,比如选取病毒入口点的二进制代码,就必然出现误报的情况。 8 9 5、特征码的长度应当控制在64个字节以内。 10 11

特征码选取的基本方法

病毒的特征码可能是病毒的感染标记,也可能是若干计算机指令组成的一段计算机程序。一般使用以下几种方法来提取病毒的特征码

1、计算校验和

这种方法的特点是简单快速,也是我们之前的专杀工具所采用的方式。但是采用这种方法,一种特征码只能匹配一个病毒,即便病毒的变动很小,也需要重新提取特征码,这造成的后果是会使得特征码库过于庞大,一般用于临时提取特征码。所以这种计算校验和的方式不是我们讨论的重点。

2、提取特征字符串

病毒文件中总会存在一些可供识别的字符串,很多时候,这些字符串是某个病毒所特有的,因此这种方式适用于所有病毒的特征码的提取。采用这种方式甚至还能识别某一大类病毒,但是缺点是需要耗费比较多的扫描时间。以“熊猫烧香”病毒为例,经过我们之前的逆向分析可以知道,病毒最开始会使用“xboy”以及“whboy”这两个字符串来进行解密的操作。比如我们尝试一下,在病毒程序的二进制代码中搜索“whboy”:
在这里插入图片描述
一般的程序中不会出现“whboy”以及“xboy”这两段字符,因此就可以考虑将这两个字符串或者其中的一个字符串作为“熊猫烧香”病毒的特征码。这样只要对目标程序中的可打印字符串进行检索,如果发现了“whboy”就可以认为目标程序是“熊猫烧香”病毒程序。这样即便是病毒出现了变种,只要它依旧包含有“whboy”,我们就依然能够实现查杀的工作。或者我们也可以考虑使用更长的字符串,比如上图中开始的那32个字节,即“****”,将其十六进制代码提取出来作为特征码,也是可以的。那么我就将这段字符串作为“熊猫烧香”的特征码。然后可以使用PEiD查看一下该段代码所在的区段:
在这里插入图片描述
可见,文件偏移0x0c040位于CODE,即代码区段中,那么其实在进行匹配的时候,我们只要检索目标程序的这个区段就可以了。或者为了方便起见,我们在检测目标程序时,只检测位于文件偏移0x0c040处的字符,如果能够匹配病毒特征码,就认为目标程序是病毒。text区段,也就是代码段中。
当然,从反汇编代码中进行特征码的提取,方法是有很多的,可能每个人都有自己的方法,我也不敢说我所提取出来的特征码就一定满足唯一性等特征,我这里所举的都是最简单的例子

在实际的工作中,对于同一个病毒而言,为了保险起见,特征码可能会选择多处,既有字符串,又有反汇编代码,从而保证检测的准确性。
————————————————
版权声明:本文为CSDN博主「ioio_jy」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ioio_jy/article/details/51198544

代码交流 2021