commit 10d5fed9bafbfaee1c4d04263fd0876063c4a193 Author: rad9800 <105589633+rad9800@users.noreply.github.com> Date: Sun Jul 10 10:20:25 2022 +0100 Create pe-properties.py diff --git a/pe-properties.py b/pe-properties.py new file mode 100644 index 0000000..36ea3e3 --- /dev/null +++ b/pe-properties.py @@ -0,0 +1,69 @@ +import sys +import os +import hashlib # Generating hashes +import pefile + +# https://github.com/erocarrera/pefile/blob/0d5ce5e0193c878cd57636b438b3746ffc3ae7e3/pefile.py#L1324 +def getEntropy(data): + import math + from collections import Counter + + if not data: + return 0.0 + + occurences = Counter(bytearray(data)) + + entropy = 0 + for x in occurences.values(): + p_x = float(x) / len(data) + entropy -= p_x * math.log(p_x, 2) + + return entropy + +def printImports(pe): + for imports in pe.DIRECTORY_ENTRY_IMPORT: + print(imports.dll.decode().lower()) + for i in imports.imports: + print("\t", hex(i.address), i.name.decode()) + +def getArch(pe): + if hex(pe.OPTIONAL_HEADER.Magic) == '0x10b': + return "x86" + elif hex(pe.OPTIONAL_HEADER.Magic) == '0x20b': + return "x64_86" + +def getTimestamp(pe): + import datetime + epoch_time = pe.FILE_HEADER.TimeDateStamp + date_time = datetime.datetime.fromtimestamp(epoch_time) + return date_time + +def checkImports(pe): + if not hasattr(pe, "DIRECTORY_ENTRY_IMPORT"): + print("NO IMPORTS") + +if __name__ == "__main__": + try: + pe = pefile.PE(sys.argv[1]) + # Architecture is worth noting + print("File\t\t:", sys.argv[1].split("\\")[-1]) + print("MD5 hash\t:", hashlib.md5(pe.__data__).hexdigest()) + print("SHA256 hash\t:", hashlib.sha256(pe.__data__).hexdigest()) + print("Architecture\t:", getArch(pe)) + print("Timestamp \t:", getTimestamp(pe)) + print("Total Entropy \t:",getEntropy(pe.__data__)) + print("Size \t\t: {:.1f}".format(len(pe.__data__)/1000), "KB") + print("Sections\t:") + for section in pe.sections: + print("\tName\t", section.Name.decode('UTF-8')) + print("\tSize\t", section.SizeOfRawData, "bytes") + print("\tEntropy\t", getEntropy(section.get_data()), "\n") + if not hasattr(pe, "DIRECTORY_ENTRY_IMPORT"): + print("Imports \t: NONE!") + else: + print("Imports \t:") + printImports(pe) + strings = "\\\\live.sysinternals.com@SSL\\DavWWWRoot\\strings.exe -accepteula -n 7 " + sys.argv[1] + os.system(strings) + except: + print("python3 measure.py ")