PE Tree 是一个 Python 模块,用于使用 pefile 和 PyQt5 以树状视图查看可移植可执行文件 (PE 文件)。 它还可以与 IDA Pro、Ghidra、Volatility、Rekall 和 minidump 一起使用,以查看和转储内存中的 PE 文件,并执行导入表重建。
PE Tree 独立应用程序可在文件、文件夹和 ZIP 存档中查找可移植可执行文件。

在新的虚拟环境中直接通过 pip 从 GitHub 安装:
> virtualenv env
> env\Scripts\activate
> pip install --upgrade pip
> pip install git+https://github.com/blackberry/pe_tree.git
$ python3 -m venv env
$ source ./env/bin/activate
$ pip install --upgrade pip
$ pip install git+https://github.com/blackberry/pe_tree.git
克隆仓库并配置开发环境:
> git clone https://github.com/blackberry/pe_tree.git
> cd pe_tree
> virtualenv env
> env\Scripts\activate
> pip install -e .
$ git clone https://github.com/blackberry/pe_tree.git
$ cd pe_tree
$ python3 -m venv env
$ source ./env/bin/activate
$ pip install -e .
运行 PE Tree 并扫描文件、文件夹和 ZIP 存档中的可移植可执行文件:
$ pe-tree -h
usage: pe-tree [-h] [filenames [filenames ...]]
PE-Tree
positional arguments:
filenames Path(s) to file/folder/zip
optional arguments:
-h, --help show this help message and exit
运行 PE Tree 并尝试从二进制文件中雕刻可移植可执行文件:
$ pe-tree-carve -h
usage: pe-tree-carve [-h] filename
PE-Tree (Carve)
positional arguments:
filename Path to file to carve
optional arguments:
-h, --help show this help message and exit
通过安装 QDarkStyle 可以启用暗色模式:
$ pip install qdarkstyle
PE Tree IDAPython 插件可在 IDA 数据库中查找可移植可执行文件。

要作为 IDAPython 插件安装和运行,您可以使用 setuptools 或手动安装。
下载 pe_tree 并为 IDA 使用的全局 Python 解释器安装:
$ git clone https://github.com/blackberry/pe_tree.git
$ cd pe_tree
$ python setup.py develop --ida
将 pe_tree_ida.py 复制到您的 IDA 插件文件夹
下载 pe_tree 并为 IDA 使用的全局 Python 解释器安装依赖:
$ git clone https://github.com/blackberry/pe_tree.git
$ cd pe_tree
$ pip install -r requirements.txt
将 pe_tree_ida.py 以及 ./pe_tree/ 的内容复制到您的 IDA 插件文件夹
要放弃作为插件安装,而是在 IDA 中作为脚本运行,首先为全局 Python 安装安装 pe_tree 包的依赖:
$ pip install -r requirements.txt
然后在 IDA 中运行 pe_tree_ida.py:
File -> Script file... -> pe_tree_ida.py -> Open
| 操作系统 | 插件文件夹 |
|---|---|
| Windows | %ProgramFiles%\IDA Pro 7.X\plugins |
| Linux | /opt/ida-7.X/plugins |
| Mac | ~/.idapro/plugins |
启动 IDA Pro 并反汇编一个 PE 文件(为了获得最佳效果,始终选择 Manual Load 和 Load Resources!)
加载 PE Tree 插件:
Edit -> Plugins -> PE Tree
以下是转储加壳 PE 文件(例如 MPRESS 或 UPX)并重建导入的基本步骤(假设映像基址/入口点相当标准):
启动 IDA Pro 并反汇编一个 MPRESS 或 UPX 加壳的 PE 文件(选择 Manual Load 和 Load Resources)
选择一个调试器(Windows 或 Bochs)并运行直到 OEP(通常是 0x00401000,但并不总是!)
此时您可以拍摄一个内存快照(保存所有段)并保存 IDB 以供以后使用
确保 IDA 已找到所有代码:
Options -> General -> Analysis -> Reanalyze program
打开 PE Tree IDAPython 插件,在右侧窗格中右键单击并选择:
Add PE -> Search IDB
这将扫描 IDB 中的 MZ/PE 头部并显示找到的任何模块。
右键单击 HEADER-0x00400000(或适当的模块名称)并选择 Dump...
指定 AddressOfEntryPoint(通常是 0x1000,但同样并不总是!)
确保选中 Rebuild IDT/IAT
转储!
将使用从内存/IDB 获得的解压节区数据创建一个新的可执行文件,同时一个新的名为 .pe_tree 的节区(包含重建的 IAT、提示名称表和 IDT)将被追加到 PE 文件中(非常类似于 .idata 节区)。
如果在执行过程中入口点内存段已被标记为可写(例如通过 VirtualProtect),那么入口点节区的特征也将被标记为可写。
最后,BASERELOC、BOUND_IMPORT 和 SECURITY 数据目录被标记为 null,并且(如果指定)重新计算 OPTIONAL_HEADER 校验和。
使用上述方法,可以转储许多内存中的 PE 文件,无论是经过解压、注入、反射加载还是空心化等。
PE Tree Rekall 插件可在 Windows 内存转储中查找可移植可执行文件。
