在8月3日举办的BlackHat大会上,BlackBerry宣布开源PE逆向工具——PE Tree。PE Tree是由BlackBerry 研究团队研发的使用pefile和PyQt5 来以树形查看PE文件的逆向工具。因为面向的是逆向工程师和社区,PE Tree还融合了HexRays IDA Pro反编译器的功能,可以查看PE结构、复制内存中的PE文件并执行导入重构。
概览
PE Tree是用python开发的,支持Windows、Linux和macOS 操作系统。奇热可以以独立应用安装和运行,也可以以IDAPython插件的形式安装和运行。
图 1.标准应用
图 2. IDAPython插件
PE文件在映射为树形之前会用Ero Carrera的 pefile 模块进行分析,得到如下header信息:
· MZ header
· DOS stub
· Rich headers
· NT/File/Optional headers
· Data directories
· Sections
· Imports
· Exports
· Debug information
· Load config
· TLS
· Resources
· Version information
· Certificates
· Overlay
图 3. Header信息
如果pefile在分析过程中检测到任何问题,就会显示告警信息:
图 4. Pefile 告警
点击链接可以执行VirusTotal 搜索,包括:
· 文件哈希;
· PDB路径;
· 时间戳;
· Section hash/name;
· Import hash/name;
· Export name;
· Resource哈希;
· 证书序列号。
注:IMAGE_DIRECTORY_ENTRY_DEBUG和IMAGE_EXPORT_DESCRIPTOR时间戳一般是由编译器设置的,所以可以用于进一步的分析。
此外,PE文件的特定部分可以被爆出和导出到CyberChef,用于下一步处理,比如:
· DOS stub
· Sections
· Resources
· Certificates
· Overlay
图 5. 保存和导出证书
左侧的 “rainbow view”提供了PE文件结构的高层概览以及每个区域的offset/size/ratio。比如,下面就是含有多个资源的PE文件。
图 6. Rainbow图
点击每个区域可以查看树视图,右击可以保存和导出到CyberChef。
Rainbow图在处理PE文件目录时是非常有用的,因为可以很容易地指出类似的文件组成,并确定样本之间可能的关联。
IDAPython
HeyRays的 IDA Pro融合是通过IDAPython插件来实现的,它可以实现更高级的功能,比如从IDA数据库和重构导入中找到和复制PE文件:
图 7. 搜索PE文件的IDA数据库
在复制内存中的PE文件时,PE Tree会在IDB中添加文件结构的基本评论,并对IAT函数重新命名偏移量,使得很容易就可以查看和分析注入和未打包的PE。
注:PE Tree可以以一种与OllyDumpEx/ImpRec类似的方法来复制PE文件和重构导入,比如,解压MPRESS:
图 8. 执行IDB检索
图 9. 复制后,未打包的PE文件中含有新的导入地址表
如果选择Rebuild imports,PE Tree就会对所有可能的IAT引用搜索IDA disassembly,并构造新的IAT、IDT和hint name表。如果选定“Use existing imports”, PE Tree就会通过DIRECTORY_ENTRY_IMPORT 基于IAT来重构导入。
未来发展
PE Tree目前仍在开发中,未来将会添加更多的新特征。下一版本将关注rekall 支持,提供从内存复制或运行系统(live)中查看和复制进程的能力。
图 10. 用Rekall!复制活动进程内容
PE Tree源码和使用方法参见BlackBerry GitHub:https://github.com/blackberry/pe_tree