
Модуль Python для просмотра Portable Executable (PE) файлов в виде дерева с использованием pefile и PyQt5. Также может использоваться с IDA Pro и Rekall для дампа PE-файлов в памяти и восстановления импортов.
PE Tree — это модуль Python для просмотра исполняемых файлов PE (Portable Executable) в древовидном виде с использованием pefile и PyQt5. Его также можно использовать с IDA Pro, Ghidra, Volatility, Rekall и minidump для просмотра и извлечения PE-файлов из памяти, а также для восстановления таблиц импорта.
Автономное приложение PE Tree находит исполняемые файлы PE в файлах, папках и ZIP-архивах.

Установите напрямую из GitHub, используя свежее виртуальное окружение и pip:
> 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 и настройте окружение для разработки:
> 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:
$ 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 из бинарного файла:
$ 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 находит исполняемые файлы PE в базах данных IDA.

Для установки и запуска в качестве плагина IDAPython можно использовать setuptools или установить вручную.
Скачайте pe_tree и установите для глобального интерпретатора Python, используемого IDA:
$ git clone https://github.com/blackberry/pe_tree.git
$ cd pe_tree
$ python setup.py develop --ida
Скопируйте pe_tree_ida.py в папку плагинов IDA
Скачайте pe_tree и установите зависимости для глобального интерпретатора Python, используемого IDA:
$ 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, сначала установите зависимости пакета pe_tree для глобальной установки Python:
$ pip install -r requirements.txt
Затем запустите pe_tree_ida.py в IDA:
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 и дизассемблируйте упакованный PE‑файл MPRESS или UPX (выберите 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‑файлу будет добавлена новая секция с именем .pe_tree, содержащая восстановленные IAT, таблицу имён подсказок и IDT (очень похожа на секцию .idata).
Если сегмент памяти точки входа был помечен как доступный для записи во время выполнения (например, через VirtualProtect), то атрибуты секции точки входа также будут помечены как доступные для записи.
Наконец, каталоги данных BASERELOC, BOUND_IMPORT и SECURITY помечаются как нулевые, а контрольная сумма OPTIONAL_HEADER пересчитывается (если указано).
Используя описанный подход, можно извлечь множество PE‑файлов из памяти, которые были распакованы, инжектированы, загружены рефлективно или hollowed и т.д.
Плагин PE Tree для Rekall находит исполняемые файлы PE в дампах памяти Windows.

Запустите Rekall для просмотра активных процессов, DLL и драйверов на живой системе:
$ rekall --live Memory
[1] Live (Memory) 00:00:00> run -i pe_tree_rekall.py
Либо запустите Rekall/PE Tree с существующим дампом памяти:
$rekall -f memory.vmem
[1] memory.vmem 00:00:00> run -i pe_tree_rekall.py
Плагин PE Tree для Volatility находит исполняемые файлы PE в дампах памяти Windows.

$ pe-tree-vol -h
usage: pe-tree-vol [-h] filename
PE-Tree (Volatility)
positional arguments:
filename Path to memory dump
optional arguments:
-h, --help show this help message and exit
Плагин PE Tree для Ghidra находит исполняемые файлы PE в базах данных Ghidra.

$ pe-tree-ghidra -h
usage: pe-tree-ghidra [-h] [--server SERVER] [--port PORT]
PE-Tree (Ghidra)
optional arguments:
-h, --help show this help message and exit
--server SERVER Ghidra bridge server IP (default: 127.0.0.1)
--port PORT Ghidra bridge server port (default: 4768)
Плагин PE Tree для Minidump находит исполняемые файлы PE в Windows Minidump.

$ pe-tree-minidump -h
usage: pe-tree-minidump [-h] filename
PE-Tree (Minidump)
positional arguments:
filename Path to .dmp file
optional arguments:
-h, --help show this help message and exit
Конфигурация хранится в INI‑файле и по умолчанию имеет следующие значения:
[config]
debug = False
fonts = Consolas,Monospace,Courier
passwords = ,infected
virustotal_url = https://www.virustotal.com/gui/search
cyberchef_url = https://gchq.github.io/CyberChef
Следующая информация будет передана сторонним веб‑приложениям (в зависимости от конфигурации) при соблюдении указанных условий:
Если в конфигурации указан URL VirusTotal, то метаданные, такие как хеши файлов, метки времени и т.д., будут отправлены в VirusTotal для обработки, когда пользователь щёлкает по выделенным ссылкам или выбирает "VirusTotal search" в контекстном меню.
Если в конфигурации указан URL CyberChef, то любые данные файла будут закодированы в base64 и отправлены в CyberChef для обработки, когда пользователь выбирает "CyberChef" в контекстном меню.
или
Попробуйте обновить pip до версии 20.0+:
$ pip install --upgrade pip
Попробуйте удалить и переустановить PyQt5 следующим образом:
pip uninstall PyQt5
pip uninstall PyQt5-sip
pip install PyQt5 PyQt5-sip
Убедитесь, что IDA нашла и дизассемблировала весь код:
Options -> General -> Analysis -> Reanalyze program
После этого попробуйте снова извлечь/восстановить импорты.
Пожалуйста, не стесняйтесь участвовать! Проблемы и pull request'ы приветствуются.
Для сборки документации из исходников с помощью Sphinx:
$ pip install sphinx
$ sphinx-apidoc -o ./doc/source/ .
$ sphinx-build -b html ./doc/source ./doc/build -E
Чтобы просмотреть документацию, откройте в веб‑браузере файл ./doc/build/index.html.
Tom Bonner - tombonner - @thomas_bonner
PE Tree распространяется под лицензией Apache. Подробнее см. LICENSE.
| Раздел | Параметр | Тип | Описание |
|---|
| config | debug | boolean | Выводит результат pefile.dump() |
| config | fonts | string | Разделённый запятыми список имён шрифтов для интерфейса |
| config | passwords | string | Разделённый запятыми список паролей ZIP‑файлов |
| config | virustotal_url | string | URL поиска VirusTotal |
| config | cyberchef_url | string | URL CyberChef |
| Тип | ОС | Путь |
|---|
| Приложение | Windows | %TEMP%\pe_tree.ini |
| Приложение | Linux/Mac | /tmp/pe_tree.ini |
| IDAPython | Windows | %APPDATA%\HexRays\IDA Pro\pe_tree.ini |
| IDAPython | Linux/Mac | ~/.idapro/pe_tree.ini |
| Rekall | Windows | %TEMP%\pe_tree_rekall.ini |
| Rekall | Linux/Mac | /tmp/pe_tree_rekall.ini |
| Volatility | Windows | %TEMP%\pe_tree_volatility.ini |
| Volatility | Linux/Mac | /tmp/pe_tree_volatility.ini |
| Ghidra | Windows | %TEMP%\pe_tree_ghidra.ini |
| Ghidra | Linux/Mac | /tmp/pe_tree_ghidra.ini |
| Minidump | Windows | %TEMP%\pe_tree_minidump.ini |
| Minidump | Linux/Mac | /tmp/pe_tree_minidump.ini |
| Carve | Windows | %TEMP%\pe_tree_carve.ini |
| Carve | Linux/Mac | /tmp/pe_tree_carve.ini |