这一部分把 PE 分析延伸到符号、线程局部存储和加载风险评估。PDB 能让地址恢复成更可读的符号;TLS 能在线程创建/退出等时机执行回调;加载风险评估则把前面解析到的字段整理成安全报告。

1、内容范围

小节 内容 复盘点
16.9 - 18.7 DEBUG / PDB 调试目录、PDB 结构、DIA SDK、符号、类型、函数、变量
18.8 - 20.3 TLS 线程创建、同步互斥、TLS 静态/动态、TLS 回调
20.4 - 21.4 DRAW / LOAD PE 结构图、加载风险评估、检测手法和报告汇总

2、调试目录与 PDB

PE 的调试目录可能记录 PDB 路径、GUID、Age 等信息。PDB 保存符号、类型、函数、源文件等调试信息。

数据 作用
PDB 路径 编译时符号路径
GUID/Age 匹配正确 PDB
函数符号 地址到函数名
类型信息 结构体、类、枚举
源码行号 地址到源文件位置

3、DIA SDK

DIA SDK 可用于读取 PDB 符号。复盘时关注数据源初始化、符号遍历、函数/变量/类型提取,不需要一开始写复杂 UI。

4、符号解析价值

场景 价值
崩溃分析 地址还原函数名
逆向阅读 减少猜函数用途
类型恢复 辅助恢复结构体和类
项目调试 对照源码和反汇编

5、TLS 基础

TLS 是线程局部存储,每个线程可以有自己的数据副本。PE 里还可以有 TLS 回调,在主入口前后某些时机被调用。

说明
静态 TLS 编译期声明的线程局部数据
动态 TLS 运行时分配索引和数据
TLS Callback 线程/进程事件触发的回调

6、同步互斥与死锁

多线程里要关注锁、信号、互斥和数据竞争。

问题 表现
数据竞争 结果不稳定
死锁 线程互相等待
资源泄漏 TLS 数据未清理
日志错乱 多线程输出无序

7、加载风险评估

把 PE 解析结果整理成报告:

项目 检查内容
Header MZ/PE、Machine、Magic、OEP
Section 权限、大小、对齐、异常节名
Import 敏感 API、异常 DLL
Export 转发导出、异常名称
Resource 图标、版本信息、资源异常
Certificate 签名状态
TLS 是否存在 TLS 回调
Debug PDB 路径和调试信息

8、学习检查清单

检查项 状态
能说明 PDB 和调试目录的关系 待复盘
能列出符号解析能恢复哪些信息 待复盘
能解释 TLS 和 TLS Callback 的作用 待复盘
能说明多线程日志和同步风险 待复盘
能设计一份 PE 加载风险报告字段 待复盘