PE 头部与导入表解读是什么
PE 头给出编译时间、区段信息与导入函数。导入表里同时出现网络通信、进程操作、加解密这几类 API 时,往往能勾勒样本的能力方向:是下载器、窃密程序还是勒索组件。它是不运行样本就能判断功能的常用入口。
基本信息
| 用途 | 不运行样本的情况下判断功能方向 |
|---|---|
| 关注点 | 区段熵值、编译时间、导入的库与函数 |
| 工具 | pefile、PEStudio、objdump、strings |
| 前提 | 加壳样本需先脱壳再读导入表 |
典型使用场景
- 快速判断样本的大致类型与能力
- 评估是否需要优先送沙箱深入分析
- 提取可用于检测的特征:字符串与导入组合
- 与情报库的哈希比对结合使用
- 对比同族样本,判断变种关系
- 对比同族样本的区段数量与大小差异,识别加壳与二次打包
- 提取字符串中的地址与域名,作为外联排查的输入
- 把导入组合与沙箱行为结论交叉核对,避免单点推断
查看导入表与区段
查看导入表与区段
import pefile # 需 pip install pefile
pe = pefile.PE('sample.bin')
for e in pe.DIRECTORY_ENTRY_IMPORT[:8]:
print(e.dll.decode(), [i.name.decode() for i in e.imports[:6] if i.name])
for s in pe.sections:
print(s.Name, hex(s.Characteristics), round(s.get_entropy(), 2))
# 关注网络访问、进程创建、内存操作、加解密这几类函数的组合导入组合与含义
| 导入类别 | 常见函数 | 提示能力 |
|---|---|---|
| 网络通信 | InternetOpen、WinHttpSendRequest | 下载或回联能力 |
| 进程控制 | CreateProcess、ShellExecute | 拉起其他程序 |
| 内存操作 | VirtualAlloc、WriteProcessMemory | 注入或内存执行 |
| 加密相关 | CryptEncrypt、CryptGenKey | 加密载荷或勒索行为 |
| 注册表与服务 | RegSetValue、CreateService | 持久化倾向 |
编译时间字段可以被随意伪造,只能当线索用,判断时要与文件系统时间、样本来源结合。
高熵区段通常提示加壳或内嵌加密数据,不必强行解释其中内容;先脱壳再看导入表,结论才有意义。
区段名称异常(大小写混排、随机字符串)或区段数量很少,常见于被加壳与保护工具处理过的样本。
导入表为空或极小、文件体积却很大,说明特征被压缩或加密,直接读导入表的结论没有参考价值。