APP下载

PE文件分析器的设计与实现

2012-02-08易文车生兵

长沙航空职业技术学院学报 2012年2期
关键词:分析器字节解析

易文,车生兵

(中南林业科技大学,湖南长沙 410004)

PE文件分析器的设计与实现

易文,车生兵

(中南林业科技大学,湖南长沙 410004)

在windows操作系统下的可执行文件,一般采用PE文件结构,基于这样统一格式设计的可执行文件,可以通过一定的方式来进行解析。通过PE文件分析,可以让读者对任何的可执行文件都有一个全面的认识,了解任何一个可执行文件的结构,分析其代码段、数据段、导入表、链接库等等内容,以达到拆分程序、了解程序功能、捆绑木马、分析文件是否含有木马、破解程序等目的。PE分析器就是基于这样的目的设计的一款详细的解析PE文件的工具。

PE结构;PE分析;PE分析器

PE是Portable Executable的缩写,它是由微软公司设计的可执行的文件(DLLs和执行程序)格式,目标文件和库文件通常也是这种格式。[1]它的一些特性继承自Unix的Coff(common object fileformat)文件格式。"portable executable"(可移植的执行体)意味着此文件格式是跨win32平台的:即使Windows运行在非Intel的CPU上,任何win32平台的PE装载器都能识别和使用该文件格式。[2]

文章以PE文件结构为基础,详细分析了PE文件的各个层次内容,以及层次之间的关系,并且以可视化的方式呈现出来,同时,采用一定的加解密算法,以及捆绑协议,对文件进行了加解密以及捆解绑。

1 PE文件分析

PE文件结构的总体层次分布如表1所示,主要结构基本为四个部分:Dos残余、PE头、文件内容(节)、目录表。

表1 PE文件结构

1.1 Dos残余

所有的PE文件均以DOSMZ header开始。但是通常,该结构体在解析过程中没有特别大的作用。实际上该部分是一个有效的EXE,在不支持PE文件格式的操作系统中,它将简单的显示一个错误提示,类似于字符串“This program cannot be run in DOSmode”。一般情况下,该部分为编译器在编译时自动生成。[3]

DOS头是一个固定的64字节的结构体,大部分的区域在解析过程中都没有意义,但是依然有一个比较重要的值需要关注,那就是.e_lfanew的值,指出了PE header的起始地址,通常在文件开始$003C偏移地址指明,比如偏移地址的值为$1000,表示PE文件头从文件地址$1000处开始。

1.2 PE头

DOS残余部分结束之后就是PE header,该结构的位置通过前文提到的.e_lfanew域可以直接定位。PE header是IMAGE_NT_HEADERS的简称,其中包含了许多PE装载器用到的重要域。[4]当我们更加深入研究PE文件格式后,将对这些重要域耳目能详。执行体在支持PE文件结构的操作系统中执行时,PE装载器将从DOSMZ header中找到PE header的起始偏移量。因而跳过了DOSstub直接定位到真正的文件头PE header。

此结构有三个域,各个域说明如表2所示。

表2 PE头结构

Signature标志共4个字节,它表明了此文件的身份,通过检测此标志,可以准确的判断是否是一个有效的PE格式文件。

在4字节标志之后就是FileHeader,包含了关于PE文件物理分布的一般信息,此结构定义如下:

除了标准的PE头结点以外,PE文件还有可选的头结点,虽说是可选的头结点,但是通常来说都是必须的。它包含了PE文件的逻辑分布信息,其中很多域包含非常重要的信息,比如,提供二进制流的加载方式、起始地址、保留栈空间大小、数据段长度等。值得注意的是,PE可选头大小是变化的,而且,验证魔幻数字(Magic number)对格式兼容很重要。按照PE可选头的相关格式进行相对应的解析。[5]

1.3 文件内容

文件内容包含两个部分,一个是节表,即定义用来描述对应节的信息的结构体,另外一部分则是文件主体部分—节。

节表是一个结构数组,每个结构包含一个节的信息。通过NumberOfSections值来了解该数组中到底有几个成员。在实际操作中,如果有一个节表的内容全为0,则表示节已经结束。此结构共有10个域,各个域说明如表3所示。

表3 节表结构体

节表之后的部分就是文件的主体部分,它占了文件的绝大部分大小,也是程序中的重点,不同的节存储了不同的数据。通过上述节表的内容,可以定位每个节的位置和大小,从而对每个节进行对应解析。[6]节有多种类型,常见的比如.text、.data、.rsrc等等,每个节都是一块拥有共同属性的数据。对于每个节内数据的详细解析,本文并不关注,得到数据之后通过对应的工具即可完成。

1.4 目录表

数据目录位于文件可选头之后,包含有8字节PE文件16个数据目录的入口地址(虚拟地址),以及8字节大小,根据该入口地址便可找到相应数据目录结构的起始地址,进行相应的解析。

数据目录中主要包含三种表结构,输入表、输出表以及资源表。

3)资源分配表

资源在程序当中使用树结构来保存,通常有三层,从上至下依次为类型、名字、语言。PE文件是否包含资源文件通常是检测是否含有“.rsrc”节表。大致地讲,资源目录有点像硬盘中文件的存放形式,一个根目录和很多子目录,可能在子目录中找到具体的文件,而那个文件就像是资源的具体资源数据,比如一个对话框。在PE文件中,根目录和子目录都是一个独立的资源目录结构。

一般一个资源如图1所示:

图1 资源文件结构

例如图1中ID[0]包含三个入口(ID[3]、ID[6]、ID[10]),每个入口又指向一个资源目录结构,例如其中ID[3]又包含两个入口,每个入口又指向一个资源目录,直到找到资源数据入口。

2 设计与实现

2.1 总体结构

程序总体结构如图2所示。

图2 程序总体结构

2.2 实现过程

根据前面的分析可以得知,整体的程序设计流程图如图3所示。

图3 程序总体流程图

1)Dos头读取

从文件头开始位置,读取固定64个字节为dos头。保存并且解析结构内容。

2)PE头读取

根据Dos头的e_lfanew域的内容(新exe头在文件中的地址),定位文件指针,读取24字节的PE文件头。从PE文件头中解析出可选头的大小,按照该字节数在后序的代码中读取PE可选头,并且进行解析。

3)段表读取

文件可选域中获得段的的数量。按照段的数量读取40字节乘该数量的字节数,分别为各个段表赋值。

4)读取输入表

从文件的可选域目录表的数组中,找到1号元素,获得输入表的虚地址(内存偏移地址)属性。将该内存偏移地址转换为文件偏移地址,并将文件读写指针定位到此。从该起始地址开始,读取第一个输入表的结构体。完成读取后查看输入表的FirstThunk属性,如果为零则跳出循环,输入表查找完毕。

5)读取输出表

从文件可选域中的目录表数组中,找到0号元素,获得输出表的虚地址(内存偏移地址)属性。将内存偏移值转换为文件偏移值,从该文件起始地址,抓取输出表的结构体,完成赋值工作。输出表数量加一,输出表数量也只有1,其他与输入表的读取过程完全相同。

6)读取资源表

根据PE文件资源表的布局情况,我们发现其整体结构是一个树形结构的,这样就给查找过程带来了麻烦。所以,对数据结点的查找应该是一个递归的过程,对目录项结点层层分析,直到找到标记值不为零的结点。

2.3 扩展需求

1)文件绑定与解绑

文件绑定即将两个或多个文件变成一个文件,但是这一个文件同时具备两个文件的功能。为了实现动态绑定效果,我们必须准备一个宿主文件,用来作为绑定文件的“头部”,宿主文件的左右是当程序运行时将自身附带的两个PE文件自动解绑到系统临时目录,并运行。解绑的过程就是找到数组文件的临时目录,并且根据目录将文件分成两个文件。

2)文件加密

加密采用了DES算法为PE头结构的数据进行加密。[7]

2.4 程序界面

程序界面如图4所示。

图4 程序界面

3 结论

通过详细的分析设计实现过程,最终得到的PE分析器还是能够分析到整个PE文件的每个字节,并且在进行分析之后,还扩充了该分析器的应用,包括了文件的捆绑,文件的加解密。都达到了预期目的。

[1]王洋.PE文件加密器的设计[D].长春:吉林大学,2008.

[2]罗云彬.Windows环境下32位汇编语言程序设计[M].北京:电子工业出版社,2009.

[3](美)埃尔温.Intel汇编语言程序设计(第5版)[M].清华大学出版社,2009.

[4]李卓远,鲜明.PE文件格式分析[J].电脑知识与技术,2009,5(9).

[5]嵇海明,杨宗源.PE文件格式剖析[J].计算机应用研究,2004,(03).

[6]程艳芬,翟海波,钟辉.PE文件格式解析[J].交通与计算机,2003,21(5).

[7]徐晓静.基于PE文件的信息隐藏技术研究[D].长沙:湖南大学,2007.

[编校:邓桂萍]

PE File Parser's Design and Imp lementation

YIWen,CHE Shengbing
(Central South University of Forestry and Technology,Changsha Hunan 410004)

Executable files in the Windows operating system are basically based on the PE file structure.Executable files based on such a unified format design can be analysed through a certain way.Through such kind of analysis,one can get a comprehensive understanding of any executable files,understand the structure of any executable files,analyzes its code section,the data segment,import table,link library and etc.By doing this can users depart programs,understand the program function and bind Trojan,analyse whether a file includes Trojan or decode program and so on.The PE analyzer,based on such purposes above,is a tool that can be used to analyse PE file.

PE structure;PE analysis;PE parsers

TP311.52

A

1671-9654(2012)02-047-05

2012-04-24

易文(1991-),男,湖南邵阳人,研究方向为网络与信息安全。

车生兵(1970-),男,湖南常德人,教授,湖南省青年骨干教师,研究方向为网络与信息安全、数字图像处理和人工智能。

本文为2011年湖南省大学生研究性学习和创新性实验计划项目“PE解析器的设计与实现”(编号:2011014)、湖南省科技厅科技计划项目“基于减位编码的图像压缩技术研究”(编号:2009GK3096)、2012年全国大学生研究性学习和创新性实验计划项目“磁盘与文集解析器的研制”(编号:2012006)阶段性研究成果。

猜你喜欢

分析器字节解析
No.8 字节跳动将推出独立出口电商APP
三角函数解析式中ω的几种求法
酒精分析器为什么能分辨人是否喝过酒
No.10 “字节跳动手机”要来了?
睡梦解析仪
多边形电极线形离子阱质量分析器的结构与性能
简谈MC7字节码
应用于词法分析器的算法分析优化
电竞初解析
对称巧用解析妙解