|
说明:希望本文能够对初级入门CRACKER有一定帮助,翻译存在疏漏或者不准确,希望来信指出。感谢您的指导!感谢看雪为我们提供这个交流平台,让我们技术与时俱进!! 前言: PE("portableexecutable")文件格式是针对MSwindowsNT,windows95and win32s的可执行二进制代码(DLLsandprograms)。在windowsNT内,驱动程序也是这个格式。也可以用于对象文件和库。 这个格式是Microsoft设计的,并在1993经过TIS(toolinterfacestandard)委员会(Microsoft,Intel,Borland,Watcom,IBM等)标准化了的。它基于在UNIX和VMS上运行的对象文件和可执行文件的COFF"commonobjectfileformat"格式。 win32SDK包括一个头文件<winnt.h>包括对PE格式的定义。我将提及成员名和定义。你也可能发现DLL文件"imagehelp.dll"非常有用。它是NT的一部分,但文档很少。它的一些函数在"DeveloperNetwork"被描述。 总览: 在PE文件的开始,我们可以发现MSDOS执行部分("stub");这使得任何一个PE文件是有效的DOS执行文件。在DOS-stub之后是32位的魔数0x00004550(IMAGE_NT_SIGNATURE).然后是一个COFF格式的文件头,指明在何种机器上运行,多少个节在里面,连接的时间,是否是可执行文件或者DLL等。DLL和可执行文件的区别:DLL不能够启动,只可以被其他可执行文件使用,一个可执行文件不能够连接到另一个可执行文件。 接着,我们看到一个可选文件头optionalheader(虽然叫“可选”,它实际上一直存在)。 COFF把可选文件头用于库,不用于目标文件。这里告诉我们文件如何被调入:起始地址,预留堆栈数,数据段尺寸。 一个有趣的部分是尾巴上的数组数据目录datadirectories,这些目录包含指向节内数据的指针。例如,如果文件有输出目录,可以在数组成员IMAGE_DIRECTORY_ENTRY_EXPORT内发现一个指针指向那个目录(目录描述结构->THUNKDATA结构->BYNAME结构)。他将指向一个节。 在头的后面是节头,实际上,节的内容就是真正需要运行一个程序所需要的东西,所有的头和目录成员就是帮你找到它。每个节有几个标志:对齐,包含的数据类型(初始化数据等),是否可以共享等,及数据自身。多数节含有一个或多个通过“可选头”内的数据目录项引用的目录。没有目录类型的内容是初始化数据或者可执行代码。(节是物理意义上的内容组织,目录是逻辑意义上的内容组织,两者互相配合才能找到需要的东西。节是存储内容的地方,区域的安排,目录是如何对里面东西进行查找,目的是寻找里面的内容)
|