爬取某在线恶意软件仓库病毒文件进行分析

来源:互联网 发布:js金额大小写转换函数 编辑:程序博客网 时间:2024/05/22 04:52

 前段时间,因为工作需要,要收集一些木马文件,于是就找到了一个网站:VirusShare.com,在这里,研究者可以提交并获得恶意软件的样本。该网站实时更新来自全球的恶意文件样本。本来打算自己动手下载呢,但是特征文件更新比较慢,等好久才会出现一个我想要的文件。刚好当时也在写Python的爬虫,就写了一个爬虫来爬。后来实验的效果果然不错,一晚上就把我一星期的工作量就完成了。又一次说明一个道理:代码解放双手。。。
好了,不多说了,我们看一下这个网站的样子:
这里写图片描述

可以看到现在图片是黑白颜色的,原因是我们还没有进行登陆。登陆后会有一些变化。因为是实时更新的,我们现在看到的恶意文件的MD5和sha1以及SHA256的值,其中我们最想知道的是文件的类型,这个在File Type中可以看到是PE文件,也就是可执行文件。还有一些其他的参数,没怎么仔细看。好了,不多说了,下面说一下爬虫的编写过程:


  1. 首先我们模拟一遍下载的过程,通过HTTPFox抓包分析每一条请求,然后把下载请求找出来,HTTPFox的使用细节不多说了。
  2. 然后,我直接上代码吧
# coding=utf-8#author='CMZ'import urllibimport urllib2import cookielibimport datetimeimport timeimport reurl = 'http://www.virusshare.com'def Get_Page():    #主机地址    hosturl = 'http://virusshare.com/'    # post的url    posturl = 'http://virusshare.com/processlogin.4n6'   #设置cookie处理器    cj = cookielib.LWPCookieJar()    cookie_support = urllib2.HTTPCookieProcessor(cj)    opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)    urllib2.install_opener(opener)    #打开登陆页面    h = urllib2.urlopen(hosturl)    #构造header    headers = {'User-Agent': 'Mozilla/4.0 compatible; MSIE 5.5; Windows NT'}    postData = {'username': '*******',#登陆账号                'password': '*******'#登陆密码    }    #给post数据编码    postData = urllib.urlencode(postData)    #通过urllib提供的request方法向指定的url发送刚才构造的数据,完成登陆    request = urllib2.Request(posturl, postData, headers)    # print request    response = urllib2.urlopen(request)    text = response.read()    return textdef Judje_Page(page):    '''    判断是不是PE文件,如果是,保存到本地,如果不是则丢弃!    '''    PE_page = re.search('PE', page)#这里可以修改第一个参数来改变你想要的文件类型,因为我需要的PE所以这里就填写的'PE'参数。    if PE_page:        SHA256 = re.findall(r'href="(.*?)">', page)        url = 'http://virusshare.com/'+ SHA256[9]        print '\033[0;32;40m'+'匹配成功! ',datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+'-------现在保存文件.....'        # print url        #用文件SHA256进行命名,将文件下载并保存到本地以文件的,        i = str(SHA256[9])        with open(str(i[-64:])+'.exe','wb')as code:            code.write(urllib2.urlopen(url).read())    else:        print '\033[0;31;40m'+'匹配失败!',datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')+'-------现在丢弃文件.....'while True:    page = Get_Page()    # print page    Judje_Page(page)    time.sleep(15)

3.上面就是代码了,写的很渣。
**

                         - 完!

**

0 0
原创粉丝点击