学弟问到的一个最小PE结构解析问题

简介

2021年05月26日看到学弟们在看老师给的一道题,一个最小PE结构的题。文件如下:

image.png

关于这道题

Q: SizeOfOptionalHeader的值

首先,从NtHeader开始+0x14处的一个WORD值为SizeOfOptionalHeader,整个IMAGE_FILE_HEADER FileHeader就是PE头开始的6个DWORD。

所以指的就是文件中的:

image.png

同时也可以看出SizeOfOptionHeader为0x70。

Q: 请找出第二张导入表的开头RVA

PE Format - Win32 apps

根据文章描述

image.png

偏移OptionHeader+0x68处为Import的偏移。


又因为每一部分都是由两个DWORD构成,[0]为VA,[1]为size。

image.png

Import的VA为0xFC,size为0xDE

这里就出现了这道题的一个有意思的地方。

通常,在运行PE文件的时候,系统装载程序,会将头部从imagebase开始放置,然后解析节区信息,根据节区信息的origin VA去套用公式new VA = imagebase + origin VA,然后将对应的文件内容放置到对应的位置去。但是这道题没有节区信息所以是整个放在一起的,就有个特殊关系

VA = RVA


所以找到0xFC所在的位置。(该结构为IMAGE_IMPORT_DESCRIPTOR ImportDescriptor结构大小为0x14,顺序排列)

image.png

根据:

image.png

找到+0xC的位置,所以Name的RVA为0x4A

image.png

图中这里为第一张导入表的位置。


在上面的步骤中+0x14,就可以得到第二张导入表的信息。

image.png

红框为第一个导入表,选中为第二个,同样找到+0xC的位置,看到Name对应的VA为0x110

正常文件的导入表FOA计算方法

待续

本文链接:

https://0xpoker.cn/normal/5.html
1 + 6 =
快来做第一个评论的人吧~