PE头解析

下载

1
2
滴水官网
https://www.bcdaren.com/download/downdesc/356797348753707008

winhex

打开未运行的记事本

image-20241127152629113

打开在内存中的记事本,运行记事本程序

image-20241127153139006

对比

普通程序从00000000开始

内存中的程序不是

普通程序有一块空白区

内存中的程序空白区比较大

PE

.exe .dll .sys 开头都是4D5A,他们属于一种叫做可执行文件的头部标识

像.txt这类文件需要借助notepad等其它程序才能被打开的文件不属于可执行文件

不同的操作系统有不同的文件规范

PE结构分节

每个程序都有自己独立的4GB虚拟空间,不同的编译器有不同的PE结构对齐方式,硬盘对齐200h字节内存对齐1000h字节

程序分节方便多开等操作,只读数据区就不需要再开辟空间

image-20241127154920970

左侧在硬盘里,右侧在内存里

块表,也叫节表,记录了程序的每节在内存中哪里开始哪里结束

PE头和DOS头会对这个文件做简单的描述,比对堆栈分多大,程序运行是一个拉伸过程

查找

打开notepad.exe

image-20241127155042377

DOS头,在内存中以字节为单位显示一般软件都是高位在前低位在后,两个十六进制数是一个字节,但是在win32等软件打开exe程序显示的往往是低位在前高位在后,需要我们自己去数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
WORD	e_magic;*//5A4D
WORD e_cblp;//0090
WORD e_cp;//0003
WORD e_crlc;//0000
WORD e_cparhdr;//0004
WORD e_minalloc;//0000
WORD e_maxa1loc;//FFFF
WORD e_ss;//0000
WORD e_sp;//00B8
WORD e_csum;//0000
WORD e_ip;//0000
WORD e_cs;//0000
WORD e_lfarlc;//0040
WORD e_ouno;//0000
WORD e_res[4];//0000 0000 0000 0000
WORD e_oemid;//0000
WORD e_oeminfo;//0000
WORD e_res2[10];//0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
DwORD e_lfanew;*//00E0

PE头

1
2
3
4
5
6
7
WORD	Machine;*//014C
WORD NumberOfSections;*//0003
DWORD TimeDateStamp;*//41107CC3
DWORD PointerToSymbolTable//00000000
DWORD NumberOfSymbols;//00000000
WORD size0foptiona1Header*//00EO
WORD characteristics;*//010F

扩展PE头

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
WORD	Magic;*//010b
BYTE MajorLinkerUersion;
BYTE MinorLinkerUersion;
DWORD size0FCode ;*
DWORD size0fInitializedData;*
DWORD size0fUninitializedData;*
DWORD AddressEntryPoint;*
DWORD Base0fCode ;*
DWORD Base0fData;*
DWORD ImageBase;*
DWORD Sectionnlignment;*
DWORD FileAlignment;*
WORD MajoroperatingSystemUersion;
WORD Minor0peratingsystemUersion;
WORD MajorImageUersion;
WORD MinorImageUersion;
WORD MajorSubsystenUersion;
WORD MinorSubsystenUersion;
DWORD win32uersionualue;
DWORD size0fImage;*
DWORD size0FHeaders;*
DWORD CheckSum;*
WORD Subsystem;
WORD D11Characteristics;
DWORD Size0fStackReserue ;*
DWORD Size0fStackCommit;*
DWORD Size0fHeapReserue;*
DWORD Size0fHeapCommit;*
DwORD LoaderF1ags;
DwORD Number0fRvaAndSizes;