ITPub博客

首页 > 大数据 > Hadoop > (加密解密技术内幕)File Header (文件头)

(加密解密技术内幕)File Header (文件头)

Hadoop 作者:109715285 时间:2013-11-25 16:42:00 0 删除 编辑

课我们将要研究PE header的file header(文件头)部分。

至此,我们已经学到了哪些东东,先简要回顾一下:

DOS MZ header又命名为IMAGE_DOS_HEADER.。其中只有两个域比较重要:e_magic包含字符串"MZ",e_lfanew包含PE
header在文件中的偏移量。

比较e_magic是否为IMAGE_DOS_SIGNATURE以验证是否是有效的DOS header。比对符合则认为文件拥有一个有效的DOS
header。

为了定位PE
header,移动文件指针到e_lfanew所指向的偏移。

PE header的第一个双字包含字符串"PE"。该双字与IMAGE_NT_SIGNATURE比对,符合则认为PE header有效。

本课我们继续探讨关于PE header的知识。PE header的正式命名是IMAGE_NT_HEADERS。再来回忆一下这个结构。

IMAGE_NT_HEADERS STRUCT    Signature dd ?    FileHeader IMAGE_FILE_HEADER <>   
OptionalHeader IMAGE_OPTIONAL_HEADER32 <>IMAGE_NT_HEADERS ENDS

SignaturePE标记,值为50h, 45h, 00h, 00h(PE)。FileHeader该结构域包含了关于PE文件物理分布的一般信息。OptionalHeader该结构域包含了关于PE文件逻辑分布的信息。

最有趣的东东在OptionalHeader里。不过,FileHeader里的一些域也很重要。本课我们将学习FileHeader,下一课研究OptionalHeader。

IMAGE_FILE_HEADER STRUCT    Machine WORD ?    NumberOfSections WORD ?    TimeDateStamp dd
?    PointerToSymbolTable dd ?    NumberOfSymbols dd ?   
SizeOfOptionalHeader WORD ?    Characteristics WORD ?IMAGE_FILE_HEADER
ENDS

Field
name

Meanings

Machine    该文件运行所要求的CPU。对于Intel平台,该值是IMAGE_FILE_MACHINE_I386(14Ch)。我们尝试了LUEVELSMEYER的pe.txt声明的14Dh和14Eh,但Windows不能正确执行。看起来,除了禁止程序执行之外,本域对我们来说用处不大。    

NumberOfSections    文件的节数目。如果我们要在文件中增加或删除一个节,就需要修改这个值。    

TimeDateStamp    文件创建日期和时间。我们不感兴趣。    

PointerToSymbolTable    用于调试。    

NumberOfSymbols    用于调试。    

SizeOfOptionalHeader    指示紧随本结构之后的OptionalHeader结构大小,必须为有效值。    

Characteristics    关于文件信息的标记,比如文件是exe还是dll。    

简言之,只有三个域对我们有一些用:Machine,NumberOfSections和Characteristics。通常不会改变Machine和Characteristics的值,但如果要遍历节表就得使用NumberOfSections。为了更好阐述NumberOfSections的用处,这里简要介绍一下节表。

节表是一个结构数组,每个结构包含一个节的信息。因此若有3个节,数组就有3个成员。我们需要NumberOfSections值来了解该数组中到底有几个成员。也许您会想检测结构中的全0成员起到同样效果。Windows确实采用了这种方法。为了证明这一点,可以增加NumberOfSections的值,Windows仍然可以正常执行文件。据我们的观察,Windows读取NumberOfSections的值然后检查节表里的每个结构,如果找到一个全0结构就结束搜索,否则一直处理完NumberOfSections指定数目的结构。为什么我们不能忽略NumberOfSections的值?有几个原因。PE说明中没有指定节表必须以全0结构结束。Thus there may be a situation where the last array member
is contiguous to the first section, without empty space at all. Another reason
has to do with bound imports. The new-style binding puts the information
immediately following the section table's last structure array member.因此您仍然需要NumberOfSections。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7295249/viewspace-1111958/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论