PE文件介绍 -DOS头,DOS存根,NT头

Posted mhpcuit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PE文件介绍 -DOS头,DOS存根,NT头相关的知识,希望对你有一定的参考价值。

PE头

PE头由许多结构体组成,现在开始逐一学习各结构体

0X00 DOS头

微软创建PE文件格式时,人们正广泛使用DOS文件,所以微软充分考虑了PE文件对DOS文件的兼容性。其结果是在PE头的最前面添加一个 IMAGE_DOS_HEADER 结构体用来扩展DOSEXE头

IMAGE_DOS_HEADER

typedef struct _IMAGE_DOS_HEADER
{
     WORD e_magic;  //DOS签名 4D5A
     WORD e_cblp;
     WORD e_cp;
     WORD e_crlc;
     WORD e_cparhdr;
     WORD e_minalloc;
     WORD e_maxalloc;
     WORD e_ss;
     WORD e_sp;
     WORD e_csum;
     WORD e_ip;
     WORD e_cs;
     WORD e_lfarlc;
     WORD e_ovno;
     WORD e_res[4];
     WORD e_oemid;
     WORD e_oeminfo;
     WORD e_res2[10];
     LONG e_lfanew;   //指向NT头所在的位置
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

IMAGE_DOS_HEADER 结构体的大小位64字节,一个WORD类型两个字节时一个字,一个LONG类型是四个字节两个字,所以该结构体为 30个WORD类型+ 1个LONG类型 为 64字节。

在该结构体中必须知道2个重要的成员:e_magice_lfanew

  • e_magic: DOS签名(4D5A => ASCLL值 “MZ”)
  • e_lfanew: 指示NT头的偏移(不同的文件该值不一样)

0X01 使用Hxd在电脑中查看PE格式

把炉石传说的客户端放入Hxd软件中查看

技术图片

从图中可以看出标黄的是DOS签名4D5A为MZ,整个红框为 DOS头64个字节,最底下绿色框标出来的为NT文件头所在位置 0X00000120 Intel系列CPU以逆序存储数据,这称为小端序标识法。这些是值被修改后将不能够运行(根据PE规范,它以不再是PE文件)。

0X02 DOS存根

DOS存根在DOS头下面,是个可选项,且大小不固定(即使没有DOS存根,文件也能正常运行)DOS存根由代码与数据混合而成下图为炉石传说的客户端的DOS存根

技术图片

DOS存根的大小不固定,从0x40开始到NT头截至。图中文件偏移40-4D区域为16位汇编指令。32位windows OS中直接忽略该命令。

以上是关于PE文件介绍 -DOS头,DOS存根,NT头的主要内容,如果未能解决你的问题,请参考以下文章

PE文件格式详解

API HOOK介绍

PE工具中的WinNTSetup(又称 win安装器)

制作系统U盘,不用做任何动作直接从U盘启动装系统(非PE的)

PE重装系统,U盘重装系统,一步到位,重装无忧!

PE格式:手工实现IAT导入表注入劫持