欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]简单实现MD5文件查杀

[原创]简单实现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 )

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功