
Python मॉड्यूल जो pefile और PyQt5 का उपयोग करके Portable Executable (PE) फ़ाइलों को ट्री-व्यू में देखने के लिए है। इसका उपयोग IDA Pro और Rekall के साथ मेमोरी में PE फ़ाइलों को डंप करने और इम्पोर्ट्स को पुनर्निर्मित करने के लिए भी किया जा सकता है।
PE Tree एक Python मॉड्यूल है जो Portable Executable (PE) files को pefile और PyQt5 का उपयोग करके ट्री-व्यू में देखने के लिए है। इसका उपयोग 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 चलाएं और बाइनरी फ़ाइल से पोर्टेबल एक्ज़ीक्यूटेबल फ़ाइलों को carve करने का प्रयास करें:
$ 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
फिर pe_tree_ida.py को IDA के अंतर्गत चलाएं:
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 चयनित है
डंप करें!
एक नई एक्ज़ीक्यूटेबल बनाई जाएगी जो मेमोरी/IDB से प्राप्त अनपैक्ड सेक्शन डेटा का उपयोग करेगी, जबकि .pe_tree नाम का एक नया सेक्शन और पुनर्निर्मित IAT, हिंट नाम तालिका और IDT को PE फ़ाइल में जोड़ा जाएगा (काफी हद तक .idata सेक्शन की तरह)।
यदि निष्पादन के दौरान एंट्री-पॉइंट मेमोरी सेगमेंट को (उदाहरण के लिए VirtualProtect के माध्यम से) राइटेबल चिह्नित किया गया है, तो एंट्री-पॉइंट सेक्शन की विशेषताओं को भी राइटेबल चिह्नित किया जाएगा।
अंत में, BASERELOC, BOUND_IMPORT और SECURITY डेटा निर्देशिकाओं को शून्य चिह्नित किया जाता है, और OPTIONAL_HEADER चेकसम की पुनर्गणना की जाती है (यदि निर्दिष्ट हो)।
उपरोक्त दृष्टिकोण का उपयोग करके उन कई इन-मेमोरी PE फ़ाइलों को डंप करना संभव है जिन्हें या तो अनपैक किया गया है, इंजेक्ट किया गया है, रिफ्लेक्टिव रूप से लोड किया गया है या हॉलो किया गया है आदि।
PE Tree Rekall प्लगइन Windows मेमोरी डंप में पोर्टेबल एक्ज़ीक्यूटेबल ढूंढता है।

Rekall चलाएं और लाइव सिस्टम पर सक्रिय प्रक्रियाओं, DLLs और ड्राइवरों को देखें:
$ 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 प्लगइन 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 प्लगइन 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 प्लगइन Windows Minidumps में पोर्टेबल एक्ज़ीक्यूटेबल ढूंढता है।

$ 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
निम्नलिखित जानकारी तीसरे पक्ष के वेब-एप्लिकेशन के साथ साझा की जाएगी (कॉन्फ़िगरेशन पर निर्भर करता है) निम्नलिखित शर्तों के तहत:
यदि कॉन्फ़िगरेशन में VirusTotal URL निर्दिष्ट है, तो जब उपयोगकर्ता हाइलाइट किए गए लिंक पर क्लिक करता है या राइट-क्लिक संदर्भ मेनू से "VirusTotal search" चुनता है, तो फ़ाइल हैश, टाइमस्टैम्प आदि जैसे मेटाडेटा प्रसंस्करण के लिए VirusTotal को भेजे जाएंगे।
यदि कॉन्फ़िगरेशन में CyberChef URL मौजूद है, तो जब उपयोगकर्ता राइट-क्लिक संदर्भ मेनू से "CyberChef" चुनता है, तो कोई भी फ़ाइल डेटा base64 एन्कोडेड होगा और प्रसंस्करण के लिए 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
यह पूरा होने के बाद पुनः डंप/रीबिल्ड इम्पोर्ट का प्रयास करें।
कृपया योगदान करने में संकोच न करें! मुद्दे और पुल रिक्वेस्ट का स्वागत है।
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 के तहत वितरित किया गया है। अधिक जानकारी के लिए LICENSE देखें।
| अनुभाग | विकल्प | प्रकार | विवरण |
|---|
| config | debug | boolean | आउटपुट पर pefile.dump() प्रिंट करें |
| config | fonts | string | UI के लिए फ़ॉन्ट नामों की अल्पविराम-पृथक सूची |
| config | passwords | string | ZIP फ़ाइल पासवर्ड की अल्पविराम-पृथक सूची |
| config | virustotal_url | string | VirusTotal खोज URL |
| config | cyberchef_url | string | CyberChef URL |
| प्रकार | OS | पथ |
|---|
| एप्लिकेशन | 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 |