IDA Pro 代码破解揭秘 (二) 可执行文件和可执行连接格式

一,可移植可执行文件格式(PE Portable Executable)

全称为PE-COFF(Portable Executable and Common Object File Format) 可移植可执行和通用对象文件格式。

主要用于Windows 环境。PE 是 COFF 的改进版。


一个典型的PE文件布局


IDA Pro 代码破解揭秘 (二) 可执行文件和可执行连接格式_第1张图片

Dos Stub 程序用于保持向后兼容,但其重要意义在于在逆向工程中指向一个PE头的偏移量。

从图中我们可以看出程序一开始会是DOS 头,但其用处不大。

从文件头开始向后偏移 0x3C 的位置,我们可以找到一个偏移量,这个偏移量可以告诉我们从文件头向后偏移多少是PE的头部。


PE文件头后便是COFF文件头。


COFF 文件头格式:

IDA Pro 代码破解揭秘 (二) 可执行文件和可执行连接格式_第2张图片


Machine (机器类型):2个字节,值几乎总是 0x8664(AMD 64) 或 0x14C(AI32)

Number of Section(区段数):指示文件有多少个区段。

Time Date Stamp:时间戳

Pointer to Symbol Table:指向COFF符合表的偏移量

Number of Symbols:符号数

Size of Optional Header:可选头部的大小

Characteristics:指文件的属性,例如是否是DLL等。


可选头部布局:



可选头部布局详细信息

magic:可用于标识 PE版本的一个标志 PE32 :0x10B  PE32+:0x20B

size字段:分别指示 .text/code  .data  .bss区段大大小

RVA(Relative Virtual Address):相对虚拟地址,应用程序开始运行的地址。


(Note:先留个印象吧,回头在实际应用时看看其具体的作用)


二,可执行连接格式(ELF Executable and Linkable Format)

ELF 可执行连接格式,UNIX操作系统的文件格式。

IDA Pro 代码破解揭秘 (二) 可执行文件和可执行连接格式_第3张图片

e_ident:用于确认ELF文件。确定处理器原生字的大小,指定字节顺序,及ELF头部版本。

它是一个无符号字符数组,共16个元素。

开始4个字节是magic字段 0x7F,E,L,F。

接下来的一个字节指定字的大小或类:0表示无效类,1表示32位,2表示64位。

接下来的一个字节指定文件内数据编码:0表示无效,1表示数据是小端字节序的二进制补码,2表示数据是大端字节序的补码

接下来的一个字节指定ELF头部版本。


e_type:确定文件是何种类型的可执行文件。

          0:不是文件类型

          1:可重定位的文件

          2:可执行文件

          3:共享目标文件


e_machine:表示机器类型   3 表示 IA 32

e_version:0表示无效版本, 1 表示当前版本

e_entry:应用程序进入点的VA (Virtual Address),不使用时为 0。

e_phoff:(ph program header),程序头部表的偏移量,0 表示没有程序头部表。

e_shoff:(sh section header),区段头部表的偏移量,0 表示没有区段头部表。

e_flags:包含与处理器相关的字段。

e_ehsize:ELF头部的大小。

e_phnum:表示头部表里记录的数量。

e_shnum:表示区段表里记录的数量。


关于Unix程序,由于实验环境有限,先以Windows为主,这部分作为后面学习的线索先保留在这吧。


你可能感兴趣的:(IDA Pro 代码破解揭秘 (二) 可执行文件和可执行连接格式)