PE 文件格式一览
PE 的意思就是 Portable Executable (可移植的执行体)。它是 Win32 环境自身所带的执行体文件格式。它的一些特性继承自 Unix 的 Coff (common object file format) 文件格式。 "portable executable" (可移植的执行体)意味着此文件格式是跨 win32 平台的 : 即使 Windows 运行在非 Intel 的 CPU 上,任何 win32 平台的 PE 装载器都能识别和使用该文件格式。当然,移植到不同的 CPU 上 PE 执行体必然得有一些改变。所有 win32 执行体 ( 除了 VxD 和 16 位的 Dll) 都使用 PE 文件格式,包括 NT 的内核模式驱动程序( kernel mode drivers )。因而研究 PE 文件格式给了我们洞悉 Windows 结构的良机
上图是 PE 文件结构的总体层次分布。所有 PE 文件 ( 甚至 32 位的 DLLs) 必须以一个简单的 DOS MZ header 开始。我们通常对此结构没有太大兴趣。有了它,一旦程序在 DOS 下执行, DOS 就能识别出这是有效的执行体,然后运行紧随 MZ header 之后的 DOS stub 。 DOS stub 实际上是个有效的 EXE ,在不支持 PE 文件格式的操作系统中,它将简单显示一个错误提示,类似于字符串 "This program requires Windows" 或者程序员可根据自己的意图实现完整的 DOS 代码。通常我们也不对 DOS stub 太感兴趣 : 因为大多数情况下它是由汇编器 / 编译器自动生成。通常,它简单调用中断 21h 服务 9 来显示字符串 "This program cannot run in DOS mode" 。
紧接着 DOS stub 的是 PE header 。 PE header 是 PE 相关结构 IMAGE_NT_HEADERS 的简称,其中包含了许多 PE 装载器用到的重要域。当我们更加深入研究 PE 文件格式后,将对这些重要域耳目能详。执行体在支持 PE 文件结构的操作系统中执行时, PE 装载器将从 DOS MZ header 中找到 PE header 的起始偏移量。因而跳过了 DOS stub 直接定位到真正的文件头 PE header 。
PE 文件的真正内容划分成块,称之为 sections (节)。每节是一块拥有共同属性的数据,比如代码 / 数据、读 / 写等。我们可以把 PE 文件想象成一逻辑磁盘, PE header 是磁盘的 boot 扇区,而 sections 就是各种文件,每种文件自然就有不同属性如只读、系统、隐藏、文档等等。 值得我们注意的是 ---- 节的划分是基于各组数据的共同属性 : 而不是逻辑概念。 重要的不是数据 / 代码是如何使用的,如果 PE 文件中的数据 / 代码拥有相同属性,它们就能被归入同一节中。不必关心节中类似于 "data", "code" 或其他的逻辑概念 : 如果数据和代码拥有相同属性,它们就可以被归入同一个节中。(译者注:节名称仅仅是个区别不同节的符号而已,类似 "data", "code" 的命名只为了便于识别,惟有节的属性设置决定了节的特性和功能)如果某块数据想付为只读属性,就可以将该块数据放入置为只读的节中,当 PE 装载器映射节内容时,它会检查相关节属性并置对应内存块为指定属性。
如果我们将 PE 文件格式视为一逻辑磁盘, PE header 是 boot 扇区而 sections 是各种文件,但我们仍缺乏足够信息来定位磁盘上的不同文件,譬如,什么是 PE 文件格式中等价于目录的东东?别急,那就是 PE header 接下来的数组结构 section table (节表)。 每个结构包含对应节的属性、文件偏移量、虚拟偏移量等。如果 PE 文件里有 5 个节,那么此结构数组内就有 5 个成员。因此,我们便可以把节表视为逻辑磁盘中的根目录,每个数组成员等价于根目录中目录项。
以上就是 PE 文件格式的物理分布,下面将总结一下装载一 PE 文件的主要步骤 :
当 PE 文件被执行, PE 装载器检查 DOS MZ header 里的 PE header 偏移量。如果找到,则跳转到 PE header 。 PE 装载器检查 PE header 的有效性。如果有效,就跳转到 PE header 的尾部。 紧跟 PE header 的是节表。 PE 装载器读取其中的节信息,并采用文件映射方法将这些节映射到内存,同时付上节表里指定的节属性。 PE 文件映射入内存后, PE 装载器将处理 PE 文件中类似 import table (引入表)逻辑部分。
上述步骤是基于本人观察后的简述,显然还有一些不够精确的地方,但基本明晰了执行体被处理的过程。
你应该下载 LUEVELSMEYER 的《 PE 文件格式》 。 该文的描述相当详细,可用作案头的参考手册
- 大小: 10.3 KB
分享到:
相关推荐
### PE文件中脱壳技术的研究 #### 摘要与背景 随着信息技术的快速发展,软件保护成为了一个重要的议题。为了防止软件被非法复制或者逆向工程,开发人员常常采用一种称为“加壳”的技术来保护自己的软件产品。然而...
都会使计算机产生安全隐患或者使软件的核心技术被窃取,所以保护PE文件不被修改是一件很重要的工作,当前通常采用加壳的方法对PE文件进行保护,这其中UPX是具有代表性的压缩类外壳。 本文首先对PE文件格式进行了全面...
UPX是一个着名的压缩壳,主要功能是压缩PE文件(比如exe,dll等文件),有时候也可能被病毒用于免杀。壳upx是一种保护程序。 ........................ UPX是大家熟悉的EXE/Dll资源压缩工具,也称作可执行文件压缩...
综上所述,PE万能脱壳工具是一种强大的分析和反恶意软件工具,它们能够去除加在PE文件上的各种壳,使原本隐藏的代码暴露出来,以便于逆向工程和安全研究。配合像OllyDbg这样的调试器,可以深入理解程序的行为和逻辑...
UPX(UPX UnPacker eXtended)是一款广泛使用的可执行文件压缩工具,它能够将PE(Portable Executable,Windows平台上的可执行文件格式)文件进行压缩,从而减小程序的体积,提高分发效率。然而,这也为逆向工程和...
在计算机安全领域,PECompact是一款知名的可执行文件打包和压缩工具,它能够将Windows下的PE(Portable Executable)格式文件进行压缩,从而减小文件体积,提高分发效率。然而,这样的压缩过程也使得一些恶意软件...
总结以上内容,脱壳是逆向工程的重要组成部分,需要掌握PE文件格式、SEH机制、调试工具的使用,以及对各种加密算法和保护技术的理解。只有对这些基础知识和高级技术有了充分的认识,才能在软件安全和逆向工程的道路...
Aspack stripper就是这样的一个工具,它的主要功能是对使用ASPack 2.12版本压缩的可执行文件进行自动脱壳。这个工具的存在,使得安全分析人员能够揭示被压缩和混淆的原始代码,从而更好地理解软件的工作原理,检查...
2. **脱壳机制**:脱壳工具的核心在于正确地解压UPX壳并恢复原始的未压缩PE文件。源码可能会包含解压算法,根据UPX的压缩格式进行还原。 3. **内存操作**:由于程序可能已经在内存中运行,脱壳工具可能需要在内存中...
#### 一、PE文件格式详解 PE(Portable Executable File Format)即可移植的执行体文件格式,是Windows操作系统下主要的可执行文件格式之一。对于想要深入理解脱壳技术的学习者来说,熟悉PE文件格式至关重要。 **...
- **静态与动态分析的兼容性**:构建一个可以在静态分析时重建有效PE文件,并在动态分析时执行的PE文件。 - **防止恶意软件检测**:确保脱壳过程不会被恶意软件检测到,避免分析过程中的干扰。 - **兼容性问题**:...
ASPack_2.12脱壳机是一款针对可执行文件(EXE)的压缩和混淆工具,主要用于减小程序的体积,提高其运行速度。在软件开发和逆向工程领域,脱壳机则是用于揭示被ASPack等压缩壳保护的程序原始代码的重要工具。ASPack...
在IT领域,尤其是在逆向工程和恶意软件分析中,"脱壳"是一项关键技能。...因此,深入理解PE文件格式、汇编语言以及调试技术是进行此类分析的基础。通过不断的实践和学习,我们可以提高在面对复杂壳时的解密和分析能力。
有些模糊处理一个Win32 PE等包装.NET程序集里面的.NET反编译器无法读取该文件。 移除大多数/所有的垃圾类添加混淆。 修复了一些的peverify错误。许多混淆器是马车和创建无法验证的代码错误。 还原类型的方法的参数和...
ASPACK是一款著名的软件压缩和加壳工具,由Andrey Breslav开发,它能将可执行文件进行压缩,减小其体积,同时增加反调试和反静态分析的特性,使得程序更加难以逆向工程分析。ASPACK 2.1和2.2是该工具的两个较早版本...
你可以用它来压缩或解压缩PE(Windows)、ELF(Linux)或DOS格式的可执行文件。例如,将一个.exe文件压缩,可以使用以下命令: ``` upx -q your_program.exe ``` 如果想要脱壳,只需添加`-d`参数: ``` upx -qd your...
标题中的“PEID脱壳工具好用”指出我们要讨论的是一个名为PEID的软件,它在IT领域中被广泛用于处理可执行文件的脱壳工作。脱壳是逆向工程的一部分,目的是揭示隐藏在程序外壳下的原始代码或功能,通常用于分析恶意...
这个工具的工作原理,它的壳特征和编译器特征保存在HackFans.txt里面,能识别出来的壳,基本上都有对应的脱壳函数,用壳特征脱壳,可以脱壳,对于一些不好特殊的壳你可以用OEP侦测来脱壳,这要依赖编译器特征,你也可以自己...