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)。
  • 用途:
    • 添加加密代码段(常见于壳程序)。
    • 隐藏敏感数据(如恶意配置)。
相关推荐
用户962377954481 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机1 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机1 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954482 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star2 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954482 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
阿白的白日梦2 天前
winget基础管理---更新/修改源为国内源
windows
cipher3 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
埃博拉酱6 天前
VS Code Remote SSH 连接 Windows 服务器卡在"下载 VS Code 服务器":prcdn DNS 解析失败的诊断与 BITS 断点续传
windows·ssh·visual studio code
唐宋元明清21886 天前
.NET 本地Db数据库-技术方案选型
windows·c#