当前位置: 首页 > ai >正文

Windows逆向工程提升之IMAGE_FILE_HEADER

  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

IMAGE_FILE_HEADER 介绍

IMAGE_FILE_HEADER 结构

核心字段解析

Machine(目标平台架构)

NumberOfSections(节数目)

TimeDateStamp(时间戳)

PointerToSymbolTable(符号表指针)

NumberOfSymbols(符号数目)

SizeOfOptionalHeader(可选头的大小)

Characteristics(文件属性标志)

IMAGE_FILE_HEADER 位置


IMAGE_FILE_HEADER 介绍

  • IMAGE_FILE_HEADER 是 PE 文件核心结构 IMAGE_NT_HEADERS 的一部分,它和可选头 (IMAGE_OPTIONAL_HEADER) 一起定义了文件的总体布局和属性。
  • IMAGE_FILE_HEADER 提供了有关文件物理布局和基本属性的信息,比如文件适用的处理器架构、节数目等。

IMAGE_FILE_HEADER 结构

typedef struct _IMAGE_FILE_HEADER {  WORD Machine;                 // 目标平台架构  WORD NumberOfSections;        // 文件中的节数目  DWORD TimeDateStamp;          // 文件的时间戳(编译时间)  DWORD PointerToSymbolTable;   // 符号表指针(调试使用)  DWORD NumberOfSymbols;        // 符号表中的符号数量(调试使用)  WORD SizeOfOptionalHeader;    // 可选头的大小(IMAGE_OPTIONAL_HEADER 的大小)  WORD Characteristics;         // 文件属性标志  
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;  

核心字段解析

Machine(目标平台架构)

  • 定义: 指明此 PE 文件的目标运行平台处理器架构。
  • 值:
    • IMAGE_FILE_MACHINE_I386 0x014C: Intel x86 (32位处理器)。
    • IMAGE_FILE_MACHINE_IA64 0x0200: Intel Itanium (IA64)。

NumberOfSections(节数目)

  • 定义: 文件中包含的节数量。
  • 作用:
    • 每个节的信息由 IMAGE_SECTION_HEADER 结构表示。
    • 从 NumberOfSections 可计算出文件的整体存储布局。
    • 文件中的节包括 .text、.data、.rdata、.bss 等。

TimeDateStamp(时间戳)

  • 定义: 编译文件时的时间戳,是一个从1970年1月1日开始按秒计数的值(Epoch Time)。
  • 作用:
    • 用于记录文件的创建时间。

PointerToSymbolTable(符号表指针)

  • 定义: 指向符号表的地址(绝对文件偏移值),主要用于调试用途。
  • 特点:
    • 在现代 Windows 应用中通常为 0,因为如今的调试符号存储在 PDB 文件中,而非 PE 文件。

NumberOfSymbols(符号数目)

  • 定义: 指明符号表中符号的数量。
  • 特点:
    • 在调试符号表为空时,此字段一般设置为 0。
    • 针对老旧(COFF)格式,符号表仍然包含调试符号的数据指针。

SizeOfOptionalHeader(可选头的大小)

  • 定义: 指 IMAGE_OPTIONAL_HEADER 的大小。
  • 值:
    • 对于 PE32 格式(32 位)文件,此值通常是 0x00E0(224 字节)。
    • 对于 PE32+ 格式(64 位)文件,此值通常是 0x00F0(240 字节)。

Characteristics(文件属性标志)

  • 定义: 指定文件的整体属性,是按位标志集合。
  • 常见标志值:
    • #define IMAGE_FILE_EXECUTABLE_IMAGE    0x0002 // 文件是可执行文件 
    • #define IMAGE_FILE_DLL                0x2000 // 文件是一个 DLL  
    • #define IMAGE_FILE_32BIT_MACHINE      0x0100 // 运行在 32 位机器上  

IMAGE_FILE_HEADER 位置

  1. PE 文件的物理结构:
    1. IMAGE_FILE_HEADER 紧随 IMAGE_NT_HEADERS.Signature ("PE\0\0") 字段之后。
    2. 通过 IMAGE_DOS_HEADER.e_lfanew 获取 NT 头的起始地址,从而定位 IMAGE_FILE_HEADER。
  2. 文件偏移计算示例:
  3. 文件偏移关系:  
    +----------------+  
    | IMAGE_DOS_HEADER |  
    +----------------+ <- e_lfanew 指向  
    | "PE\0\0"        |  
    | IMAGE_FILE_HEADER |  
    +----------------+  
    | IMAGE_OPTIONAL_HEADER |  
    +----------------+  

http://www.xdnf.cn/news/7780.html

相关文章:

  • 【Linux笔记】防火墙firewall与相关实验(iptables、firewall-cmd、firewalld)
  • 健康监测实训室建设方案构建
  • 每日代码解读专栏:OpenVLA(Action)部分的解读
  • 从机械应答到深度交互,移远通信如何让机器人“灵魂觉醒”?
  • spring中的Interceptor使用说明
  • 静态方法和实例方法的区别
  • Java枚举详解
  • PromptIDE:一款强大的AI提示词优化工具
  • CYT4BB Dual Bank - 安全启动
  • jenkins使用Send build artifacts over SSH发布jar包目录配置
  • 软件设计师“排序算法”真题考点分析——求三连
  • 002-类和对象(一)
  • (八)深度学习---计算机视觉基础
  • 信息系统项目管理师考前练习4
  • 深入理解 Pre-LayerNorm :让 Transformer 训练更稳
  • Day123 | 灵神 | 二叉树 | 找树左下角的值
  • Vue3中插槽, pinia的安装和使用(超详细教程)
  • 物联网之使用Vertx实现UDP最佳实践【响应式】
  • DataOutputStream DataInputStream转换流
  • I.MX6U Mini开发板测试GPIO
  • Linux中进程控制(上)
  • 【Rust智能指针】Rust智能指针原理剖析与应用指导
  • C++初阶-vector的模拟实现3
  • vue原生table表格实现动态添加列,一行添加完换行继续添加。el-select输入框背景颜色根据所选内容不同而改变
  • BeamDojo: Learning Agile Humanoid Locomotion on Sparse Footholds
  • 如果教材这样讲--单片机IO口Additional Functions和 Alternate Functions的区别
  • 基于Android的XX校园交流APP
  • 工业路由器WiFi6+5G的作用与使用指南,和普通路由器对比
  • Veo 3 可以生成视频,并附带配乐
  • springboot项目读取dll