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:本篇博客 ...
随机推荐
- Dubbo(一) —— 基础知识和项目搭建
一.分布式基础理论 1.什么是分布式系统? <分布式系统原理与范型>定义: “分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统” 分布式系统(distribut ...
- Android--从系统Camera和Gallery获取图片优化
前言 之前有两篇博客讲解了如何从系统内已有的Camera和Gallery应用中获取图片的例子,看到评论里有朋友说有时候会报错,导致程序崩溃的问题.本篇博客主要就这个问题分析讲解一下,最后将以一个简单的 ...
- es6学习笔记--模板字符串
这几天简单看了一下深入浅出es6这本书,感觉特实用,学习了一个新特性---模板字符串在项目开发中,拼接字符串是不可缺少的,动态创建dom元素以及js操作数据都要拼接字符串,在es6出来之前,我们都通常 ...
- PC逆向之代码还原技术,第五讲汇编中乘法的代码还原
目录 PC逆向之代码还原技术,第五讲汇编中乘法的代码还原 一丶简介乘法指令 1.乘法指令 2.代码还原注意问题 二丶乘法的汇编代码产生的格式 1.高级代码观看 2.乘法的汇编代码还原. 三丶乘法总结 ...
- ES6躬行记(20)——类
ES6正式将类(Class)的概念在语法层面标准化,今后不必再用构造函数模拟类的行为.而ES6引入的类本质上只是个语法糖(即代码更为简洁.语义更为清晰),其大部分功能(例如继承.封装和复用等)均可在E ...
- 分析core,是从案发现场,推导案发经过
分析core不是一件容易的事情.试想,一个系统运行了很长一段时间,在这段时间里,系统会积累大量正常.甚至不正常的状态.这个时候如果系统突然出现了一个问题,那这个问题十有八九跟长时间积累下来的状态有关系 ...
- python迭代和解析(3):range、map、zip、filter和reduce函数
解析.迭代和生成系列文章:https://www.cnblogs.com/f-ck-need-u/p/9832640.html range range()是一个内置函数,它返回一个数字序列,功能和Li ...
- javascript基础修炼(1)——一道十面埋伏的原型链面试题
在基础面前,一切技巧都是浮云. 题目是这样的 要求写出控制台的输出. function Parent() { this.a = 1; this.b = [1, 2, this.a]; this.c = ...
- C# 跨进程 设置窗口owner
窗口间跨进程通信 1. 发送方 public const int WM_InsertChart_Completed = 0x00AA; //查找窗口 [DllImport("User32.d ...
- Oracle 11g设置IP访问限制
出于数据安全考虑,对Oracle数据库的IP做一些限制,只有固定的IP才能访问. 修改$ORACLE_HOME/network/ADMIN/sqlnet.ora文件 增加以下内容(红色表示注释): # ...