1. 程式人生 > >Python 進行病毒樣本特徵分析

Python 進行病毒樣本特徵分析

這幾天一直在做有關病毒樣本特徵提取的工作,解析出了一個樣本病毒特徵,今天用python進行了相似樣本的檢驗,想和大家一同分享。

開始是這麼寫的:

 #!/usr/bin/python
 import os
 import os.path
 rootdir = "./sample_Backdoor_Linux"

  for filenames in os.walk(rootdir):
  for filename in filenames[2]:
  
   record = open(rootdir+"/"+filename,"rb")
   link = open("bad virus.txt","r")

   str_find = record.read()
   print str_find
   str_text = link.read()
   print str_text
 #  if str_find.index(str_text) < 0:
 #    break
 #  print filenam

執行之後發現根本無法找到病毒樣本,為什麼(⊙o⊙)?

後來發現了這個讓我想揍自己的問題所在,文字中讀取出的二進位制,並非記憶體中的二進位制,所以根本根本沒有可比性,please 記住

於是就有了下面的版本:

#!/usr/bin/python
import os
import os.path
import binascii
rootdir = "./sample_Backdoor_Linux"

def loaddb(dbname):
 fd = open(dbname, "r")
 signs = fd.readlines()
 return signs

def process_sign(signs):
 signatures = []
 for line in signs:
   a=line.strip()
   print a
   signatures.append(binascii.a2b_hex(line.strip()))
 return signatures

def compare_sign(signatures,rootdir):

 for filenames in os.walk(rootdir):
  file_count = 0
  found = 0
  for filename in filenames[2]:
   file_count = file_count + 1
   filepath = rootdir+"/"+filename
   content = open(filepath,"rb").read()

   i=0
   for sign in signatures:
    i = i+1
    if content.find(sign) != -1:
     found = found + 1
     print filepath, "Found Virus[%d]"%i
     break  
  print "detect objects: %d/%d"%(found, file_count)


signs_txt_list = loaddb('bad virus.txt')
signatures = process_sign(signs_txt_list)
compare_sign(signatures,rootdir)

 後來成功的完成了檢驗工作,感覺自己真的還要踏踏實實的提高自己才行。

上面主要用了binascii.a2b_hex來對二進位制資料轉化為記憶體資料,這樣才能與病毒樣本進行比較。還有一點就是要無論何時都要記住函式的封裝性,這樣不僅僅容易分析,當有錯誤時也更加容易進行分析。

分享一句自己很喜歡的話:

強者不是沒有眼淚的人,而是含著眼淚奔跑的人!

轉載請註明出處:http://blog.csdn.net/u010484477     O(∩_∩)O謝謝