最近在做恶意软件的研究时,发现一个主要问题就是缺少样本,
在网上搜索后发现各个开源的数据集都有各种各样的问题,如
这个DikeDataSet:
https://github.com/iosifache/DikeDataset
优点是有白样本,缺点是黑样本分布不均且主要集中在一个家族里
发现有一个比较好用的开源数据平台MalwareBazaar:
https://bazaar.abuse.ch/browse/
可以自由下载所需要的恶意数据,而且可以批量查询报告
因此根据官方的api介绍(https://bazaar.abuse.ch/api/)
自己做了个爬取脚本:
#!/usr/bin/env python3
import requests
import os
import pyzipper
__author__ = "Corsin Camichel"
__copyright__ = "Copyright 2020, Corsin Camichel"
__license__ = "Creative Commons Attribution-ShareAlike 4.0 International License."
__version__ = "1.0"
__email__ = "[email protected]"
def pe_downloader(sample_sha: str, save_folder='./', unzip=False):
"""
根据sha256下载样本,默认zip格式不解压
:param sample_sha:文件sha256
:param save_folder:保存的路径
:param unzip:是否解压
:return: True/False 表示下载是否成功
"""
if len(sample_sha) != 64:
print(sample_sha, "不是sha256")
return False
unzip_password = b'infected'
headers = {'API-KEY': ''}
if not save_folder.endswith('/'):
save_folder += '/'
if not os.path.exists(save_folder):
# 如果保存目录不存在则创建
os.makedirs(save_folder)
data = {
'query': 'get_file',
'sha256_hash': sample_sha,
}
if os.path.exists(save_folder + sample_sha + '.zip') or os.path.exists(save_folder+sample_sha):
print("该样本已存在")
return False
response = requests.post('https://mb-api.abuse.ch/api/v1/', data=data, timeout=15, headers=headers,
allow_redirects=True)
if 'file_not_found' in response.text:
print("Error: 未找到样本")
return False
open(save_folder + sample_sha + '.zip', 'wb').write(response.content)
if unzip:
with pyzipper.AESZipFile(save_folder + sample_sha + ".zip") as zf:
zf.pwd = unzip_password
zf.extractall(save_folder)
print("样本 \"" + sample_sha + "\" 下载解压成功.")
os.remove(save_folder + sample_sha + '.zip')
else:
print("样本 \"" + sample_sha + "\" 下载成功.")
return True
if __name__ == "__main__":
pe_downloader("adffd52446d0d94c4f726205482a0c062248d6eb35948df937336957cf747db8",
save_folder='testdownload/', unzip=False)
完整的代码在github:
https://github.com/CaLlMeErIC/BazaarCrawler/