## Virustotal Python Scanner script 0.01
## Created by Alexander Hanel
import sys
import os
import pefile
import peutils
import math
import time
import datetime
import subprocess
##############################################################
## Print PE file attributes & metadata
def attributes():
print "Optional Header:", hex(pe.OPTIONAL_HEADER.ImageBase)
print "Address Of Entry Point:", hex(pe.OPTIONAL_HEADER.AddressOfEntryPoint)
machine = 0
machine = pe.FILE_HEADER.Machine
print "Required CPU type:", pefile.MACHINE_TYPE[machine]
dll = pe.FILE_HEADER.IMAGE_FILE_DLL
print "DLL:", dll
print "Subsystem:", pefile.SUBSYSTEM_TYPE[pe.OPTIONAL_HEADER.Subsystem]
print "Compile Time:", datetime.datetime.fromtimestamp(pe.FILE_HEADER.TimeDateStamp)
print "Number of RVA and Sizes:", pe.OPTIONAL_HEADER.NumberOfRvaAndSizes
##############################################################
## Analyze Sections
def sections_analysis():
print "Number of Sections:", pe.FILE_HEADER.NumberOfSections
print
print "Section VirtualAddress VirtualSize SizeofRawData Entropy"
for section in pe.sections:
print "%-8s" % section.Name, "%-14s" % hex(section.VirtualAddress), "%-11s" % hex(section.Misc_VirtualSize),\
"%-13s" % section.SizeOfRawData, "%.2f" % E(section.data)
print
##############################################################
## Dump Imports
def IAT():
print "Imported DLLS:"
i = 1
for entry in pe.DIRECTORY_ENTRY_IMPORT:
bool = 1 ## For Formattting
print "%2s" % [i], "%-17s" % entry.dll
print "\t",
for imp in entry.imports:
if bool:
print "%-1s" % imp.name,
bool = 0
else:
sys.stdout.write("%s%s" % (", ",imp.name)) # Python Print adds a blank space
print
i += 1
##############################################################
## Entropy calculation from Ero Carrera's blog ###############
def E(data):
entropy = 0
if not data:
return 0
ent = 0
for x in range(256):
p_x = float(data.count(chr(x)))/len(data)
if p_x > 0:
entropy += - p_x*math.log(p_x, 2)
return entropy
##############################################################
## Load PEID userdb.txt database and scan file
def PEID():
signatures = peutils.SignatureDatabase('userdb.txt')
matches = signatures.match_all(pe,ep_only = True)
print "PEID Signature Match(es): ", matches
print
##############################################################
## Print Sophos
def sophos(filetmp):
print
print "Sophos Scan in progress.."
output = "None"
path = os.path.abspath(filetmp)
pwd = os.getcwd()
output = subprocess.call([os.path.join(pwd, 'cmd_scan', 'Sophos', 'SAV32CLI.EXE'), path])
## Thanks habnabit
##############################################################
if len(sys.argv) < 2:
print "Pyton Script "
sys.exit(3)
exename = sys.argv[1]
pe = pefile.PE(exename)
print "\nPortable Executable Information"
attributes()
sections_analysis()
PEID()
IAT()
sophos(exename)
## <- Format bug with SyntaxHighlighter (remove line)
Portable Executable Virustotal Example
Subscribe to:
Comments (Atom)
