病毒木马查杀实战第018篇:病毒特征码查杀之基本原理

本系列教程版权归“i春秋”所有,转载请标明出处。

       本文配套视频教程,请访问“i春秋”(www.ichunqiu.com)。


前言

在本系列的导论中,我曾经在“病毒查杀方法”中简单讲解过特征码查杀这种方式。而我也在对于实际病毒的专杀工具编写中,使用过CRC32算法来对目标程序进行指纹匹配,从而进行病毒判定。一般来说,类似于MD5以及CRC32这样的算法,在病毒大规模爆发时是可以提高查杀效率的,但是传统的更为常用的方法是采用以静态分析文件的结构为主并结合动态分析的方法,通过反汇编来寻找病毒的内容代码段、入口点代码段等等信息。尽管病毒特征码的定义非常简单,但是特征码的具体提取方法,却鲜有资料可供参考。那么我在这里就简单讨论一下关于病毒特征码的知识。

特征码选取的基本要求

说到特征码,也许我们接触最多的是在使用查壳工具PEiD时,对目标程序进行判定时所采用的特征匹配代码。PEiD的特征码保存在程序目录的userdb.txt中,举个例子来说,我们拿之前研究过的cf.exe“敲竹杠”病毒样本来看。首先将病毒样本拖入PEiD:

图1

可见,程序是由“MicrosoftVisual C# / Basic .NET”编译的,那么为什么PEiD能够识别出这款软件是怎么编译的呢?我们可以先查看一下程序入口的首字节:

图2

可见程序的入口地址代码为“FF 25 0020 40 00”然后是一大串的“00”。然后我们打开userdb.txt,查找一下“Microsoft Visual C# / Basic .NET”字符串来看一下,可以找到以下结果:

[MicrosoftVisual C# / Basic .NET]

signature= FF 25 00 20 ?? ?? 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

ep_only= true

在signature后面,是“FF 25 0020 ?? ??”(其中的??表示任意字符),也就是说,只要目标程序的入口代码部分能够匹配“FF 25 00 20 ?? ??”,就认为程序是由“Microsoft Visual C# / Basic .NET”编译的。而通过对比图2,我们的cf.exe程序的入口代码可以匹配这段特征码,于是也就检测出了cf.exe的编译方式。PEiD通过对这种“共性”的匹配,就能够识别出各种各样的壳以及编译方式了。

病毒程序的特征码与上述我们讲的有相同的地方也有不同的地方。相同点在于我们同样需要在病毒的二进制代码中提取一部分作为病毒特征。但是我们的病毒程序是不能够采用上述这种方式,即从程序入口进行提取的,因为这样一来病毒程序和普通的程序的检测结果就没有区别了。因此计算机病毒的特征码需要能够把病毒程序与一般的程序区分开来,即能够唯一标识一个或者一类多态病毒,要能够成为计算机病毒程序的“指纹”。如果只是随意从病毒内选取一段二进制代码串作为该病毒的特征码,很可能会在正常的程序中也匹配到该特征码,从而出现误报的情况。所以在我看来,选取恰当的特征代码串绝对是一个很具技巧性的工作,这需要经验的积累以及对目标病毒的深刻理解。当然对于不同的杀毒软件厂商而言,都会有自己的一套提取特征码的方式,可能是自动获取,也可能是手动分析。

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

1、不能从数据区提取,因为数据区的内容很容易改变,一旦病毒程序变更版本,改变了数据内容,特征码就会失效。而其它的区块则相对来说保险一些。

2、在保持特征码的唯一性的前提下,应当尽量使得特征码短小精悍,从而减少检测过程中的时间与空间的复杂度,提高检测效率。

3、经过详细的逆向分析之后选取出来的特征码,才足以将该病毒与其它病毒或正常程序相区别。

4、病毒程序的特征码一定不能匹配到普通程序,比如选取病毒入口点的二进制代码,就必然出现误报的情况。

5、特征码的长度应当控制在64个字节以内。

特征码选取的基本方法

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

       1、计算校验和

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

       2、提取特征字符串

病毒文件中总会存在一些可供识别的字符串,很多时候,这些字符串是某个病毒所特有的,因此这种方式适用于所有病毒的特征码的提取。采用这种方式甚至还能识别某一大类病毒,但是缺点是需要耗费比较多的扫描时间。以我们之前讨论过的“熊猫烧香”病毒为例,经过我们之前的逆向分析可以知道,病毒最开始会使用“xboy”以及“whboy”这两个字符串来进行解密的操作。比如我们尝试一下,在病毒程序的二进制代码中搜索“whboy”:

图3

相信一般的程序中不会出现“whboy”以及“xboy”这两段字符,因此就可以考虑将这两个字符串或者其中的一个字符串作为“熊猫烧香”病毒的特征码。这样只要对目标程序中的可打印字符串进行检索,如果发现了“whboy”就可以认为目标程序是“熊猫烧香”病毒程序。这样即便是病毒出现了变种,只要它依旧包含有“whboy”,我们就依然能够实现查杀的工作。或者我们也可以考虑使用更长的字符串,比如上图中开始的那32个字节,即“***武*汉*男*生*感*染*下*载*者***”,将其十六进制代码提取出来作为特征码,也是可以的。那么我就将这段字符串作为“熊猫烧香”的特征码。然后可以使用PEiD查看一下该段代码所在的区段:

图4

可见,文件偏移0x0c040位于CODE,即代码区段中,那么其实在进行匹配的时候,我们只要检索目标程序的这个区段就可以了。或者为了方便起见,我们在检测目标程序时,只检测位于文件偏移0x0c040处的字符,如果能够匹配病毒特征码,就认为目标程序是病毒。

       3、提取特征反汇编代码

病毒的反汇编代码往往都会有一些比较有特色的地方,那么我们就可以将这些反汇编代码的十六进制数值提取出来作为特征码,以唯一的标识该病毒。比如我们之前分析过的U盘病毒,它的反汇编代码有这么几句:

图5

这里第二行的反汇编代码为“call $+5”,其实这种写法并不多见。但事实上这不过是IDA Pro解析方式上的问题,在OD中,这段代码会被解析为“call 00401929”:

图6

那么我们就不妨将这段十六进制代码提取出来作为我们的特征码。同样选取32个字节,并且加上文件的偏移:

图7

此处的文件偏移为0x1921,查看区段表:

图8

可见它位于.text区段,也就是代码段中。

当然,从反汇编代码中进行特征码的提取,方法是有很多的,可能每个人都有自己的方法,我也不敢说我所提取出来的特征码就一定满足唯一性等特征,我这里所举的都是最简单的例子。但是选取以下这段代码明显是不合适的:

图9

因为CreateFile这个函数实在是过于普遍,因此如果选取这段代码作为特征码,那么误报的可能性是非常高的,这需要大家特别注意。当然在实际的工作中,对于同一个病毒而言,为了保险起见,特征码可能会选择多处,既有字符串,又有反汇编代码,从而保证检测的准确性。

       4、两段检验和形式

这种方式包含两段病毒文件特殊位置的数据,该数据能够代表该病毒的特性。我们将这两段数据的校验和计算出来。那么在检测扫描目标程序时,先计算目标文件在该位置处的校验和的值,通过判断是否符合相应的特征码来判定目标程序是否为病毒程序。这种方法的准确率高,耗时也比较少。很多时候能够利用一个特征码检测出同一类的病毒。

特征码检测的不足

病毒特征码只是一种检测的方式,只能够防患于未然。如果说计算机已经中了病毒,那么就算我们拥有该病毒的特征码,至多只能将病毒从计算机中删除,而无法修复该病毒对计算机造成的危害。另外,现在有些软件能够实现对病毒特征码的定位,也就是能够将病毒程序分为几个部分,然后使用杀毒软件对这些部分进行查杀,哪部分报毒,就说明特征码在哪部分中,然后再不断地进行细分,再用杀软进行检测,最终确定特征码的具体位置。而找到特征码后,就可以修改特征码,从而实现针对于某一款或某几款杀毒软件的免杀。

云查杀技术简介

既然这次讲到了病毒的特征码,那么在最后不得不简单讲一下云查杀的一些知识。因为传统的杀毒软件,需要用户不断地升级病毒库,将病毒特征码保存在本地的计算机中,这样才能够让本地的杀毒软件能够识别各种各样的新式病毒。这种方式的缺点是占用本地计算机资源过大,而且也有一定的滞后性,为了解决这个问题,云查杀技术也就应运而生了。

云查杀是依赖于云计算的技术,云技术是分布式计算的一种,其最基本的概念,是通过计算机网络将庞大的计算处理程序自动分拆成无数个较小的子程序,之后再交由多部服务器所组成的庞大系统经过搜寻、计算分析之后将处理结果回传给用户。通过这项技术,网络服务提供者可以在数秒之内,达成处理数以千万计甚至亿万计的信息,从而达到和“超级计算机”同样强大效能的网络服务。

所谓云查杀,就是把安全引擎和病毒木马特征库放在服务器端,解放用户的个人计算机,从而获取更加优秀的查杀效果、更快的安全响应时间、更小的资源占用以及更快的查杀速度,并且无需升级病毒木马特征库。

图10

云查杀是对付病毒木马泛滥的一种先进而有效的方法。判断一个文件是不是病毒,计算的工作不在用户计算机中完成,而是在一个安全公司的“云端”,即服务端来做,“云端”可以配置上千台服务器,以进行快速的大规模计算,这是对付病毒非常有效的方法。

云查杀也有其弊端,最主要的就是要求用户必须连接互联网,否则无法完成病毒的查杀任务。另外用户隐私的泄露问题也是云查杀技术必须要解决的问题。

小结

这次我简单讲解了一下关于病毒特征码的知识,希望大家能够依照上述方法,或者自己总结方法,试着查找一下病毒程序中符合条件的特征码。相信大家找到的特征码能够更加有效地对病毒进行识别。

时间: 2024-10-09 02:43:32

病毒木马查杀实战第018篇:病毒特征码查杀之基本原理的相关文章

病毒木马查杀实战第020篇:Ring3层主动防御之基本原理

本系列教程版权归"i春秋"所有,转载请标明出处.        本文配套视频教程,请访问"i春秋"(www.ichunqiu.com). 前言 如果说我们的计算机中安装有杀毒软件,那么当我们有意或无意地下载了一个恶意程序后,杀软一般都会弹出一个对话框提示我们,下载的程序很可能是恶意程序,建议删除之类的,或者杀软就不提示,直接删除了:或者当我们运行了某一个程序,包含有可疑操作,比如创建开机启动项,那么杀软一般也会对此进行提醒:或者当我们在计算机中插入U盘,杀软往往也会

病毒木马查杀实战第026篇:“白加黑”恶意程序研究(上)

前言 众所周知,传统的恶意程序都是由单一文件构成的,从而实现某一种或者几种恶意功能.而这类的恶意程序为了避免被发现以及被查杀,往往会采用五花八门的自我隐藏技术以及免杀技术,病毒程序的作者很多时候也是脑洞大开,为了对抗杀软的查杀也是无所不用其极.我们每天所处理的恶意文件里面,反查杀手段运用得最好的就是脚本木马,关于这类程序,我在之前的<病毒木马查杀实战第025篇:JS下载者脚本木马的分析与防御>这篇博文中也做过简单的论述.可是,不论恶意程序如何进化,杀软厂商总有各种各样的方法来应对现有的以及未知

病毒木马查杀实战第019篇:病毒特征码查杀之编程实现

       本系列教程版权归"i春秋"所有,转载请标明出处.        本文配套视频教程,请访问"i春秋"(www.ichunqiu.com). 前言 上次我们已经简单介绍过了病毒特征码提取的基本方法,那么这次我们就通过编程来实现对于病毒的特征码查杀. 定义特征码存储结构 为了简单起见,这次我们使用的是setup.exe以及unpacked.exe这两个病毒样本.经过上次的分析,我们对setup.exe样本的特征码提取如下: \x2a\x2a\x2a\xce\

病毒木马查杀实战第015篇:U盘病毒之脱壳研究

本系列教程版权归"i春秋"所有,转载请标明出处.        本文配套视频教程,请访问"i春秋"(www.ichunqiu.com). 前言 由于我们的最终目标是编写出针对于这次的U盘病毒的专杀工具,而通过上次的分析我们知道,病毒有可能在不同的计算机中会以不同的名称进行显示,如果真是如此,那么就有必要在此分析出病毒的命名规律等特征,然后再进行查杀. 对病毒样本进行脱壳 按照常规,首先是对病毒进行查壳的工作,这里我所使用的是"小生我怕怕"版的PE

病毒木马查杀实战第022篇:txt病毒研究

       本系列教程版权归"i春秋"所有,转载请标明出处. 本文配套视频教程,请访问"i春秋"(www.ichunqiu.com). 前言 反病毒爱好者们很喜欢讨论的一个问题就是,如今什么样的病毒才算得上是主流,或者说什么样的病毒才是厉害的病毒呢?我们之前的课程所讲解的都是Ring3层的病毒,所以有些朋友可能会认为,那么Ring0层的病毒其实才是最厉害的,也是病毒发展的主流:或者有朋友可能认为,采取了五花八门的隐藏技术的病毒才是最难对付的.诚然,大家的观点都很有

病毒木马查杀实战第014篇:U盘病毒之手动查杀

       本系列教程版权归"i春秋"所有,转载请标明出处. 本文配套视频教程,请访问"i春秋"(www.ichunqiu.com). 在U盘中发现病毒 前段时间需要往虚拟机中拷贝点资料,如同往常一样,插上我的U盘,并且在虚拟机的设置中选择连接U盘.奇怪的是这次的连接时间较以往长,并且还出现了"自动播放"窗口: 图1 自动播放窗口 在扫描完后,来到了U盘的打开类型选择窗口: 图2 以前我在虚拟机中使用U盘,都没有出现过"自动播放&qu

杀毒与免杀技术详解之三:特征码免杀实战

1.前言 在前篇<杀毒与免杀技术详解之二:特征码定位-工具及原理 >中,笔者主要介绍了MyCCL这个特征码定位工具的使用方式,并对它的原理进行了一步步的分析解释,最后讲了学习这一工具的意义和作用.今天,在这实战篇中,我们将应用前面学到的知识,以几个市面上的特征码杀毒引擎为例,进行实战的免杀.同时也非常欢迎诸位朋友指点,互相学习.进步! 2.实战环境 实验主机: Vmware 11虚拟机 操作系统: XP sp3 实验用具: MyCCL 2.1.C32Asm.一份病毒样本(encode.exe)

病毒木马查杀实战第017篇:U盘病毒之专杀工具的编写

       本系列教程版权归"i春秋"所有,转载请标明出处. 本文配套视频教程,请访问"i春秋"(www.ichunqiu.com). 前言 经过前几次的讨论,我们对于这次的U盘病毒已经有了一定的了解,那么这次我们就依据病毒的行为特征,来编写针对于这次U盘病毒的专杀工具. 专杀工具功能说明 因为这次是一个U盘病毒,所以我打算把这次的专杀工具换一种形式实现.不再像前几次那样需要被动运行,而是当我们的专杀工具执行后,一旦有U盘插入,就能主动检测U盘内容,如果发现病毒,

病毒木马查杀实战第021篇:Ring3层主动防御之编程实现

本系列教程版权归"i春秋"所有,转载请标明出处.        本文配套视频教程,请访问"i春秋"(www.ichunqiu.com). 前言 我们这次会依据上次的内容,编程实现一个Ring3层的简单的主动防御软件.整个程序使用MFC实现,程序开始监控时,会将DLL程序注入到explorer.exe进程中,这样每当有新的进程创建,程序首先会进行特征码匹配,从而判断目标程序是否为病毒程序,如果是,则进行拦截,反之不拦截.停止监控时,再卸载掉DLL程序.以下就是程序各个