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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值