我可以编辑 .EXE 文件的头字节但仍保留可运行的程序吗?

我可以编辑 .EXE 文件的头字节但仍保留可运行的程序吗?

我们知道,exe 文件通常以 4D5A 或 ASCII 中的“MZ”开头。我该如何更改标题,同时仍允许文件正常工作?

现在我正在查看 ccleaner 的 exe 文件。不幸的是,我没有 10 个代表,所以我无法发布它的屏幕截图。但右侧的 ASCII 表示该程序无法以 ASCII 运行,因此导致 4D5A 无效?那么从技术上讲,我可以将 4D5A 更改为其他东西,它仍然可以工作吗?

如果这里有任何老派人士,我将非常感激他们提供有关“DOS MZ”的尽可能多的信息。

这是我正在看的图像:

CCleaner十六进制视图

答案1

我该如何更改标题同时仍允许文件正常工作?

你不能!

MZ这个字符串(16 位表示0x5A4D)被称为“魔法”数字是有原因的,事实上,根据 EXE/PE 规范(其根源可以追溯到 DOS 格式的可执行文件),它是必需的。所有现代的布局可移植的可执行文件如下显示(參考):

在此处输入图片描述

这篇 MSDN 文章关于可移植可执行格式,MS-DOS标头详细说明:

MS-DOS 标头

每个 PE 文件都以一个小型的 MS-DOS® 可执行文件开头。对这个存根可执行文件的需求出现在 Windows 早期,当时还没有大量消费者运行它。当在没有 Windows 的机器上执行时,该程序至少可以打印出一条消息,说明运行该可执行文件需要 Windows。

PE 文件的第一个字节以传统的 MS-DOS 头开始,称为IMAGE_DOS_HEADER仅有的两个重要值是 e_magice_lfanewe_lfanew字段包含 PE 头的文件偏移量。

田野e_magic(一个 WORD[注意:16位]) 需要设置为值 。此值0x5A4D有一个,名为。在 ASCII 表示中,是,这是 MS-DOS 的原始架构师之一 Mark Zbikowski 的姓名首字母。#defineIMAGE_DOS_SIGNATURE0x5A4DMZ


有关 Windows PE/.EXE 格式的更多信息,我强烈建议您查看Windows 可执行文件部分x86 反汇编 Wikibook. 它包含大量有关格式的低级信息。

相关内容