了解PE文件结构对于分析病毒来说很重要,虽然这方面的资料在网上绰绰有余,我还是想写写我自己觉得更有用的一些东西。
3ch pe,0,0 字符串(Signature)的位置
从这里开始就是pe文件头
PE header 的正式命名是 IMAGE_NT_HEADERS。
IMAGE_NT_HEADERS STRUCT
Signature dd ?
FileHeader IMAGE_FILE_HEADER <>
OptionalHeader IMAGE_OPTIONAL_HEADER32 <>
IMAGE_NT_HEADERS ENDS
Signature PE标记,一共4个字节,值为50h, 45h, 00h, 00h(PE/0/0)。
FileHeader 一共14h字节,该结构域包含了关于PE文件物理分布的一般信息。
IMAGE_FILE_HEADER STRUCT
Machine WORD ?
NumberOfSections WORD ?
TimeDateStamp dd ?
PointerToSymbolTable dd ?
NumberOfSymbols dd ?
SizeOfOptionalHeader WORD ?
Characteristics WORD ?
IMAGE_FILE_HEADER ENDS
OptionalHeader 该结构域包含了关于PE文件逻辑分布的信息。
下面从pe文件头开始介绍一些重要的数据位置
28 程序入口的相对地址RVA
2c 代码段的起始相对位置RVA
30 数据段的起始相对位置RVA
34 加载内存的首选基地址imageBase
78 引出表RVA
7c 引出表大小
80 引入表RVA
84 引入表大小
f8 节表开始:节名
100 节在内存中的大小
104 节在内存中的起始RVA
108 节在文件中的大小
10c 节在文件中的偏移
11c 节的属性