PE文件格式对定位病毒特征码的作用
本文主要从杀毒软件查杀病毒的原理出发,分析PE文件格式在杀毒软件定位病毒特征码中的作用。杀毒软件通过快速准确定位病毒特征码,对伪装,隐藏,变种病毒进行查杀。
一.杀毒软件查杀病毒的原理概述
对于操作系统来说,电脑病毒和其他应用程序没有差别的,都是一个exe程序。只是功能上有所区别,通常病毒程序都是窃取用户信息,破坏电脑中的数据等,而不一般程序不会这么做。杀毒软件是怎么判断一个exe程序是病毒程序呢?
通常是先经过杀毒软件公司的技术人员来分析,验证程序是否具有窃取用户信息,破坏电脑数据的行为。如果有,则认为是病毒程序,在确定为病毒程序后,则需要提取该病毒程序的特征码并把特征码录入病毒库。如果杀毒软件遇上某程序文件的特征码存在于病毒库中,那么杀毒软件则判断该程序为病毒程序。由此可见,杀毒软件是根据特征码来判断一个程序是否为病毒的。为了减少“误杀”和“漏杀”,特征码可能不止一个,而是一组,一组特征码按照一定的排列组合来确定某程序是否为病毒。然而增加特征码就会增加“查杀时间” ,所以关键因素就是特征码的个数。
杀毒软件需要做的事情就是定位出精准和稳定的特征码,这就需要最少的特征码来标识一个病毒,而且需要这些特征码在病毒的变种中也能找到。
二.PE文件格式与病毒文件特征码的联系分析
1.Dos头(大小64字节):为了兼容Dos操作系统而保留的,最后一个字段e_lfanew(指出PE头的文件偏移位置,大小为4字节)很有效。第一个字段e_magic(一般为5A 4D 表示是可执行文件exe)大小为2字节。
2.Image_NT_Header:其构成由4字节的Signature(机器签名,一般为0x00 00 45 50,ASCII码是“PE00”),然后紧接着是20字节的Image_File_Header(PE)和不定长的Image_OP_Header。
2.1Image_File_Header(镜像文件夹):PE中比较重要的是NumberOfSections和Characteristics。其中大小为2字节的NumberOfSections代表着节的数量,在遍历各个节的时候需要使用,有很多病毒会添加自己的节,存储病毒需要的数据;大小为2字节的Characteristics是PE文件的一些属性信息,通常一个病毒文件和变种文件的这个属性值是相同的,当然不同的病毒文件的这个值也可能相同,但是相对来说,这个值比较固定,所以可以作为特征码一部分。
2.2Image_OP_Header(镜像可选文件):OPE包含的内容非常多和重要,对特征码定位有比较大作用的有如下字段:
FileAlignment(4字节):数据块在文件内的对齐大小。一般为0x200或0x1000
SectionAlignment(4字节):数据块在内存中的对齐大小。一般为0x1000
SizeOfCode(4字节):代码块的大小
SizeOfInitializeData(4字节):数据块的大小
SizeOfImage(4字节):PE文件在内存中的大小
AddressOfEntryPoint(4字节):入口地址
BaseOfCode(4字节):代码段在内存中相对于镜像基址的开始地址
BaseOfData(4字节):数据段在内存中相对于镜像基址的开始地址
镜像可选头结构中的字段对病毒特征码提取有作用的分如下几类:
A.由于功能不变性和对齐方式引起的数据块大小比较固定
对齐方式是操作系统为了效率上的提高,对数据按照一定的大小进行分块存储而产生的数据存储方式。例如数据按200k存储,那么201k的数据,存储的时候就需要使用2块200k的空间,也就是400k的空间。PE文件中数据的存储也类似这样。按照SectionAlignment(数据块在内存中的对齐粒度)和FileAlignment(数据块在文件中的对齐粒度)对齐,这两个对齐值会让镜像可选头的某些字段比较固定。
SizeOfCode(代码块的大小),SizeOfInitializedData(初始化数据的大小),SizeOfImage(PE文件在内存中的大小),通常一个可执行程序的代码没有很大的修改的话,这几个值比较固定,从而可以通过这几个值定位到比较稳定的特征码。
B.由于功能不变性和数据块大小稳定性引起地址值的比较固定
对于任何一个程序,在第一次生成后,并通过功能测试发布后,主体功能都是已经确定的,就算修改也只是一些节支上的小改。病毒程序也不例外。
加上对其粒度的影响,PE文件中的数据块大小也比较稳定,所以引起的许多地址值也是比较固定的。AddressOfEntryPoint(入口地址),BaseOfData(数据段在内存中相对于镜像基址的开始位置)。由于数据是按块存储的,各个数据块只要可执行程序的代码没有很大的修改的话,数据块的大小就基本上不会改变,所以引起这些存储的地址值也比较稳定。
3.节表头(40字节):也是由于对其粒度引起节表头的SizeOfRawData(节在文件中对齐后的大小),PointOfRawData(节在文件中开始地址),VirtualAddress(节在内存中开始地址)这三个字段比较稳定。
4.各个节:节表头后,就是各个节的数据了。节中存储各种数据,主要有代码数据,常量数据,资源数据,导出函数数据,导入函数数据。这些数据在病毒程序功能固定的情况下,都是比较固定的,从而定位出特征码也比较容易。
但是常量数据,资源数据,导出函数数据通常是比较容易被修改的,因为这3个数据是在代码级别的数据,通过简单地修改病毒程序的代码,这3个数据的大小可能不变,但数据的内容可能发生很大的变化。
而对于代码数据和导入函数数据,这两个数据是编译器和链接器根据代码生成的,只要是代码不是很大的修改,这两个数据的内容是比较稳定的。
4.1代码数据:代码数据是可以定位到特征码的地方比较多的。有函数调用的入栈指令,例如调用某个函数,它有几个参数,必然会在调用该函数附近,有一些入栈动作和参数初始化的动作,这些都可以定位成特征码,而这些特征比较稳定。还有,调用其他dll的函数的固定相对地址。例如某病毒程序调用网络动态库的InternetopenUrl函数,那么在代码数据调用指令(call 指令)的参数,就是InternetOpenUrl函数在Wininet.dll中的相对地址,除非病毒使用动态加载Wininet.dll,则没有InternetOpenUrl函数的相对地址数据,但是动态加载dll的话,就会有有Wininet.dll常量,就变成了定位动态加载dll这段代码的特征码,这还是通过代码数据来定位。
4.2导入函数数据:导入函数数据就是程序中调用了那些dll的函数数据,这些函数数据包含dll的名字,被调用的函数名字或者序号等,这些都可以作为用来定位特征码。还有就是一些地址数据,这些话素具是编译器和链接器生成的,很难通过代码级别来修改的,在汇编级别修改也蛮大,涉及到代码数据的修改和各种数据的相对地址的修改,所以通过导入函数数据定位的特征码很稳定。
三.总结
上面说明那些数据可以通过PE文件可以快速的找到,而且正对exe程序进行小范围的修改,那些数据基本上不会改变(某些注销掉的dll函数除外)。
杀毒软件通过PE文件格式对这些数据进行分析,可以找到一些比较稳定的不常变得数据,把这些数据组成多组特征,从而可以快速稳定的定位PE文件的特征码和判断PE文件是否为病毒文件。
PE文件格式对定位病毒特征码的作用的更多相关文章
- 深入理解 Win32 PE 文件格式
深入理解 Win32 PE 文件格式 Matt Pietrek 这篇文章假定你熟悉C++和Win32. 概述 理解可移植可执行文件格式(PE)可以更好地了解操作系统.如果你知道DLL和EXE中都有些什 ...
- PE文件格式详解,第三讲,可选头文件格式,以及节表
PE文件格式详解,第三讲,可选头文件格式,以及节表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶可选头结构以及作 ...
- PE文件格式分析
PE文件格式分析 PE 的意思是 Portable Executable(可移植的执行体).它是 Win32环境自身所带的执行文件格式.它的一些特性继承自Unix的Coff(common object ...
- 深入理解 Win32 PE 文件格式 Matt Pietrek(慢慢体会)
这篇文章假定你熟悉C++和Win32. 概述 理解可移植可执行文件格式(PE)可以更好地了解操作系统.如果你知道DLL和EXE中都有些什么东西,那么你就是一个知识渊博的程序员.这一系列文章的第一部分, ...
- Reverse Core 第二部分 - 13章 - PE文件格式
@date: 2016/11/24 @author: dlive PE (portable executable) ,它是微软在Unix平台的COFF(Common Object File For ...
- PE文件格式详解(下)
作者:MSDN译者:李马 预定义段 一个Windows NT的应用程序典型地拥有9个预定义段,它们是.text..bss..rdata..data..rsrc..edata..idata..pdata ...
- PE文件格式详解(上)
作者:MSDN 译者:李马 摘要 Windows NT 3.1引入了一种名为PE文件格式的新可执行文件格式.PE文件格式的规范包含在了MSDN的CD中(Specs and Strategy, Spec ...
- PE文件格式详解,第一讲,DOS头文件格式
PE文件格式详解,第一讲,DOS头文件格式 今天讲解PE文件格式的DOS头文件格式 首先我们要理解,什么是文件格式,我们常说的EXE可执行程序,就是一个文件格式,那么我们要了解它里面到底存了什么内容 ...
- PE文件格式详解,第二讲,NT头文件格式,以及文件头格式
PE文件格式详解,第二讲,NT头文件格式,以及文件头格式 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) PS:本篇博客 ...
随机推荐
- C# 多线程学习笔记 - 3
本文主要针对 GKarch 相关文章留作笔记,仅在原文基础上记录了自己的理解与摘抄部分片段. 遵循原作者的 CC 3.0 协议. 如果想要了解更加详细的文章信息内容,请访问下列地址进行学习. 原文章地 ...
- HBase篇--搭建HBase完全分布式集群
一.前述. 完全分布式基于hadoop集群和Zookeeper集群.所以在搭建之前保证hadoop集群和Zookeeper集群可用.可参考本人博客地址 https://www.cnblogs.com/ ...
- 【从零开始自制CPU之学习篇06】寄存器
上一篇文章学习了总线的相关知识,途中ABC当时假设为一个个的8位寄存器.这一篇要学习怎么构建这个寄存器. 这分为两个三个部分,数据输入,寄存器,数据输出.首先不管输出,来看数据输入和寄存器这两个部分. ...
- java基础(十三)-----详解内部类——Java高级开发必须懂的
可以将一个类的定义放在另一个类的定义内部,这就是内部类. 为什么要使用内部类 为什么要使用内部类?在<Think in java>中有这样一句话:使用内部类最吸引人的原因是:每个内部类都能 ...
- windows部署MongoDB
打开MongoDb下载页面,分别下载Community Server和Compass,注意在安装Community Server时可以勾选同时安装Compass,但会比较慢,所以建议两个分开下载安装. ...
- 【安卓本卓】Android系统源码篇之(一)源码获取、源码目录结构及源码阅读工具简介
前言 古人常说,“熟读唐诗三百首,不会作诗也会吟”,说明了大量阅读诗歌名篇对学习作诗有非常大的帮助.做开发也一样,Android源码是全世界最优秀的Android工程师编写的代码,也是A ...
- rabbitmq.config配置参数详解
rabbitmq.config详细配置参数 详细使用方法请点击:http://www.cnblogs.com/wyt007/p/9073316.html Key Documentation tcp_l ...
- c#委托中的同步和异步方法即BeginInvoke和EndInvoke
学习多线程之前我们先了解一下电脑的一些概念,比如进程,线程,这个参考https://www.cnblogs.com/loverwangshan/p/10409755.html 这篇文章.今天我们接着来 ...
- 第24章 退出 - Identity Server 4 中文文档(v1.0.0)
注销IdentityServer就像删除身份验证cookie一样简单,但是为了完成联合注销,我们必须考虑将用户从客户端应用程序(甚至可能是上游身份提供者)中签名. 24.1 删除认证 要删除身份验证c ...
- WPF 中图片的加载 ,使用统一资源标识符 (URI)
在wpf中,设置图片路径有2种方法: 1.xaml文件中,指定路径 <Button Name=" HorizontalAlignment="Right" Verti ...