29 第一节 分析模块的实现 ……………………………………………..
29 第二节 基本信息显示模块的实现 …………………………..
29 第三节 资源数据导出导入模块的实现 ……………….…
42 第四节 文本结果导出模块的实现 ……………………………
46 第六章 运行结果及界面 ……………………………………….
48 第七章 总结 ……………………………………………………&h
ellip;……….
51 附录一 参考文献 ………………………………………………………
52 附录二 文件分析文本结果事例 …………………………. 53
第一章 问题定义对于一个程序员或电脑使用者,总要和PE文件打交道,PE文件是 Win32环境自身所带的可执行文件格式,它的一些特性继承自Unix的COFF(Common Object File Format)文件格式。PE即Portable Executable(可移植执行)的缩写,意味着此文件格式是跨Win32平台的:即使Windows运行在非Intel的CPU上,PE装载器都能识别和使用该文件格式。我们平时在Windows下使用的.exe文件就是典型的PE类型文件,当然PE文件还包含了例如32位的.DLL等任何可在Win32环境下执行的文件,很多时候我们需要对自己或者已有的PE文件作一个分析,以便改进或者研究,由于PE文件是计算机中最重要,最常用的文件,因而学习,了解PE文件格式对于我们不无裨益。第一节 PE格式简要分析 PE文件格式主要由微软制定,此格式基本已成为Windows下可执行文件的标准格式,一个标准的PE文件包含了很多部分,每部分都有自己的结构,它的主要组成如表1.1.1:英文标示说明 DOS MZ HeaderDOS文件头 Dos stub SignaturePE文件头,包含数据目录 File header Optional header Section Table节表 Sections节 Resource Directory资源目录 表1.1.1 以下我将对以上几个部分分别介绍,由于资料有限,每部分不可能说得非常详细,只是每部分的介绍都加上了我的一些研究心得,这将为后章的PEDUMP文件分析器的实现打下基础。 1.1 DOS文件头所有PE文件都必须以一个简单的DOS MZ Header开始。有了它,一旦程序在DOS下执行,DOS就能识别出这是有效的执行体,通常以两字节的"MZ"(IMAGE_DOS_SIGNATURE)标示字符开始的,然后运行紧随MZ header之后的DOS stub(片断)。DOS stub实际上是个有效的EXE,在不支持PE文件格式的操作系统中(例如DOS系统),它将简单显示一个错误提示,类似于字符串" This program must be run under Win32"或者程序员可根据自己的意图实现完整的DOS代码。大多数情况下DOS文件头是由汇编器/编译器自动生成,它简单调用21h中断服务来显示字符串。在Dos文件头中有两个比较重要的值,一个是位于文件开始位置的.e_magic的值,包含了标志字符串"MZ",另一个是._lfanew的值,指出了PE header的起始地址,通常在文件开始$003C偏移地址指明,比如偏移地址的值为$1000,表示PE文件头从文件地址$1000处开始。 1.2 PE文件头紧接着DOS stub的是PE header。PE header是PE文件相关结构IMAGE_NT_HEADERS的简称。PE文件在支持他的操作系统中执行时,PE装载器将根据._lfanew指示的PE header的起始偏移量,直接定位到真正的文件头PE header的开始部分而跳过DOS stub部分。此结构有3个域,各个域说明如表1.1.2: SignaturePE文件头标志 FileHeader包含TimageFileHeader结构,此结构在后面将详细说明。 OptionalHeader包含TimageOptionalHeader结构此结构在后面将详细说明。 表1.1.2 在PE header开始部分是特殊的32-bit的标志Signature,它表明了此文件的真正身份,通过检测此标志,可以准确的判断此文件是否是有效的PE文件格式。在DELPHI的 Windows.pas单元中他们的申明如表1.1.3:标示值注释 IMAGE_DOS_SIGNATURE$5A4D{ MZ } IMAGE_OS2_SIGNATURE$454E{ NE } IMAGE_OS2_SIGNATURE_LE$454C{ LE } IMAGE_VXD_SIGNATURE$454C{ LE } IMAGE_PE_SIGNATURE$00004550{ PE00 } 表1