Windows逆向工程提升之IMAGE_SECTION_HEADER

目录

[IMAGE_SECTION_HEADER 概述](#IMAGE_SECTION_HEADER 概述)

作用

结构体定义

字段详细解析

Name[8]

VirtualSize

VirtualAddress

SizeOfRawData

PointerToRawData

Characteristics

关键知识点

内存与文件布局的差异

节权限与安全机制

手动添加/修改节


IMAGE_SECTION_HEADER 概述

作用

  • 描述PE文件中各个节(Section)的属性,包括代码、数据、资源等段的文件布局和内存映射规则。
  • 每个节表项对应一个节(如.text、.data、.rdata),定义其名称、大小、偏移、权限等。
  • 节表位于 IMAGE_OPTIONAL_HEADER 之后,节数据紧随其后。

结构体定义

cpp 复制代码
typedef struct _IMAGE_SECTION_HEADER {
    BYTE  Name[8];              // 节名称(8字节,非空终止)
    union {
        DWORD PhysicalAddress;  
        DWORD VirtualSize;      // 节在内存中的实际大小(未对齐)
    } Misc;
    DWORD VirtualAddress;       // 节的RVA(内存中的起始地址)
    DWORD SizeOfRawData;        // 节在文件中的大小(对齐后的值)
    DWORD PointerToRawData;     // 节在文件中的偏移
    DWORD PointerToRelocations; // 重定位表偏移(OBJ文件用)
    DWORD PointerToLinenumbers; // 行号表偏移(调试用)
    WORD  NumberOfRelocations;  // 重定位项数
    WORD  NumberOfLinenumbers;  // 行号项数
    DWORD Characteristics;     // 节的属性(可读/写/执行等)
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

字段详细解析

Name[8]

  • 作用:标识节的名称(如.text、.data、.rsrc)。
  • 特点:
    • 长度为8字节,可能不以空字符(\0)结尾(需手动处理)。
    • 部分名称有特殊含义(如.reloc表示重定位表)。
  • 示例:
    • .text:代码段,存放可执行指令。
    • .data:已初始化的全局/静态变量。
    • .rdata:只读数据(如字符串常量)。
    • .rsrc:资源数据(图标、对话框等)。

VirtualSize

  • 作用:节在内存中实际占用的未对齐大小(可能小于内存对齐后的空间)。
  • 示例:若代码段实际大小为0x1234字节,对齐为0x1000,则内存中占用0x2000字节,但VirtualSize仍为0x1234。

VirtualAddress

  • 作用:节在内存中的起始RVA(Relative Virtual Address)。
  • 计算内存地址:内存地址 = ImageBase + VirtualAddress。

SizeOfRawData

  • 作用:节在文件中的对齐后大小(必须是FileAlignment的整数倍)。
  • 填充规则:若实际数据不足对齐值,文件末尾填充0x00。

PointerToRawData

  • 作用:节在文件中的偏移地址(文件指针位置)。
  • 文件读取:通过此偏移可直接定位节数据。

Characteristics

  • 作用:节的属性标志位(通过位掩码组合)。
  • 常见标志:

|------------|----------------------------------|----------------|
| 标志值(十六进制) | 宏定义 | 描述 |
| 0x20000000 | IMAGE_SCN_MEM_EXECUTE | 可执行(代码段) |
| 0x40000000 | IMAGE_SCN_MEM_READ | 可读 |
| 0x80000000 | IMAGE_SCN_MEM_WRITE | 可写(如.data段) |
| 0x00000020 | IMAGE_SCN_CNT_CODE | 包含代码 |
| 0x00000040 | IMAGE_SCN_CNT_INITIALIZED_DATA | 包含已初始化数据 |
| 0x00000080 | IMAGE_SCN_CNT_UNINITIALIZED_DATA | 包含未初始化数据(.bss) |
| 0x02000000 | IMAGE_SCN_MEM_DISCARDABLE | 可丢弃(如.reloc段) |
| 0x10000000 | IMAGE_SCN_MEM_SHARED | 内存中共享(DLL用) |
| 0x00000008 | IMAGE_SCN_MEM_NOT_PAGED | 不可分页(驱动程序用) |


关键知识点

内存与文件布局的差异

  • 对齐规则:
    • 内存对齐:由SectionAlignment(通常0x1000)决定。
    • 文件对齐:由FileAlignment(通常0x200)决定。
  • 填充示例:
    • 文件中的.text段实际数据为0x300字节,对齐到0x200后占用0x400字节。
    • 内存中的同一段对齐到0x1000,占用0x1000字节,末尾填充未初始化数据或0xCC(调试版)。

节权限与安全机制

  • DEP(数据执行保护):若某节同时具有WRITE和EXECUTE权限,可能被利用执行Shellcode。
  • 修改权限:恶意软件可能添加可写且可执行的节以注入代码。

手动添加/修改节

  • 步骤:
    • 在节表中新增条目,设置名称、文件偏移、内存RVA和权限。
    • 调整SizeOfImage(在IMAGE_OPTIONAL_HEADER中)。
    • 在文件末尾追加节数据(需对齐到FileAlignment)。
  • 用途:
    • 添加加密代码段(常见于壳程序)。
    • 隐藏敏感数据(如恶意配置)。
相关推荐
自动化控制仿真经验汇总4 分钟前
Simulink电机控制安全-PART-直流电机-限位器
单片机·嵌入式硬件·安全
Whoami!4 分钟前
⓫⁄₁ ⟦ OSCP ⬖ 研记 ⟧ Windows权限提升 ➱ Windows特权结构与访问控制介绍
windows·网络安全·信息安全·权限提升
萤丰信息21 分钟前
智慧园区新基建:“云-管-端”架构的破局之路与数智革命
大数据·人工智能·科技·安全·架构·智慧城市·智慧园区
VekiSon24 分钟前
ARM架构——C 语言+SDK+BSP 实现 LED 点灯与蜂鸣器驱动
c语言·开发语言·arm开发·嵌入式硬件
DBA小马哥25 分钟前
文档型数据库MongoDB迁移替换:金仓数据库跨地域同步方案解析
数据库·安全·dba
恒拓高科WorkPlus27 分钟前
如何通过即时通讯工具提升团队协作?
前端·安全
代码游侠34 分钟前
ARM开放——阶段问题综述(一)
arm开发·笔记·嵌入式硬件·学习·架构
大江东去浪淘尽千古风流人物36 分钟前
【Project Aria】Meta新一代的AR眼镜及其数据集
人工智能·嵌入式硬件·算法·性能优化·ar·dsp开发
骥龙38 分钟前
2.4下、固件安全分析与漏洞挖掘:从提取到逆向的完整实战指南
运维·物联网·安全
BOB-wangbaohai43 分钟前
软考-系统架构师-信息安全技术基础知识(一)
安全·软考·系统架构师·加密·解密