1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
# coding: utf8
#!/python2.7
################################################################################################################
# La Pub :
# Facebook->
# Youtube ->
# Le site ->
# Les sources :
# original source "Adam Meyers ~ CrowdStrike" additional source "Chris Clark ~ GD Fidelis CyberSecurity"
# \*******************************************************************/
# \* Modification - Personnalisation 2017 : Zitoune-@nticip-WIN32 */
# \* VirusTotalAPI By Zitoune-@nticip-WIN32 Version 2.0 */
# \* Licence MIT- "Expat" */
# \*******************************************************************/
# Liens utiles :
# info comment obtenir son APIKEY -> https://www.virustotal.com/fr/documentation/public-api/
# info concernant la licence -> https://fr.wikipedia.org/wiki/Licence_MIT#
################################################################################################################
from __future__ import unicode_literals
import requests
import json, urllib, urllib2, argparse, hashlib, re, sys
from pprint import pprint
class VirusTotalAPI():
def __init__(self):
self.api = ' -- ICI SPECIFIER LE APIKEY -- '
self.base = 'https://www.virustotal.com/vtapi/v2/'
#SCAN
def getReport(self,md5):
param = {'resource':md5,'apikey':self.api}
url = self.base + "file/report"
data = urllib.urlencode(param)
result = urllib2.urlopen(url,data)
jdata = json.loads(result.read())
return jdata
#UPLOAD
def upload(self,files):
url = self.base + "file/scan"
params = {'apikey':self.api}
files = {'file': (files, open(files, 'rb'))}
response = requests.post(url, files=files, params=params)
f = open("ScanID.log", "w")
f.write(str(response.json()))
f.close
print ""
print "\n\tLe fichier Log a ete generer : -- ScanID.log --"
print ""
print "\n\tLe fichier est actuellement en trein d'etre analyser sur VirusTotal ..."
print "\n\tpatienter +- 30 secondes avant d'utiliser l'option -s /v /L"
print ""
print response.json()
#HASH MD5
def checkMD5(checkval):
if re.match(r"([a-fA-F\d]{32})", checkval) == None:
md5 = md5sum(checkval)
return md5.upper()
else:
return checkval.upper()
def md5sum(filename):
fh = open(filename, 'rb')
m = hashlib.md5()
while True:
data = fh.read(8192)
if not data:
break
m.update(data)
return m.hexdigest()
#AFFICHAGE CONTRENDU
def parse(it, md5, verbose, jsondump):
if it['response_code'] == 0:
print ""
print "\n\tLe Hash :" + md5 + " -- n'est pas repertorier sur VirusTotal --"
print""
return 0
print "\n\tResultats du MD5: ",it['md5'],"\n\n\Detection par: ",it['positives'],'/',it['total'],'\n'
if 'BitDefender' in it['scans']:
print '\tBitDefender Detection:',it['scans']['BitDefender']['result'],'\n'
if 'Kaspersky' in it['scans']:
print '\tKaspersky Detection:',it['scans']['Kaspersky']['result'], '\n'
if 'ESET-NOD32' in it['scans']:
print '\tESET Detection:',it['scans']['ESET-NOD32']['result'],'\n'
print '\tScanner le:',it['scan_date']
if jsondump == True:
jsondumpfile = open("ScanID" + md5 + ".log", "w")
pprint(it, jsondumpfile)
jsondumpfile.close()
print "\n\tLe fichier Log a ete generer -- " + "ScanID" + md5 + ".log"
print "utiliser l'option -d si vous souhaitez envoyer le fichier sur VirusTotal"
if verbose == True:
print '\n\tDetails des rapports de VirusTotal :\n'
for x in it['scans']:
print '\t', x,'\t' if len(x) < 7 else '','\t' if len(x) < 14 else '','\t',it['scans'][x]['detected'], '\t',it['scans'][x]['result']
#MENU
def main():
opt=argparse.ArgumentParser(description="Scanner de HASH et de fichier sur VirusTotal By Zitoune-@nticip-WIN32")
opt.add_argument("HashorPath", help="Enter un hash MD5/SHA1/256 ou le nom de votre fichier")
opt.add_argument("-s", "--search", action="store_true", help="Rechercher sur VirusTotal")
opt.add_argument("-v", "--verbose", action="store_true", dest="verbose", help="Activer les details des rapports de VirusTotal")
opt.add_argument("-L", "--jsondump", action="store_true",help="Generer un fichier log (ScanIDXXX.log)")
opt.add_argument("-d", "--upload", action="store_true", help="Scanner un fichier sur VirusTotal")
if len(sys.argv)<=2:
opt.print_help()
sys.exit(1)
options= opt.parse_args()
ScanID=VirusTotalAPI()
md5 = checkMD5(options.HashorPath)
files = (options.HashorPath)
if options.search or options.jsondump or options.verbose:
parse(ScanID.getReport(md5), md5 ,options.verbose, options.jsondump)
if options.upload:
ScanID.upload(files)
if __name__ == '__main__':
main() |
Partager