用途:解析 Windows PE 文件结构,判断是否加壳,定位入口与 TLS 回调,完成 RVA 与文件偏移映射。不适用于 ELF、Mach-O 或仅需快速初勘的场景。
主要能力:用 e_lfanew 定位 PE 头并区分 PE32(0x10b)与 PE32+(0x20b);解析节表与 RVA→文件偏移(pe.get_offset_from_rva);查看导入表,IAT 极小或仅导入 kernel32 少量函数提示加壳或动态解析;检查 TLS 目录并列出回调(回调在入口点前执行);解析 Rich Header 识别编译工具链;读取证书表 SECURITY_DIRECTORY(目录项 4),其 VirtualAddress 是文件偏移而非 RVA。
老程序识别:Delphi 可用 VCL 类名短字符串、vmt 自指与负偏移(经典 Win32:TypeInfo vmt-0x3C、类名 vmt-0x2C;Win64:vmtTypeInfo -0xA8、vmtClassName -0x88)及 PACKAGEINFO/DVCLAL 资源判断;VB6 看 MSVBVM60.DLL 导入、__vba*/rtc* 符号、CUSTOM 资源,入口经 ThunRTMain。判定后分别走 RTTI 还原或 API 调用面路线。
必要用法:objdump -p sample.exe 查看头部;pefile 主力解析,pip install pefile,验证 python3 -c "import pefile; print(pefile.version)";CFF Explorer 作 Windows GUI 查看。
限制与注意:TLS 目录地址字段是 VA,换算 RVA 需先减 ImageBase;RVA→偏移判定用 raw_size;数据目录偏移勿凭记忆;老壳会改写节表与映射,先查壳再定位 RTTI;p-code 与 native 模式流程不同。未提供内容:具体脱壳步骤、完整偏移全集和工具版本兼容性。