您的位置:首页 > 其它

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

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

好了,不多说了,我们看一下这个网站的样子:



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

首先我们模拟一遍下载的过程,通过HTTPFox抓包分析每一条请求,然后把下载请求找出来,HTTPFox的使用细节不多说了。

然后,我直接上代码吧

# coding=utf-8
#author='CMZ'
import urllib
import urllib2
import cookielib
import datetime
import time
import re

url = '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 text

def 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.上面就是代码了,写的很渣。

**

- 完!


**
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: