逆向基础-PE文件

PE文件组成

  • 文件头(header)
    • DOS部分(DOS header)
      • DOS头
      • DOS stub
    • NT 头
      • 标识符
      • PE头(PE header)
      • 可选头(optional header)
        • 数据目录(data directories)
    • 节表(sections table)
  • 节区(sections)
    • code
    • imports
    • data

文件头

DOS部分

在windosw NT之前的windosw系统是基于dos操作系统内核,为了兼容
dos系统上可执行文件,windows NT在设计可执行文件格式时需要保证
兼容之前的格式

PE文件中的dos实模式残留数据包括两部分:DOS头 + DOS stub

DOS头

固定长度,且长度是64字节,512位。是一个标准的结构体

重点关注首尾两个字段:0×5A4D和0×00E0

0×4D5A:这个是标准的PE文件的最开始的两个字节,转为字符输出为
MZ,是用作判断一个文件是否为PE文件的终于特征之一。MZ这个缩写是
早期微软作者:Mark Zbikowski的名字缩写
0×00E0:这个是记录NT头也就是真正的PE头开始的地址

DOS stub

不定长度,调度21号中段的9号功能,向屏幕输出一个字符串,一般情
况下会输出以下内容:This is program cannot be run in DOS mode,然后调用4C号功能退出程序

NT头

在NT头里面包含三个内容:标识符,PE头,可选头

标识符

其中的标识符是固定的4个字节:0×4550,也就是在逆向中展示为:
50 45 00 00,这个对应的就是PE这两个字母,这里也是PE文件重要标识之一

PE头

长度是20个字节,这里面包含了一些重要的信息:运行平台,节数目,
文件创建时间,指向符号表指针,符号数目,可选头长度,文件属性

可选头

字段很多,当前基础暂时掌握以下字段即可:ImageBase,
  • ImageBase
默认的地址是可以被修改的,只是一般情况下会采用默认值
对于一个exe文件,一般默认加载到0x00400000
动态链接库文件:0x10000000

现在高版本的操作系统都支持ASLR安全机制,也就是地址加载随机化
技术。每一次加载的地址都是随机化了的,这样程序安全性会更高,
避免被黑客计算出地址进行针对

  • AddressOfEntryPoint
这个指的是PE文件的执行入口地址,这个地址是相对地址,
相对于ImageBase的地址

对于可执行文件,这个地址就是程序的起始地址,
进程开始运行的时候,就是从这个地址开始执行指令的。

对于dll动态链接库,则是函数初始化的地址。

问题来了:这个地址是否就是我们的入口函数的地址呢?
  • DllCharacteristics
这个字段用来记录PE文件的属性的,一般用来标识当前这个PE文件支持那些安全属性,比如ALSR

当操作系统对PE文件进行加载的时候,读取到此处,则会应用相对于的安全机制开启这个PE文件
数据目录

这个用来登记重要数据,比如导入表和导出表

IMAGE_DATA_DIRECTORY是一个数组,其中IMAGE_NUMBEROF_DIRECTORY_ENTRIES被定义为16

而数据目录中的每一项都是一个IMAGE_DATA_DIRECTORY的结构

在IMAGE_DATA_DIRECTORY中总共记录了16种数据,理论上长度是会变化的,但是当前windosw是16种数据

而这16个结构为下图,这里面只包含两个数据,一个是虚拟地址:RVA(相对地址),一个是大小

这16种数据分别是:

节表

PE文件是以节为单位,在组织各种代码和数据,在正文部分依次排列,
而节表在头部区域用来索引这些节的信息

表中的每一项都是固定的结构,长度是40字节,描述了文件的正文部
分的一个节的信息。包括节的名字,节加载的地址(相对于ImageBase),节在PE文件中的大小,节的属性信息等

节的名字特征是以点开头,比如.data,总长度不会超过8个字节

节区

.text:代码节(VC)
.code:代码节(VB/Delphi)
.data:数据节(一般存放已初始化的全局变量,静态变量)
.rdata:只读数据节(一般存放只读数据,如常量字符串,C++虚表)
.idata:输入数据表(一般用来存放IAT和导入表)
.bss:通常是指用来存放程序中未初始化的全局变量、静态变量
.textbss:节中同时包含代码和未初始化全局变量、静态变量
.rsrc:资源节
.reloc:重定位表
posted @ 2024-12-12 18:13  影梦无痕  阅读(22)  评论(0)    收藏  举报