[原创]简单实现MD5文件查杀
最近在学习python脚本,之前看到论坛中一个贴子思路挺好,然后突发奇想,利用virustotal提供的接口,就写了一个。
# -*- coding: cp936 -*-
import os
import sys
import requests
import json
import urllib
import urllib2
import md5
class VirusTotalScan:
def __init__(self):
self.baseurl = "https://www.virustotal.com/vtapi/v2/file/report"
self.resource = '863FAA0FFBDC82B0B66C8229BC491EED' # md5
self.apikey = "9ae162409399d3d686c54e16634bb8f1261dbe36052bf1633f62418f3d90ff53"
""" 遍历形参目录下的所有文件,
取得到文件的md5值,
保存在md5list例表中 """
def GetDirectFileMd5(self,dir):
fielnum = 0
list = os.listdir(dir) #列出目录下的所有文件和目录
filepathlist = []
md5list = []
for line in list:
filepath = os.path.join(dir,line)
if os.path.isdir(filepath): #如果filepath是目录,则再列出该目录下的所有文件
for li in os.listdir(filepath):
filepath1 = filepath + '\\'
filepath1 = filepath1 + li
filepathlist.append( filepath1 )
elif os.path: #如果filepath是文件,直接列出文件名
filepathlist.append( filepath )
for list in filepathlist:
result = self.CalcFileMd5(list)
md5list.append(result)
return md5list
# Get file md5
def CalcFileMd5( self ,path ):
try:
FileHandle = open(path,'rb')
Md5Obj = md5.new(FileHandle.read())
return Md5Obj.hexdigest()
except Exception,e:
print e
finally:
FileHandle.close()
# scan file to virustotal
def scanfile(self):
url = self.baseurl
parameters = {"resource":self.resource ,
"apikey": self.apikey }
data = urllib.urlencode(parameters)
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
json = response.read()
return json
def PrintResults( self, jsonString ):
Dict = json.loads(jsonString)
Scans = Dict['scans']
print "File MD5: ",self.resource
for AVName in Scans:
scansresult = Scans[AVName]
if scansresult['detected'] == True:
print "%s: %s" %(AVName,scansresult['result'])
if __name__ == '__main__':
# DirectoryPath = sys.argv[1]
vt = VirusTotalScan()
#resource = vt.GetDirectFileMd5(DirectoryPath)
Results = vt.scanfile()
vt.PrintResults( Results )
