本文主要从杀毒软件查杀病毒的原理出发,分析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文件格式对定位病毒特征码的作用的更多相关文章

  1. 深入理解 Win32 PE 文件格式

    深入理解 Win32 PE 文件格式 Matt Pietrek 这篇文章假定你熟悉C++和Win32. 概述 理解可移植可执行文件格式(PE)可以更好地了解操作系统.如果你知道DLL和EXE中都有些什 ...

  2. PE文件格式详解,第三讲,可选头文件格式,以及节表

    PE文件格式详解,第三讲,可选头文件格式,以及节表 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) 一丶可选头结构以及作 ...

  3. PE文件格式分析

    PE文件格式分析 PE 的意思是 Portable Executable(可移植的执行体).它是 Win32环境自身所带的执行文件格式.它的一些特性继承自Unix的Coff(common object ...

  4. 深入理解 Win32 PE 文件格式 Matt Pietrek(慢慢体会)

    这篇文章假定你熟悉C++和Win32. 概述 理解可移植可执行文件格式(PE)可以更好地了解操作系统.如果你知道DLL和EXE中都有些什么东西,那么你就是一个知识渊博的程序员.这一系列文章的第一部分, ...

  5. Reverse Core 第二部分 - 13章 - PE文件格式

    @date: 2016/11/24 @author: dlive ​ PE (portable executable) ,它是微软在Unix平台的COFF(Common Object File For ...

  6. PE文件格式详解(下)

    作者:MSDN译者:李马 预定义段 一个Windows NT的应用程序典型地拥有9个预定义段,它们是.text..bss..rdata..data..rsrc..edata..idata..pdata ...

  7. PE文件格式详解(上)

    作者:MSDN 译者:李马 摘要 Windows NT 3.1引入了一种名为PE文件格式的新可执行文件格式.PE文件格式的规范包含在了MSDN的CD中(Specs and Strategy, Spec ...

  8. PE文件格式详解,第一讲,DOS头文件格式

    PE文件格式详解,第一讲,DOS头文件格式 今天讲解PE文件格式的DOS头文件格式 首先我们要理解,什么是文件格式,我们常说的EXE可执行程序,就是一个文件格式,那么我们要了解它里面到底存了什么内容 ...

  9. PE文件格式详解,第二讲,NT头文件格式,以及文件头格式

    PE文件格式详解,第二讲,NT头文件格式,以及文件头格式 作者:IBinary出处:http://www.cnblogs.com/iBinary/版权所有,欢迎保留原文链接进行转载:) PS:本篇博客 ...

随机推荐

  1. 8分钟学会Consul集群搭建及微服务概念

    Consul介绍: Consul 是由 HashiCorp 公司推出的开源软件,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与 ...

  2. 【WebApi】通过HttpClient调用Web Api接口

    HttpClient是一个封装好的类,它在很多语言中都有被实现,现在HttpClient最新的版本是4.5. 它支持所有的http方法,自动转向,https协议,代理服务器. 一.Api接口参数标准化 ...

  3. Python使用Xpath轻松爬虫(脑残式)

    1.在PyCharm安装lxml. 2.找到源码 3.F12.copy源码的xpath 4.代码 from lxml import etree import requests wb_data = re ...

  4. IdentityServer4实战 - 必须使用HTTPS问题解析

    一. 前言 关于必须使用HTTPS这个问题,很多朋友都在群里问到了,不过由于这个问题很简单,一直也没通过文章的方式记录下来,今日有时间,便说说它的前因后果吧,给需要的人解惑~. 二. 问题发生 本文所 ...

  5. windows部署MongoDB

    打开MongoDb下载页面,分别下载Community Server和Compass,注意在安装Community Server时可以勾选同时安装Compass,但会比较慢,所以建议两个分开下载安装. ...

  6. MacPro4,1升级到MacPro5,1

    收了一台老MacPro,2009年版本,准确型号是"MacPro4,1".机器很好,美中不足的是,太老了.硬件还好说,很多部件都可以单独采购升级,特别是有了淘宝,几乎只要有的东西, ...

  7. TypeScript: type alias 与 interface

    官方文档中有关于两者对比的信息,隐藏在 TypeScript Handbook 中,见 Interfaces vs. Type Aliases 部分. 但因为这一部分很久没更新了,所以其中描述的内容不 ...

  8. Jexus~webApi程序的部署几个小坑

    今天上午写了Jexus~Linux环境下的部署,下午去实现了一个,出现了一些问题,下面总结一下. 一 首先要对jexus进行修改/usr/jexus/jws 删除下面的这行,解决csc文件未找到问题 ...

  9. 简单的SQL注入

    Topic Link http://ctf5.shiyanbar.com/423/web/ 1)测试输入1的时候正常显示 2) 单引号测试输入1'发现存在漏洞(判断为字符型注入) 3) 联合注入测试( ...

  10. leetcode — scramble-string

    import java.util.Arrays; /** * Source : https://oj.leetcode.com/problems/scramble-string/ * * Given ...