论文部分内容阅读
摘要:电脑病毒时刻在网络中传播,影响人们的生活和工作。本文根据杀毒软件查杀电脑病毒的过程和原理,分析PE文件格式在查杀病毒过程中所起的作用。
关键词:PE文件格式;杀毒软件;病毒
中图分类号:TP309.5 文献标识码:A 文章编号:1007-9599(2013)01-0067-02
1 引言
互联网时代,病毒在网络上到处传播,窃取用户信息,破坏用户数据。杀毒软件起着“伸张正义”的角色,对病毒的破坏行为进行拦截和对病毒进行查杀。杀毒软件和病毒之间的关系是矛与盾的较量关系。虽然杀毒软件处于强者地位,一直在追杀着病毒,然而杀毒软件却是一个被动的强者。杀毒软件永远都是在病毒出现后才知道去追杀(杀毒软件预知病毒能力目前还不是很强),而病毒发现自己被追杀后,也会通过伪装、隐藏、变种等方式来躲过杀毒软件的查杀。
面对病毒的伪装、隐藏、变种,杀毒软件如何能准确而快速的对病毒进行查杀呢?本文从杀毒软件查杀病毒的原理出发,分析PE文件格式在杀毒软件定位病毒特征码中的作用。杀毒软件通过快速准确定位病毒特征码,对伪装、隐藏、变种病毒进行查杀。
2 杀毒软件查杀病毒的原理概述
这里以Windows的exe程序为主要分析对象。
2.1 电脑病毒
对于操作系统来说,电脑病毒和其他应用程序是没有差别的,都是一个exe程序。只是功能上有所区别,通常病毒程序的功能是窃取用户信息、破坏电脑中的数据等,而一般的应用程序不会这么做。
2.2 杀毒软件查杀病毒的原理及特征码的作用
由于电脑病毒也是一个exe程序,杀毒软件怎样判断一个exe程序是一个病毒程序呢?
通常是先经过杀毒软件公司的技术人员来分析,验证某程序是否具有窃取用户信息,破坏电脑数据的行为。如果有,则认为是病毒程序。在确定为病毒程序后,则需要提取该病毒文件的特征码并把特征码录入病毒库。如果杀毒软件遇上某程序文件的特征码存在于病毒库中,那么杀毒软件则判断该程序文件是一个病毒文件。从这里可以看出来,杀毒软件对病毒文件的判断主要就是通过特征码比较来判断的。
世界上有无数的exe应用程序,如果某一个非病毒程序文件与一个病毒程序文件有相同的特征码,那么杀毒软件就是“杀错好人”了。“杀错好人”的情况就是“误杀”。
一个病毒程序也可能有无数个变种,如果某一个病毒,杀毒软件只杀了第一次出现时病毒版本,而不杀它的变种版本,那么杀毒软件就是“放走坏人”了。 “放走坏人”的情况就是“漏杀”。
为了减少误杀和漏杀,特征码可能不止一个,而是一组。一组特征码按照一定的排列组合来确定某程序文件是否为病毒,这样会大大减少误杀的情况。然而增加特征码的个数会增加特征码的对比次数,从而增加查杀时间。
从杀毒软件查杀病毒的原理可以知道,杀毒软件杀毒的过程中有如下矛盾:
减少“查杀时间”,那就需要减少特征码的个数,但是这样子会提高“误杀率”和“漏杀率”。
为了降低“误杀率”和“漏杀率”, 需要增加特征码的个数,但是这样子会增多“查杀时间”。
也就是说“查杀时间”与“误杀率”是一对矛盾。而其中解决这对矛盾的关键因素就是特征码的个数了。
针对这对矛盾,杀毒软件需要做的事情就是要定位出精准和稳定的特征码。定位出精准和稳定的特征码就是要找到最少的特征码来标识一个病毒,而且要这些特征码在病毒的变种中也能找到。
PE文件格式对定位出精准的和稳定的特征码有着非常重要的作用。
3 PE文件格式和与病毒文件特征码的联系分析
3.1 Dos 头和Dos Sub
这两段数据是为了兼容Dos操作系统而保留的。在Window 32位/64位操作系统并没有用(除了e_lfanew)。有些病毒也会利用这段空间,所以它可以作为特征码的一部分。
3.2 镜像NT头(IMAGE_NT_HEADERS32)
真正的PE文件内容是从这里开始的。里面主要包含的信息主要有:镜像文件头和镜像可选头。
3.2.1 镜像文件头(IMAGE_FILE_HEADER)
镜像文件头中比较重要的是NumberOfSections和Characteristics. 其中 NumberOfSections代表节表的数量。在遍历各个节的时候需要使用,而很多病毒会添加自己的节,存储病毒需要的数据;Characteristics是PE文件的一些属性信息,通常一个病毒文件和变种文件的这个值是相同的,当然不同的病毒文件的这个值也可能相同。但是相对来说这个值是比较固定的。 所以可以作为特征码的一部分。
3.2.2 镜像可选头(IMAGE_OPTIONAL_HEADER)
镜像可选头包含的内容非常多和重要。对特征码定位有比较大作用的有如下字段:
FileAlignment:数据块存储在文件中的对齐粒度;
SectionAlignment:数据块在内存中的对齐粒度;
SizeOfCode:代码块的大小;
SizeOfInitializedData: 初始化数据的大小;
SizeOfImage:PE文件在内存中的大小;
AddressOfEntryPoint:入口地址;
BaseOfCode:代码段在内存中相对于镜像基址的开始地址;
BaseOfData:数据段在内存中相对于镜像基址的开始地址;
镜像可选头结构中的字段对病毒特征码提取有作用的分如下几类:
A.由于功能不变性和对齐方式引起的数据块大小比较固定。 对齐方式是操作系统为了效率上的提高,对数据按照一定的大小进行分块存储而产生的数据存储方式。例如数据按200K存储,那么 201K的数据,存储的时候就要使用2块200K的空间,也就是400K的空间。
PE文件中数据的存储也类似这样。按照 Section Alignment(数据块在内存中的对齐粒度)和FileAlignment(数据块存储在文件中的对齐粒度)对齐。这两个对齐值会引起镜像可选头的某些字段值也比较固定。
SizeOfCode(代码块的大小)、SizeOfInitializedData(初始化数据的大小)、SizeOfImage(PE文件在内存中的大小),通常一个可执行程序的代码没有很大的修改的话,这几个值比较固定。从而可以通过这几个值定位到比较稳定的特征码。
B.由于功能不变性和数据块大小稳定性引起地址值的比较固定。
对于任何一个程序,在第一次生成后,并通过功能测试发布后,主体功能都是已经确定的,就算修改也只是一些节支上的小改。病毒程序也不例外。
加上对齐粒度的影响,PE文件中的数据块大小也比较稳定,所以引起许多地址值也是比较固定的。
AddressOfEntryPoint(入口地址)、BaseOfCode(代码段在内存中相对于镜像基址的开始地址)、BaseOfData(数据段在内存中相对于镜像基址的开始地址),由于数据块存储是按块存储,而各个数据块只要可执行程序的代码没有很大的修改的话,数据块的大小就基本上不变,所以引起这些存储的地址值也比较固定。
3.3 节表头(IMAGE_SECTION_HEADER)
同3.2.2一样,也是由于对齐粒度的影响引起节表头的 SizeOfRawData(节在文件中对齐后的大小),PointerToRawData(节在文件中开始地址),VirtualAddress(节在内存中开始地址)这三个字段比较稳定。
3.4 各个节
节表头后,就是各个节的数据了。节中存储着各种数据,主要有代码数据、常量数据、资源数据、导出函数数据、导入函数数据.
这些数据在病毒程序功能固定的情况下,都是比较固定的,从而定位出特征码也比较容易。
但是常量数据、资源数据、导出函数数据通常是比较容易修改的。所以定位到这3种数据的特征码也就不固定,例如某特征码定位到常量数据“abc”, 我现在把这个常量数据以组合的方式实现,修改成“ab”+“c”,那么这个特征码就被破坏了。
为什么这3个数据容易被修改?
因为这3个数据是在代码级上的数据,通过简单修改病毒程序的代码,这3个数据的大小可能不变化,但数据的内容可能会发生很大的变化。
而对于代码数据和导入函数数据,这两个数据时编译器和连接器根据代码来生成的,只要代码不是很大修改,这两个数据的内容是比较稳定的。
3.4.1 代码数据
代码数据可以定位到特征码的地方是比较多的。
有函数调用的入栈指令,例如调用某个函数,它有5个参数,在调用该函数附近的数据应该有入栈动作和参数的初始化动作等,这些都可以定位成特征码,而且这特征码比较稳定。 还有,调用其他dll的函数的固定的相对地址,例如某病毒程序调用网络动态库的InternetOpenUrl函数,那么在代码数据的调用指令(call指令)的参数,就是InternetOpenUrl函数在Wininet.dll中的相对地址。除非病毒程序使用动态加载Wininet.dll,则没有InternetO penUrl的相对地址数据,但是动态加载dll的话,就会多了动态加载dll的代码,而且有Wininet.dll常量,就变成了定位动态加载dll这段代码的特征码,这还是通过代码数据来定位。
3.4.2 导入函数数据
导入函数数据就是程序中调用了那些dll的函数数据,这些数据包含dll的名字,被调用的函数名字或者序号等,例如Wininet.dll的InternetOpenUrl、InternetOpen。这些字符都可以用来定位特征码,还有就是一些地址数据。这些数据是编译器和连接器生成的。很难通过代码级修改来改变,在汇编级修改,改动也很大,涉及到代码数据的修改和各种数据的相对地址的修改,所以通过导入函数数据定位的特征码很稳定。
4 总结
上面说明的那些数据通过PE文件可以快速的找到,而且对exe程序进行小范围的修改,那些数据基本上不会改变(某些注销掉的dll函数除外)。
杀毒软件通过PE文件格式对这些数据进行分析,可以找到一些比较稳定的不常变的数据,把这些数据组成多组特征,从而可以快速稳定的定位PE文件的特征码和判断PE文件是否为病毒文件。
参考文献:
[1]威利.Windows PE权威指南[M].北京:机械工业出版社:2011:54-117.
关键词:PE文件格式;杀毒软件;病毒
中图分类号:TP309.5 文献标识码:A 文章编号:1007-9599(2013)01-0067-02
1 引言
互联网时代,病毒在网络上到处传播,窃取用户信息,破坏用户数据。杀毒软件起着“伸张正义”的角色,对病毒的破坏行为进行拦截和对病毒进行查杀。杀毒软件和病毒之间的关系是矛与盾的较量关系。虽然杀毒软件处于强者地位,一直在追杀着病毒,然而杀毒软件却是一个被动的强者。杀毒软件永远都是在病毒出现后才知道去追杀(杀毒软件预知病毒能力目前还不是很强),而病毒发现自己被追杀后,也会通过伪装、隐藏、变种等方式来躲过杀毒软件的查杀。
面对病毒的伪装、隐藏、变种,杀毒软件如何能准确而快速的对病毒进行查杀呢?本文从杀毒软件查杀病毒的原理出发,分析PE文件格式在杀毒软件定位病毒特征码中的作用。杀毒软件通过快速准确定位病毒特征码,对伪装、隐藏、变种病毒进行查杀。
2 杀毒软件查杀病毒的原理概述
这里以Windows的exe程序为主要分析对象。
2.1 电脑病毒
对于操作系统来说,电脑病毒和其他应用程序是没有差别的,都是一个exe程序。只是功能上有所区别,通常病毒程序的功能是窃取用户信息、破坏电脑中的数据等,而一般的应用程序不会这么做。
2.2 杀毒软件查杀病毒的原理及特征码的作用
由于电脑病毒也是一个exe程序,杀毒软件怎样判断一个exe程序是一个病毒程序呢?
通常是先经过杀毒软件公司的技术人员来分析,验证某程序是否具有窃取用户信息,破坏电脑数据的行为。如果有,则认为是病毒程序。在确定为病毒程序后,则需要提取该病毒文件的特征码并把特征码录入病毒库。如果杀毒软件遇上某程序文件的特征码存在于病毒库中,那么杀毒软件则判断该程序文件是一个病毒文件。从这里可以看出来,杀毒软件对病毒文件的判断主要就是通过特征码比较来判断的。
世界上有无数的exe应用程序,如果某一个非病毒程序文件与一个病毒程序文件有相同的特征码,那么杀毒软件就是“杀错好人”了。“杀错好人”的情况就是“误杀”。
一个病毒程序也可能有无数个变种,如果某一个病毒,杀毒软件只杀了第一次出现时病毒版本,而不杀它的变种版本,那么杀毒软件就是“放走坏人”了。 “放走坏人”的情况就是“漏杀”。
为了减少误杀和漏杀,特征码可能不止一个,而是一组。一组特征码按照一定的排列组合来确定某程序文件是否为病毒,这样会大大减少误杀的情况。然而增加特征码的个数会增加特征码的对比次数,从而增加查杀时间。
从杀毒软件查杀病毒的原理可以知道,杀毒软件杀毒的过程中有如下矛盾:
减少“查杀时间”,那就需要减少特征码的个数,但是这样子会提高“误杀率”和“漏杀率”。
为了降低“误杀率”和“漏杀率”, 需要增加特征码的个数,但是这样子会增多“查杀时间”。
也就是说“查杀时间”与“误杀率”是一对矛盾。而其中解决这对矛盾的关键因素就是特征码的个数了。
针对这对矛盾,杀毒软件需要做的事情就是要定位出精准和稳定的特征码。定位出精准和稳定的特征码就是要找到最少的特征码来标识一个病毒,而且要这些特征码在病毒的变种中也能找到。
PE文件格式对定位出精准的和稳定的特征码有着非常重要的作用。
3 PE文件格式和与病毒文件特征码的联系分析
3.1 Dos 头和Dos Sub
这两段数据是为了兼容Dos操作系统而保留的。在Window 32位/64位操作系统并没有用(除了e_lfanew)。有些病毒也会利用这段空间,所以它可以作为特征码的一部分。
3.2 镜像NT头(IMAGE_NT_HEADERS32)
真正的PE文件内容是从这里开始的。里面主要包含的信息主要有:镜像文件头和镜像可选头。
3.2.1 镜像文件头(IMAGE_FILE_HEADER)
镜像文件头中比较重要的是NumberOfSections和Characteristics. 其中 NumberOfSections代表节表的数量。在遍历各个节的时候需要使用,而很多病毒会添加自己的节,存储病毒需要的数据;Characteristics是PE文件的一些属性信息,通常一个病毒文件和变种文件的这个值是相同的,当然不同的病毒文件的这个值也可能相同。但是相对来说这个值是比较固定的。 所以可以作为特征码的一部分。
3.2.2 镜像可选头(IMAGE_OPTIONAL_HEADER)
镜像可选头包含的内容非常多和重要。对特征码定位有比较大作用的有如下字段:
FileAlignment:数据块存储在文件中的对齐粒度;
SectionAlignment:数据块在内存中的对齐粒度;
SizeOfCode:代码块的大小;
SizeOfInitializedData: 初始化数据的大小;
SizeOfImage:PE文件在内存中的大小;
AddressOfEntryPoint:入口地址;
BaseOfCode:代码段在内存中相对于镜像基址的开始地址;
BaseOfData:数据段在内存中相对于镜像基址的开始地址;
镜像可选头结构中的字段对病毒特征码提取有作用的分如下几类:
A.由于功能不变性和对齐方式引起的数据块大小比较固定。 对齐方式是操作系统为了效率上的提高,对数据按照一定的大小进行分块存储而产生的数据存储方式。例如数据按200K存储,那么 201K的数据,存储的时候就要使用2块200K的空间,也就是400K的空间。
PE文件中数据的存储也类似这样。按照 Section Alignment(数据块在内存中的对齐粒度)和FileAlignment(数据块存储在文件中的对齐粒度)对齐。这两个对齐值会引起镜像可选头的某些字段值也比较固定。
SizeOfCode(代码块的大小)、SizeOfInitializedData(初始化数据的大小)、SizeOfImage(PE文件在内存中的大小),通常一个可执行程序的代码没有很大的修改的话,这几个值比较固定。从而可以通过这几个值定位到比较稳定的特征码。
B.由于功能不变性和数据块大小稳定性引起地址值的比较固定。
对于任何一个程序,在第一次生成后,并通过功能测试发布后,主体功能都是已经确定的,就算修改也只是一些节支上的小改。病毒程序也不例外。
加上对齐粒度的影响,PE文件中的数据块大小也比较稳定,所以引起许多地址值也是比较固定的。
AddressOfEntryPoint(入口地址)、BaseOfCode(代码段在内存中相对于镜像基址的开始地址)、BaseOfData(数据段在内存中相对于镜像基址的开始地址),由于数据块存储是按块存储,而各个数据块只要可执行程序的代码没有很大的修改的话,数据块的大小就基本上不变,所以引起这些存储的地址值也比较固定。
3.3 节表头(IMAGE_SECTION_HEADER)
同3.2.2一样,也是由于对齐粒度的影响引起节表头的 SizeOfRawData(节在文件中对齐后的大小),PointerToRawData(节在文件中开始地址),VirtualAddress(节在内存中开始地址)这三个字段比较稳定。
3.4 各个节
节表头后,就是各个节的数据了。节中存储着各种数据,主要有代码数据、常量数据、资源数据、导出函数数据、导入函数数据.
这些数据在病毒程序功能固定的情况下,都是比较固定的,从而定位出特征码也比较容易。
但是常量数据、资源数据、导出函数数据通常是比较容易修改的。所以定位到这3种数据的特征码也就不固定,例如某特征码定位到常量数据“abc”, 我现在把这个常量数据以组合的方式实现,修改成“ab”+“c”,那么这个特征码就被破坏了。
为什么这3个数据容易被修改?
因为这3个数据是在代码级上的数据,通过简单修改病毒程序的代码,这3个数据的大小可能不变化,但数据的内容可能会发生很大的变化。
而对于代码数据和导入函数数据,这两个数据时编译器和连接器根据代码来生成的,只要代码不是很大修改,这两个数据的内容是比较稳定的。
3.4.1 代码数据
代码数据可以定位到特征码的地方是比较多的。
有函数调用的入栈指令,例如调用某个函数,它有5个参数,在调用该函数附近的数据应该有入栈动作和参数的初始化动作等,这些都可以定位成特征码,而且这特征码比较稳定。 还有,调用其他dll的函数的固定的相对地址,例如某病毒程序调用网络动态库的InternetOpenUrl函数,那么在代码数据的调用指令(call指令)的参数,就是InternetOpenUrl函数在Wininet.dll中的相对地址。除非病毒程序使用动态加载Wininet.dll,则没有InternetO penUrl的相对地址数据,但是动态加载dll的话,就会多了动态加载dll的代码,而且有Wininet.dll常量,就变成了定位动态加载dll这段代码的特征码,这还是通过代码数据来定位。
3.4.2 导入函数数据
导入函数数据就是程序中调用了那些dll的函数数据,这些数据包含dll的名字,被调用的函数名字或者序号等,例如Wininet.dll的InternetOpenUrl、InternetOpen。这些字符都可以用来定位特征码,还有就是一些地址数据。这些数据是编译器和连接器生成的。很难通过代码级修改来改变,在汇编级修改,改动也很大,涉及到代码数据的修改和各种数据的相对地址的修改,所以通过导入函数数据定位的特征码很稳定。
4 总结
上面说明的那些数据通过PE文件可以快速的找到,而且对exe程序进行小范围的修改,那些数据基本上不会改变(某些注销掉的dll函数除外)。
杀毒软件通过PE文件格式对这些数据进行分析,可以找到一些比较稳定的不常变的数据,把这些数据组成多组特征,从而可以快速稳定的定位PE文件的特征码和判断PE文件是否为病毒文件。
参考文献:
[1]威利.Windows PE权威指南[M].北京:机械工业出版社:2011:54-117.