爬取某線上惡意軟體倉庫病毒檔案進行分析
阿新 • • 發佈:2018-12-30
前段時間,因為工作需要,要收集一些木馬檔案,於是就找到了一個網站: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.上面就是程式碼了,寫的很渣。
**
- 完!
**