首页
社区
课程
招聘
[分享]使用Virustatol API提交样本获取检测结果
发表于: 2016-3-23 10:48 4945

[分享]使用Virustatol API提交样本获取检测结果

2016-3-23 10:48
4945
在样本检测和分析的过程中,如果样本量非常大,自己的分析肯定精力跟不上,Virustatol网站上有大部分检测结果,而且Virustatol网站提供了检测的API,能够很方便的进行查询和保存检测结果。
自己使用开源的框架写了一份简单的提交样本和获取结果的代码。
希望能够对大家样本分析有所帮助:
https://git.coding.net/weiyangye/Check_Virus_VT.git

检测逻辑是:首先提交样本的MD5,校验之前是否被检测过,如果是则直接保存结果,否则提交进行检测。
使用了自己的API-Key,每分钟只能提交检测4个样本,有能力和实力还是购买个人Key吧。

贴出核心代码:
def check_virus(virus_path):

    response_code = 0
    virus_md5 = 0
    vt = VirusTotalPublicApi(api_key)
    print "My API Key: " + vt.api_key
    check_Flag = pre_check_virus(virus_path)
    if check_Flag == True:
        print "预处理病毒文件完毕,不需要提交病毒样本: " + virus_path
        return True # 提交完毕,并且VT网站上已经有此检测,则返回True
    upload_result = vt.scan_file(virus_path)
    #print upload_result
    #for key in upload_result:
    #    if key == 'response_code':
    #        response_code = upload_result[key]
    #    print "response_code: " + str(response_code)
    response_code = upload_result['response_code']
    if response_code == 200:    # 200 表示已经获取到了结果
        print "病毒文件上传成功,文件md5为: %s",upload_result['results'].get('md5')
        tmp_dic = upload_result['results']
        virus_md5 = tmp_dic['md5']
        print virus_md5

    if virus_md5 == 0:
        print "无法获取到病毒文件的hash,请检查:/r/n"
        exit(0)

    # print vt.get_file_report()
    print "获取 VirusTotal 的查杀结果: "
    result=  vt.get_file_report(virus_md5)

    str_result=  json.dumps(result['results'],sort_keys = False, indent = 4)
    logfile = virus_path + "_VirusTotal.log"
    file = open(logfile,"w+")
    file.write(str_result)
    file.close()
    print virus_path + " 处理完毕"
    return False    # 提交样本到VT网站上进行检测,则会返回False


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
2
如果代码有什么问题,我会及时进行修复
2016-3-23 10:51
0
雪    币: 91
活跃值: (496)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
很多人都用3了,果哥咋不换3呢,为什么python的职位那么少,但是却能在语言排行榜排到前5,,3年前找python职位就没一个全职的,现在依然是,
2016-3-23 11:51
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
4
我这里招全职的python程序员,
至于2 或者3 ,我本机安装的是python 2  不过可以考虑转成python 3的代码
2016-3-23 14:12
0
雪    币: 6
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢分享
2016-3-23 14:24
0
雪    币: 388
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
谢谢分享,问个问题,这个功能的检测耗时大吗?
2016-3-23 16:11
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
7
一分钟只能检测4个样本,如果样本量大的花,肯定耗时
本身国内访问Virustatol网速都不快
2016-3-23 22:08
0
雪    币: 42
活跃值: (196)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我也贴下我写的 代码
文件上传部分代码   
from poster.encode import multipart_encode  # easy_install poster
from poster.streaminghttp import register_openers

def scan(filepath):
register_openers()
file = open(filepath, "rb")
params = {'file': file}
params.update(apikey)
datagen, headers = multipart_encode(params)

m2 = hashlib.md5()
m2.update(file.read())
json = report(m2.hexdigest())
if json['response_code'] == 1:
reportformat(json)
else:
request = urllib2.Request(virustotalAPI['scan'], datagen, headers)
result = simplejson.loads(urllib2.urlopen(request).read())
reportformat(report(result['resource']))
2016-3-30 01:48
0
雪    币: 229
活跃值: (94)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
9
不错哦,高级技巧
2016-3-30 12:07
0
雪    币: 20
活跃值: (38)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
果哥,是不是把域名拼错了,virustotal对吧
2016-3-30 12:39
0
雪    币: 118
活跃值: (106)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
我记得vt上提供了代码的啊?
2016-3-30 13:15
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
12
进行了二次封装
2016-3-30 15:26
0
雪    币: 100
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
果哥有个地方不解,依赖virustotal-api这小弟一直无法成功是否可以教导!感激不尽
2016-4-27 12:01
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
14
详细解释一下你的问题哈!
2016-4-27 12:13
0
雪    币: 100
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
就是virustotal的API我import了!可是却一直无法使用不知道是哪出了问题

是要到这https://github.com/blacktop/virustotal-api把他的virustotal-api放进资料夹内吗
2016-4-27 12:42
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
16
需要在系统本地安装virustotal-api这个库
2016-4-27 13:51
0
游客
登录 | 注册 方可回帖
返回
//