用Winhex软件解析PE文件

一、概念

1. PE文件

PE(Portable Executable)文件,被称为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)

2. 实验对象

本文对动态链接库文件.dll文件进行解析

二、Winhex解析DLL文件

1. 用Winhex打开user32.dll

User32.dll
3CH 处为PE头位置:0x F8

DOS头部分:
DOS头部分

2. 转到 F8处

这里写图片描述
PE文件标志(4H字节): 00 00 45 50

映像文件头(14H字节):

NumberOfSections : 00 06 --> 6
SizeOfOptionalHeader:00 E0 --> 224

3. 可选映像头(部分)

这里写图片描述

SizeOfCode(可执行代码长度): 00 08 30 00
AddressOfEntryPoint(代码入口RVA): 00 01 58 A0
ImageBase(相对PE头偏移 34): 6B A8 00 00
SectionAlignment: 00 00 10 00
FileAlignment: 00 00 02 00

SizeOfImage: 00 15 30 00
NumberOfRvaAndSizes: 00 00 00 10
DataDirectory : 00 00 24 E4

PS: 01 70起8字节为导出表描述部分前四个字节为 00 00 24 E4

4. SectionTable(节表)

从PE映像文件末尾 01 10偏移00 E0(SizeOfOptionalHeader) --> 01 F0
这里写图片描述

Name: .text
VirtualSize: 00 08 2E 9C
VirtualAddress(内存对齐后地址): 00 00 10 00
SizeOfRawData(文件对齐后尺寸): 00 08 30 00
PointerToRawData(文件对齐处位置): 00 00 04 00

Name: .data
VirtualSize: 00 00 10 3A
VirtualAddress(内存对齐后地址): 00 08 40 00
SizeOfRawData(文件对齐后尺寸): 00 00 10 00
PointerToRawData(文件对齐处位置): 00 08 34 00

Name: .idata
VirtualSize: 00 00 2D 72
VirtualAddress(内存对齐后地址): 00 08 60 00
SizeOfRawData(文件对齐后尺寸): 00 00 2E 00
PointerToRawData(文件对齐处位置): 00 08 44 00

Name: .didat
VirtualSize: 00 00 00 4C
VirtualAddress(内存对齐后地址): 00 08 90 00
SizeOfRawData(文件对齐后尺寸): 00 00 02 00
PointerToRawData(文件对齐处位置): 00 08 72 00

Name: .rsrc
VirtualSize: 00 0C 3E 18
VirtualAddress(内存对齐后地址): 00 08 A0 00
SizeOfRawData(文件对齐后尺寸): 00 0C 40 00
PointerToRawData(文件对齐处位置): 00 08 74 00

Name: .reloc
VirtualSize: 00 00 4D E8
VirtualAddress(内存对齐后地址): 00 14 E0 00
SizeOfRawData(文件对齐后尺寸): 00 00 4E 00
PointerToRawData(文件对齐处位置): 00 14 B4 00

5. Export(导出表)

RVA: 00 00 24 E4 (从之前可选头部分关于导出表描述部分读取)
Offset = 00 00 24 E4 - 00 00 10 00 + 00 00 04 00 = 00 00 18 E4

减数为第一个节表 .text的VirtualAddress( 00 00 10 00),之后加上的是PointerToRawData( 00 00 04 00)

Name: 00 00 4A 98 --> 3E 98
这里写图片描述

AddressOfFunction: 00 00 25 0C --> 19 0C
00 05 9A 90
00 03 61 60
00 03 61 80
00 02 44 D0
00 01 E4 50
.....

AddressofName: 00 00 35 A4 --> 29 A4
00 00 4A A3 --> 3E A4 --> “ActivateKeyboardLayout”
00 00 4A BA --> 3E BA–> “AddChipboardFormatListener”
00 00 4A D5 --> 3E D5 --> “AdjustWindowRect”
00 00 4A E6 --> 3E E6 --> “AdjustWindowRectEx”
00 00 4A F9 --> 3E F9 --> “AlignRects”
.....

AddressofOrdinals: 00 00 43 9C --> 37 9C
00 01
00 02
00 03
00 04
00 05
.....

更多实践参考C/C++编程解析PE文件结构

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
winhex是一款十六进制编辑器和文件恢复工具,虽然它主要用于编辑和恢复文件,但也可以用来编写PE文件PE文件是一种Windows可执行文件格式,通常包括EXE和DLL文件。在winhex中编写PE文件需要对该文件格式有一定的了解。 首先,打开winhex并创建一个新的文件。然后,选择“编辑”菜单中的“插入”选项,以便插入PE文件的头部信息。在新的文件中,需要按照PE文件格式的规范依次填写文件头、可选头和节表等信息,确保文件的格式和结构是符合PE文件的标准。 接着,需要逐个添加节表,每个节表包括名称、虚拟大小、虚拟地址和物理地址等信息。这些信息在winhex中可以以十六进制的形式进行编辑和填写。同时,还需要在文件中添加导入表和导出表等PE文件所需的信息以确保文件的正常运行。 在编写PE文件的过程中,需要谨慎操作并确保每个部分的格式和信息都是正确的。一旦文件的结构和内容存在问题,那么文件可能无法被正确识别和执行。因此,在使用winhex编写PE文件时,需要对PE文件格式有一定的了解,并且要仔细检查每个部分的内容,以确保文件的正确性和可执行性。 总之,使用winhex可以编写PE文件,但需要对PE文件格式有一定的了解,并且需要仔细操作以确保文件的正确性。同时,也可以参考相关的文档和工具来辅助编写PE文件,以提高工作效率和准确性。 (300字)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值