PE文件格式学习(十三):载入配置表

1.介绍

载入配置表早期是用于描述当PE文件头或PE可选头无法描述或者因为太大而无法描述的各种功能。
后来以XP及以后的系统主要是为了存储SEH句柄,称为安全结构化异常处理程序列表,如果SEH异常处理没有经过注册,在载入配置表中没有句柄,这个异常处理就不会被执行。
具体的例子就不演示了,看起来只要是正规编写的程序都会在表中注册,因此都可以执行。
据微软官方说明,这个载入配置表的作用是为了防止“x86异常处理程序劫持”的漏洞。因为年代久远就无从考据了。

2.字段解析

image.png

offsetSizeFieldDescription
Characteristics 属性,当前没使用
TimeDateStamp 时间 
MajorVersion 主版本号
10 MinorVersion 子版本号
12 GlobalFlagsClear 启动时清除全局标志
16 GlobalFlagsSet 启动是设置全局标志
20 CriticalSectionDefaultTimeout 程序关键部分默认超时值
24 4/8 DeCommitFreeBlockThreshold 返回系统前必须释放的内存,以字节为单位
28/32 4/8 DeCommitTotalFreeThreshold 总共释放的内存
32/40 4/8 LockPrefixTable 预加锁表
36/48 4/8 MaximumAllocationSize 最大配置体积
40/56 4/8 VirtualMemoryThreshold 最大虚拟内存尺寸
44/64 4/8 ProcessAffinityMask 进程内部掩码
48/72 ProcessHeapFlags 进程堆栈标志
52/76 CSDVersion CSD版本
54/78 Reserved 保留,必须为0
56/80 4/8 EditList 保留
60/88 4/8 SecurityCookie 指向VisualC++或GS实现的Cookie指针
64/96 4/8 SEHandlerTable SEH句柄列表
68/104 4/8 SEHandlerCount SEH数
72/112 4/8 GuardCFCheckFunctionPointer 保存Control Flow Guard检查功能指针的VA。
76/120 4/8 GuardCFDispatchFunctionPointer保存Control Flow Guard调度功能指针的VA。
80/128 4/8 GuardCFFunctionTable 图像中每个Control Flow Guard功能的RVA排序表的VA。
84/136 4/8 GuardCFFunctionCount 上表中唯一的RVA数量。
88/144 GuardFlags Control Flow Guard相关标志。 
92/148 12 CodeIntegrity 代码完整性信息。
104/1604/8 GuardAddressTakenIatEntryTable 存储控制流保护地址采用IAT表的VA。
108/1684/8 GuardAddressTakenIatEntryCount上表中唯一的RVA数量。
112/1764/8 GuardLongJumpTargetTable 保存Control Flow Guard跳远目标表的VA。
116/1844/8 GuardLongJumpTargetCount 上表中唯一的RVA数量。 

GuardFlags字段包含以下一个或多个标志和子字段的组合:

  • 模块使用系统提供的支持执行控制流完整性检查.#define IMAGE_GUARD_CF_INSTRUMENTED 0x00000100
  • 模块执行控制流程并写入完整性检查.#define IMAGE_GUARD_CFW_INSTRUMENTED 0x00000200
  • 模块包含有效的控制流目标元数据.#define IMAGE_GUARD_CF_FUNCTION_TABLE_PRESENT 0x00000400
  • 模块不使用/ GS安全cookie.#define IMAGE_GUARD_SECURITY_COOKIE_UNUSED 0x00000800
  • 模块支持只读延迟加载IAT.#define IMAGE_GUARD_PROTECT_DELAYLOAD_IAT 0x00001000
  • 延迟加载导入表在其自己的.didat部分(其中没有其他内容)可以自由重新保护.#define IMAGE_GUARD_DELAYLOAD_IAT_IN_ITS_OWN_SECTION 0x00002000
  • 模块包含抑制的导出信息。这也推断出IAT表所采用的地址也存在于加载配置中.#define IMAGE_GUARD_CF_EXPORT_SUPPRESSION_INFO_PRESENT 0x00004000
  • 模块可以抑制导出.#define IMAGE_GUARD_CF_ENABLE_EXPORT_SUPPRESSION 0x00008000
  • 模块包含长跳转目标信息.#define IMAGE_GUARD_CF_LONGJUMP_TABLE_PRESENT 0x00010000
  • 包含Control Flow Guard功能表条目步长的子字段的掩码(即每个表条目的附加字节数).#define IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_MASK 0xF0000000

此外,Windows SDK winnt.h标头定义此宏用于右移GuardFlags值以右对齐Control Flow Guard功能表步长的位数:

#define IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_SHIFT 28

转载于:https://www.cnblogs.com/tutucoo/p/9927498.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值