手工打造PE文件:[2]分析DOS头部

2026-05-28 17:01:55

DOS头部:

struct _IMAGE_DOS_HEADER {

0x00   WORD e_magic;        ;DOS可执行文件标记“MZ”,被#define IMAGE_DOS_SIGNATURE 0x5A4Dh

0x02   WORD e_cblp;

0x04   WORD e_cp;

0x06   WORD e_crlc;

0x08   WORD e_cparhdr;

0x0a   WORD e_minalloc;

0x0c   WORD e_maxalloc;

0x0e   WORD e_ss;

0x10   WORD e_sp;

0x12   WORD e_csum;

0x14   WORD e_ip;            ;DOS代码入口IP

0x16   WORD e_cs;            ;DOS代码的入口CS

0x18   WORD e_lfarlc;

0x1a   WORD e_ovno;

0x1c   WORD e_res[4];

0x24   WORD e_oemid;

0x26   WORD e_oeminfo;

0x28   WORD e_res2[10];

0x3c   DWORD e_lfanew;      ;指向PE文件头“PE”,0,0

};

我们只关心第一个和最后一个这2个变量:

第一个:e_magic  [WORD]  -->4D 5A(* DOS可执行文件头标记)

        //注释:此处值总是为MZ的16进制码。

最后一个:e_lfanew  [DWORD]  -->B0 00 00 00 (* 指向PE文件头的偏移量。0xB0=64+112)

//注释:此处的值正好为为DOS头部的大小,因为DOS头部后面就是PE文件头部分了。

了解了DOS头部,下面就可以开始我们的程序的第一步了,要准备的软件有:c32asm

1.首先新那建一个文件文件,我们将其改成t.exe,然后用c32asm打开,选择十六进制模式

2.然后点击 编辑->插入数据->插入数据大小:64,使用16进制填充:00;如图:

手工打造PE文件:[2]分析DOS头部

3.然后将上面分析的2个变量填充其中,如图:

手工打造PE文件:[2]分析DOS头部

4.接下来我们来完成“MS-DOS 实模式残余程序”(Dos Stub),我们已经知道,他是用在DOS下执行的,我们这里可以直接用“00”来填充,

注意总共112 byte。 这两部分完成之后代码如下:

手工打造PE文件:[2]分析DOS头部

(共篇)上一篇:什么是PE文件
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢