下载后可任意编辑PE 文件格式分析及修改(图)PE 的意思是 Portable Executable(可移植的执行体)。它是 Win32 环境自身所带的执行文件格式。它的一些特性继承自 Unix 的 Coff(common object file format)文件格式。“Portable Executable”(可移植的执行体)意味着此文件格式是跨 Win32 平台的;即使 Windows 运行在非 Intel的 CPU 上,任何 win32 平台的 PE 装载器都能识别和使用该文件格式。 PE 文件在文件系统中,与存贮在磁盘上的其它文件一样,都是二进制数据,对于操作系统来讲,可以认为是特定信息的一个载体,假如要让计算机系统执行某程序,则程序文件的载体必须符合某种特定的格式。要分析特定信息载体的格式,要求分析人员有数据分析、编码分析的能力。在 Win32 系统中,PE 文件可以认为.exe、.dll、.sys 、.scr 类型的文件,这些文件在磁盘上存贮的格式都是有一定规律的。一、PE 格式基础下表列出了 PE 的总体结构DOS MZ headerDOS stubPE headerSection tableSection 1Section 2…Section n 一个完整的 PE 文件,前五项是必定要有的,假如缺少或者数据出错,系统会拒绝执行该文件如下图 图 1 文件头格式错误 下载后可任意编辑 图 2 格式数据错误 图 3 代码错误DOS MZ header 部分是 DOS 时代遗留的产物,是 PE 文件的一个遗传基因,一个 Win32 程序假如在 DOS下也是可以执行,只是提示:“This program cannot be run in DOS mode.”然后就结束执行,提示执行者,这个程序要在 Win32 系统下执行。DOS stub 部分是 DOS 插桩代码,是 DOS 下的 16 位程序代码,只是为了显示上面的提示数据。这段代码是编译器在程序编译过程中自动添加的。PE header 是真正的 Win32 程序的格式头部,其中包括了 PE 格式的各种信息,指导系统如何装载和执行此程序代码。Section table 部分是 PE 代码和数据的结构数据,指示装载系统代码段在哪里,数据段在哪里等。对于不同的 PE 文件,设计者可能要求该文件包括不同的数据的 Section。所以有一个 Section Table 作为索引。Section 多少可以根据实际情况而不同。但至少要有一个 Section。假如一个程序连代码都没有,那么他也不能称为可执行代码。在 Section Table 后,Section 数目的多少是不定的。二、程序的装入当我们在 explorer.exe(资源管理器)中双击某文件,执行一个可执行程序,系统...