首页
社区
课程
招聘
[求助]PE文件求解..
发表于: 2016-8-24 16:50 3455

[求助]PE文件求解..

2016-8-24 16:50
3455
最近在学PE结构,遇到了个问题,我用PETool查看WinHex_x64.exe信息时,结表信息如下:
IMAGE_SECTION_HEADER (块表|区段|节表)结构如下:

------------------------------------------------------------
        [成员]          [地址(RAW)]    [数据:RVA]                 [说明]
Name:                   0x00000208     [UPX0]       [名称,长度:8位(16字节)的ASCII码.]
VirtualSize:            0x00000210     00014000     [V(VS),内存中大小(对齐前的长度).]
VirtualAddress:         0x00000214     00001000     [V(VO),内存中偏移(该块的RVA).]
SizeOfRawData:          0x00000218     00000000     [R(RS),文件中大小(对齐后的长度).]
PointerToRawData:       0x0000021c     00000400     [R(RO),文件中偏移.]
PointerToRelocation:    0x00000220     00000000     [在OBJ文件中使用,重定位的偏移.]
PointerToLinenumbers:   0x00000224     00000000     [行号表的偏移,提供调试.]
NumberOfRelocations:    0x00000226     0000         [在OBJ文件中使用,重定位项数目.]
NumberOfLinenumbers:    0x00000228     0000         [行号表中行号的数目.]
Characteristics:        0x0000022c     E0000080     [标志(块属性):20000000h 40000000h 80000000h 00000080h ]
------------------------------------------------------------
        [成员]          [地址(RAW)]    [数据:RVA]                 [说明]
Name:                   0x00000230     [UPX1]       [名称,长度:8位(16字节)的ASCII码.]
VirtualSize:            0x00000238     0000C000     [V(VS),内存中大小(对齐前的长度).]
VirtualAddress:         0x0000023c     00015000     [V(VO),内存中偏移(该块的RVA).]
SizeOfRawData:          0x00000240     0000C000     [R(RS),文件中大小(对齐后的长度).]
PointerToRawData:       0x00000244     00000400     [R(RO),文件中偏移.]
PointerToRelocation:    0x00000248     00000000     [在OBJ文件中使用,重定位的偏移.]
PointerToLinenumbers:   0x0000024c     00000000     [行号表的偏移,提供调试.]
NumberOfRelocations:    0x0000024e     0000         [在OBJ文件中使用,重定位项数目.]
NumberOfLinenumbers:    0x00000250     0000         [行号表中行号的数目.]
Characteristics:        0x00000254     E0000040     [标志(块属性):20000000h 40000000h 80000000h 00000040h ]
------------------------------------------------------------
        [成员]          [地址(RAW)]    [数据:RVA]                 [说明]
Name:                   0x00000258     [.rsrc]      [名称,长度:8位(16字节)的ASCII码.]
VirtualSize:            0x00000260     00002000     [V(VS),内存中大小(对齐前的长度).]
VirtualAddress:         0x00000264     00021000     [V(VO),内存中偏移(该块的RVA).]
SizeOfRawData:          0x00000268     00001C00     [R(RS),文件中大小(对齐后的长度).]
PointerToRawData:       0x0000026c     0000C400     [R(RO),文件中偏移.]
PointerToRelocation:    0x00000270     00000000     [在OBJ文件中使用,重定位的偏移.]
PointerToLinenumbers:   0x00000274     00000000     [行号表的偏移,提供调试.]
NumberOfRelocations:    0x00000276     0000         [在OBJ文件中使用,重定位项数目.]
NumberOfLinenumbers:    0x00000278     0000         [行号表中行号的数目.]
Characteristics:        0x0000027c     C0000040     [标志(块属性):40000000h 80000000h 00000040h ]
------------------------------------------------------------
------------------------------------------------------------------------------------------------
------------------------------------------------------------

由此可见,第一个第二个节表的PointerToRawData是一样的,说明这两个节起始位置一样,重叠了,为什么会这样?而且,跟据结表显示,第三个节是最后一个节,那么文件实际大小应该为
PointerToRawData + SizeOfRawData = 0x0000C400 + 0x00001C00 = 0xE000,也就是10进制的57344,可是PETool显示的是:
是否PE文件    :是
文件大小      :2351535 字节

不仅仅这个,还有很多exe在PETool中都是PE文件,但它们的大小都不等于最后一个节的PointerToRawData + SizeOfRawData.这是为什么,求解

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
2
pe的数据签名一般是在最后一个节数据的后面,也可能是捆绑了暗庄了。
2016-8-24 18:26
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
最近正在学PE,想把它写到内存以后,在空白区加代码,可是回写的时候发现从节表取出的长度和实际不一样,就有点纠结了。仔细一看,他的节表中显示的节还是重叠的- -。直接懵逼了
2016-8-24 21:20
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
4
你那是加过壳的pe所以情况特殊
2016-8-25 08:22
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
是的谢了,刚看了下确实加壳了- -感谢
2016-8-25 09:31
0
游客
登录 | 注册 方可回帖
返回
//