了解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 程序入口的相对地址RVA2c 代码段的起始相对位置RVA30 数据段的起始相对位置RVA34 加载内存的首选基地址imageBase78 引出表RVA7c 引出表大小80 引入表RVA84 引入表大小f8 节表开始:节名100 节在内存中的大小104 节在内存中的起始RVA108 节在文件中的大小10c 节在文件中的偏移11c 节的属性