PE结构学习(1)_认识PE文件

认识PE文件

什么是PE文件

PE(Portable Executable)文件是Windows操作系统上的一种可执行文件格式。它包含了可执行代码、数据、资源和元数据,以及其他必要的信息,例如程序入口点、导入表、导出表和重定位表等等。PE文件是Windows操作系统中所有可执行文件的标准格式,包括应用程序、动态链接库(DLL)、驱动程序等等

可执行文件在不同的操作系统平台有不同的结构

  • Windows平台:PE(Portable Executable)
  • Linux平台:ELF(Executable and Linking Format)

常见的PE文件后缀名有EXE, DLL,SYS等


PE指纹

可以通过PE指纹来识别该文件是否为PE文件,首先用notepad打开此文件并查看其16进制格式,可以发现开头的ASCII码是"MZ",然后观察偏移量为3C的位置,其硬编码为F8,对应的ASCII码为?
请添加图片描述

然后再找到偏移量为F8的位置,发现一个5045,其对应的ASCII码为PE
请添加图片描述

以下是通过识别PE指纹来判断PE文件的python代码

import os

def is_pe_file(file_path):
    with open(file_path, 'rb') as f:
        # 读取DOS头的前两个字节,判断是否为MZ
        if f.read(2) != b'MZ':
            return False
        # 读取PE头的偏移量
        f.seek(0x3C)
        pe_offset = int.from_bytes(f.read(4), byteorder='little')  #int.from_bytes(bytes, byteorder)是一个Python内置函数,它将给定字节序列转换为一个整数。bytes参数是待转换的字节序列,byteorder参数指定了字节序,它可以是'little'或'big',分别表示小端序和大端序。在Windows平台上,PE文件的字节序是小端序,因此我们使用'little'作为byteorder参数
      
        # 定位到PE头的位置
        f.seek(pe_offset)
        # 判断PE头的前两个字节是否为PE
        if f.read(2) != b'PE':
            return False
        return True

# 示例用法
file_path = 'test.exe'
if is_pe_file(file_path):
    print(f"{file_path}是一个PE文件")
else:
    print(f"{file_path}不是一个PE文件")



PE结构大体

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PE结构(Portable Executable Structure)是一种Windows操作系统下的可执行文件格式,常用于存储和加载应用程序、动态链接库和驱动程序等可执行文件。而PDF(Portable Document Format)是一种跨平台的文档格式,用于显示和打印独立于软件、硬件和操作系统的文件PE结构和PDF文件在某些方面具有相似之处。首先,它们都是可移植的,即可以在不同的操作系统和计算机上使用。无论是PE结构的可执行文件,还是PDF文件的文档,都可以在多个平台上进行读取和执行。 其次,它们都使用了特定的文件结构PE结构通过头部信息、代码段、数据段、导出表、导入表等部分来组织和存储可执行代码和数据。而PDF文件通过文件头、文档信息、页面内容、字体信息等部分来保存和展示文档的内容。 最后,它们都支持一定程度的可编辑性。PE结构可以通过调试器、反汇编等工具进行调试和修改,以实现特定的功能需求。PDF文件可以使用编辑工具对文本、图片等元素进行修改和更新。 然而,PE结构和PDF文件也有一些明显的差异。首先,PE结构主要用于存储可执行代码和数据,而PDF文件主要用于存储文档内容。其次,PE结构具有更强的可执行性,可以在系统级别上执行代码,而PDF文件主要用于显示和打印文档,不具备直接执行代码的功能。 总之,PE结构和PDF文件是两种不同的文件格式,分别用于存储和加载可执行代码和数据,以及显示和打印文档内容。它们在某些方面具有相似之处,但也有一些明显的差异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值