2.3 PE文件基本结构
可移植执行(PE,Portable Executable)文件格式是Windows可执行文件、对象代码和DLL所使用的标准格式。PE文件格式其实是一种数据结构,包含为Windows操作系统加载器管理可执行代码所必要的信息 [15] 。几乎每个在Windows系统中加载的可执行代码都使用PE文件格式。
PE文件格式包括一个PE文件头,随后跟着一系列的分节。文件头中包含了有关文件本身的元数据。头部之后是文件的一些实际部分,每个分节中都包含了有用的信息。所包含的节如下:
(1).text:.text分节包含了CPU执行指令。所有其它节存储数据和支持性的信息。一般来说,这是唯一可执行的节,也应该是唯一包含代码的节。
(2).rdata:.rdata节通常包含导入与导出函数信息。这个节中还可以存储程序所使用的其它只读数据。有些文件中还会包含.idata和.edata节,用来存储导入导出信息。
(3).data:.data节包含了程序的全局数据,可以从程序的任何地方访问到。本地数据并不存储在这个节中,而是PE文件某个其它位置上。
(4).rsrc:.rsrc节包含由可执行文件所使用的资源,而这些内容并不是可执行的,比如图标、图片、菜单项和字符串等。
表2-1 Windows平台可执行PE文件中的分节

表2-2 PE文件头的信息

如图2-1所示,为一个PE类型恶意代码的PE结构信息。在该样本的Header中,前两个字节为0x4D5A(十六进制),代表的字符为“MZ”(ASCII码字符串)。并且在File Header中,前两个字节为0x5045(十六进制),代表的字符为“PE”(ASCII码字符串)。这些都是PE类型文件的标准格式信息。此外,从图中我们可以看出该样本包含的节(Section)包括:.text、.rdata、.data及.reloc等。

图2-1 一个PE类型的恶意代码的结构信息