pe文件格式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
pe文件格式:PE文件格式(1)
疯狂代码 / ĵ:http://Waigua/Article60255.html
介绍说明:希望本文能够对初级入门CRACKER有定帮助翻译存在疏漏或者不准确希望来信指出感谢您指导!感谢看雪为我们提供这个交流平台让我们技术和时俱进!!
前言:
PE("portableexecutable")文件格式是针对MSwindowsNT,windows95and
win32s可执行 2进制代码(DLLsandprograms)在windowsNT内,驱动也是这个格式也可以用于对象文件和库
这个格式是Microsoft设计并在1993经过TIS(toolerfacestandard)委员会
(Microsoft,Intel,Borland,Watcom,IBM等)标准化了它基于在UNIX和VMS上运行对象文件和可执行文件COFF"commonobjectfileformat"格式
win32SDK包括个头文件
总览:
在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结构)他将指向个节
在头后面是节头实际上节内容就是真正需要运行个所需要东西所有头和目录成员就是帮你找到它每个节有几个标志:对齐包含数据类型(化数据等)是否可以共享等及数据自身多数节含有个或多个通过“可选头”内数据目录项引用目录没有目录类型内容是化数据或者可执行代码(节是物理意义上内容组织目录是逻辑意义上内容
组织两者互相配合才能找到需要东西节是存储内容地方区域安排目录是如何对里面东西进行查找目是寻找里面内容)
+-------------------+
|DOS-stub |
+-------------------+
|file-header |
+----------+
|optionalheader |
|----------|
| |
|datadirectories |
| |
+-------------------+
| |
|sectionheaders |
| |
+-------------------+
| |
|section1 |
| |
+-------------------+
| |
|section2 |
| |
+-------------------+
| |
|... |
| |
+-------------------+
| |
|sectionn |
| |
+-------------------+
DOS-stubandSignature ----------------------
DOSSTUB概念在16位WINDOWS可执行文件内就已经被熟知了STUB是用于OS/2可执行文件自解压文档和其他对于PE文件它是DOS2兼容可执行文件总是包含100字节内容输出个信息:比如"thisprogramneedswindowsNT".
你认识到个DOSSTUB通过验证DOS-header就是个IMAGE_DOS_HEADER结构前两个字节必须使"MZ"(有个定义针对这个WORDIMAGE_DOS_SIGNATURE)你通过尾部'e_lfa'给出偏移量所确定签名区别个PE文件对于PE文件它是个32位按照8字节对齐边界其值0x00004550由IMAGE_NT_SIGNATURE定义.
IMAGE_NT_HEADERSSTRUCT
Signature DWORD ?
FileHeader IMAGE_FILE_HEADER <>
OptionalHeader IMAGE_OPTIONAL_HEADER32<>
IMAGE_NT_HEADERSENDS 文件头FileHeader
-----------
IMAGE_FILE_HEADERSTRUCT
Machine WORD ?
NumberOfSections WORD ?
TimeDateStamp DWORD ?
PoerToSymbolTable DWORD ?
NumberOfSymbols DWORD ?
SizeOfOptionalHeader WORD ?
Characteristics WORD ?
IMAGE_FILE_HEADERENDS 要得到IMAGE_FILE_HEADER,确认DOS头前2个字节"MZ"然后找到'e_lfa'成员然后从文件开始跳过许多字节验证你找到签名文件头作为个IMAGE_FILE_HEADER结构,就从它后面开始从上到下描述其成员
第1:Machine,16位值指明可执行文件所需要系统已知合法值如下:
IMAGE_FILE_MACHINE_I386
0x014c Intel80386处理器
0x014d Intel80486处理器