简介
Malwar是一个使用了Cuckoo Sanbox的在线恶意软件分析系统,由于它提供一些病毒样本下载,就想能不能写个爬虫把样本下下来。顺便写篇博客记录下。
打开 https://malwr.com/analysis ,我们可以当前页看到有TimeStamp、md5、文件名、文件类型和杀软查杀数,下一页类似。
我写这个的爬虫的目的是下载样本,只关心样本的下载地址,并不关心其他的信息。现在我们可以理清下思路:
获取每一页的网页源码
解析当前页的每一个md5对应的详细信息链接
在详细信息页面解析下载地址。
提取规则
先从第一页开始爬起
1 | from scrapy.spiders import CrawlSpider |
scrapy支持xss选择器和css选择器,一般是用哪个比较方便就用哪个。
下一页的链接的xpath选择器为 //a[contains(text(),'Next')]/@href
要得到下载地址需要账号登陆,这里先不管它,单击Download下载文件对应的下载链接提取规则xpath选择器
//a[contains(@class,'btn-primary')]/@href
.
现在来补充下代码,
1 | def parse_item(self): |
登陆
之前写爬虫的时候,是可以直接通过post登陆的,而我开始写这篇文章的时候开始加上了google的ReCaptcha验证码。只能换种方式使用selenium来登陆Malwr.得到登陆后的cookie后,我们就可以用这个cookie开始下载样本了。
1 | from selenium import webdriver |
使用Scrapy有一点很蛋疼,cookie它不会自动传递,需要自己在Request中传递下去,才能使后面的网络请求使用这个cookie.
1 |
|
我们在start_request函数里获取到登陆后的cookie,使用meta = {'cookiejar' : 1}
将cookie传递到parse_item函数。parse_item函数的Request的两个Request也加上cookiejar,一个把cookie传给parse_item,一个传给parse_downurl,
下载样本
scrapy本身就已经为我们提供了很好的文件下载、图片下载的功能,
修改custom_settings,加上我们要用的ITEM_PIPELINES(在这里面实现下载功能)和FILES_STORE(保存到的文件夹)
1 | custom_settings = { |
FilesPipeline是从file_urls中拿到下载地址然后开始下载文件,因此我们还需要Item.py定义一个file_urls.
1 | # Define here the models for your scraped items |
在piplines.py文件实现文件的下载方法,继承FilesPipeline下载文件。由于下载文件需要cookie,因此重写了构造函数和get_media_requests函数,在Request中加上了cookies参数.我们在custom_settings中保存了cookie,这里直接使用getlist拿到登陆后的cookie.
1 | # Define your item pipelines here |
解析下载地址,将解析到的下载链接列表放入item的file_urls,返回item。pipeline会file_urls拿到链接开始调用get_media_requests下载文件
1 | def parse_downurl(self,response): |
最后附上完整的源码 https://github.com/ydc1992/Malwr
最后更新: 2024年01月07日 16:05:23
本文链接: http://shxi.cc/post/9222f001.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可,转载请注明出处!