现在的位置: 首页 > 综合 > 正文

Python 进行病毒样本特征分析

2017年11月24日 ⁄ 综合 ⁄ 共 1543字 ⁄ 字号 评论关闭

这几天一直在做有关病毒样本特征提取的工作,解析出了一个样本病毒特征,今天用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谢谢

抱歉!评论已关闭.