爬取某在线恶意软件仓库病毒文件进行分析
2015-06-01 13:27
351 查看
前段时间,因为工作需要,要收集一些木马文件,于是就找到了一个网站:VirusShare.com,在这里,研究者可以提交并获得恶意软件的样本。该网站实时更新来自全球的恶意文件样本。本来打算自己动手下载呢,但是特征文件更新比较慢,等好久才会出现一个我想要的文件。刚好当时也在写Python的爬虫,就写了一个爬虫来爬。后来实验的效果果然不错,一晚上就把我一星期的工作量就完成了。又一次说明一个道理:代码解放双手。。。
好了,不多说了,我们看一下这个网站的样子:
![](http://img.blog.csdn.net/20150601130641389)
可以看到现在图片是黑白颜色的,原因是我们还没有进行登陆。登陆后会有一些变化。因为是实时更新的,我们现在看到的恶意文件的MD5和sha1以及SHA256的值,其中我们最想知道的是文件的类型,这个在File Type中可以看到是PE文件,也就是可执行文件。还有一些其他的参数,没怎么仔细看。好了,不多说了,下面说一下爬虫的编写过程:
首先我们模拟一遍下载的过程,通过HTTPFox抓包分析每一条请求,然后把下载请求找出来,HTTPFox的使用细节不多说了。
然后,我直接上代码吧
3.上面就是代码了,写的很渣。
**
**
好了,不多说了,我们看一下这个网站的样子:
可以看到现在图片是黑白颜色的,原因是我们还没有进行登陆。登陆后会有一些变化。因为是实时更新的,我们现在看到的恶意文件的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.上面就是代码了,写的很渣。
**
- 完!
**
相关文章推荐
- JAVA中通过时间格式来生成唯一的文件名
- [数学学习3]函数的基本概念
- 程序员在他们的软件开发生涯中最常犯的7个错误
- windows下使用libcurl
- 【数据结构】栈的应用--数制转换(c++)
- 37.图形上下文栈
- 计算现有量
- java基础教程4 :Gui和绘图
- Mac 登录界面多了一个其它账户删除
- arduino 感光灯
- 浅谈TCP优化
- MfC 进度条控件
- 利用Scrapy爬取拉勾网某职位信息
- 数组基础
- JS 关于(function( window, undefined ) {})(window)写法的理解
- 智力题(第二集)
- MongoDB设置访问权限、设置用户
- Eclipse快捷键 10个最有用的快捷键
- 给字符数组赋值的方法
- Apache配置参数deny和allow的使用实例