打造最小的PE文件 下载本文

内容发布更新时间 : 2024/5/6 14:54:18星期一 下面是文章的全部内容请认真阅读。

打造最小的PE文件

打造最小的PE文件

打造最小的PE文件

(bkbll#cnhonker.net 2005-9-18 9:01)一. 前言.

最近在鼓捣windows下PE文件格式, 在达到既定目标后, 对生成最小PE文件产生了兴趣, 恰好

看到 watercloud(watercloud_at_xfocus.org)在近2年前写过一篇文章<<手工打造微型Win32 可执行文件

>>(http://www.xfocus.net/articles/200302/482.html), 我也依葫芦画瓢,打造

一下我认为最小的PE文件,由于是初次接触PE格式,如有差错,敬请斧正.

本文所有程序均在win2k sp4 cn和windows xp sp1 cn上测试通过.二. PE文件格式,结构

在winnt.h中,有PE各种结构的定义,这里就不一一列举, 仅将相关结构名列举如下:

IMAGE_DOS_HEADER,IMAGE_NT_HEADERS,IMAGE_F

ILE_HEADER,IMAGE_OPTIONAL_HEADER,

IMAGE_DATA_DIRECTORY,IMAGE_SECTION_HEADER,IMAGE_IMPORT_DESCRIPTOR

因为目标是打造最小的PE文件,所以仅用到一个IMPORT表.

PE整个文件框架大致如下:

| IMAGE_DOS_HEADER |

| Signature |

| IMAGE_NT_HEADER | -> | IMAGE_FILE_HEADER | |

IMAGE_OPTIONAL_HEADER | ->

| IMAGE_DATA_DIRECTORY |

......

| IMAGE_SECTION_HEADER |

........

| 代码段 | 三. 不一样的地方

watercloud 的PE已经比较小了,但还有几个地方我处理的不大一样:

1. WindowsXP 可以允许PE section为1个. 试验系统是xp sp1 cn

2. 文件对齐 windows是规定是2的幂, 当然可以比0x200小.

当然,除了上面2点以外,我还有用到一种比较巧妙的技巧.

运行PE文件,会在屏幕上打印Hello,world信息.

四. 打造过程. 1. 过程一:

最开始我们按照PE结构和顺序一步步填充结构,看能有多大:

我们先选取对齐值为0x20. 这里我们选

MAGE_OPTIONAL_HEADER.DataDirectory个数为16个