
Portable Executable (PE)ファイルをpefileとPyQt5を使用してツリービューで表示するためのPythonモジュール。IDA ProやRekallと併用して、メモリ内のPEファイルをダンプし、インポートを再構築することも可能です。
PE Treeは、pefileとPyQt5を使用してPortable Executable (PE) ファイルをツリービューで表示するためのPythonモジュールです。 また、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上でスクリプトとして実行する場合、まずpe_treeパッケージの要件をグローバル Pythonインストール用にインストール:
$ pip install -r requirements.txt
その後、IDA上で pe_tree_ida.py を実行:
File -> Script file... -> pe_tree_ida.py -> Open
| OS | プラグインフォルダ |
|---|---|
| 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 が選択されていることを確認
ダンプ!