题目
有两个数据集,分别为 Benignware 和 Malware,我们需要统计它们 PE Section Name 出现的次数。要求使用 Matplotlib 画出散点图,X轴为不同的 PE Section Name,Y轴为该 Name 分别在 Benignware 和 Malware 中出现的次数。
最终效果
完整代码
from matplotlib import pyplot
import pefile
import os
BenignSampleData = {}
MalSampleData = {}
Data = {}
os.chdir(r'D:\PyCharmProjects\quiz\BenignSample') # 正常程序文件夹路径
BenignSampleFilenames = os.listdir()
for file in BenignSampleFilenames:
pe = pefile.PE(file)
for section in pe.sections:
a = str(section.Name)
a = a.replace(r'\x00', '')
a = a.replace(r'b', '')
a = a.replace(r"'", '')
if (BenignSampleData.get(a) == None):
BenignSampleData[a] = 1
else:
BenignSampleData[a] = BenignSampleData[a] + 1
os.chdir(r'D:\PyCharmProjects\quiz\MalSample') # 恶意程序文件夹路径
MalSampleFilenames = os.listdir()
for file in MalSampleFilenames:
pe = pefile.PE(file)
for section in pe.sections:
b = str(section.Name)
b = b.replace(r'\x00', '')
b = b.replace(r'b', '')
b = b.replace(r"'", '')
if(MalSampleData.get(b) == None):
MalSampleData[b] = 1
else:
MalSampleData[b] = MalSampleData[b] + 1
for x in BenignSampleData.keys():
Data[x] = [BenignSampleData[x], 0]
for y in MalSampleData.keys():
if(y in Data.keys()):
Data[y] = [Data[y][0], MalSampleData[y]]
else:
Data[y] = [0, MalSampleData[y]]
X = list(Data.keys())
Y1 = []
Y2 = []
for key in Data.keys():
Y1.append(Data[key][0])
Y2.append(Data[key][1])
pyplot.xlabel('PE Section Name', fontsize=15, color='k')
pyplot.ylabel('Number Of Occurrences', fontsize=15, color='k')
pyplot.scatter(X, Y1, marker="o", color='b', label="BenignSample")
pyplot.scatter(X, Y2, marker="x", color='r', label="MalSample")
pyplot.legend()
pyplot.show()