
pefile과 PyQt5를 사용하여 Portable Executable (PE) 파일을 트리 뷰로 볼 수 있는 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 클론 및 개발용 설정:
> 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에서 사용하는 전역 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
| 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가 선택되었는지 확인
덤프!