-
-
[原创]基于深度学习的恶意软件分类器(六)
-
发表于:
2022-5-3 10:42
13390
-
实验内容主要来源于论文:Byte-level malware classification based on markov images and deep learning,该论文通过恶意软件的字节序列将恶意软件可视化为马尔可夫图像作为输入数据,用来训练基于改良的VGG16模型构建的分类器。实验中所用的数据集依然是基于深度学习的恶意软件分类器(一)一文中介绍过的微软公开数据集。
Python版本:3.6.13
Pytorch版本:1.8.1
CUDA版本:11.4
马尔可夫图像是基于下图所示的字节传输矩阵生成的,矩阵中的每一个元素,即字节传输概率Pi,j都代表了一个像素点。
Pi,j的大小由如下的公式计算得到:
其中,f(m, n)的代表大小为m的字节后跟大小为n的字节的频率。由公式可知,每一个像素点P(n|m)的值即为字节大小为m后跟字节大小为n的数量与字节大小为m的数量做除法得到的值。这些值的范围在[0, 1]之间,为了生成的图像可以用来训练分类器,需要将所有的值归一化到[0, 255]的范围内。
假设现在有一恶意软件的字节序列为:0x00, 0x01, 0x00, 0x00, 0x02, 0x03, 0x00, 0x04, 0x00, 0x00, 0x05。此时,通过上述公式计算P(0|0)的时候,分子f(m, n)就等于2,因此字节0x00后跟0x00的数量为2,而分母在进行求和相加以后会等于字节0x00出现的数量,即为6。因此,该恶意软件可视化为马尔可夫图像的第一个像素点,即P(0|0)为3分之1。
根据上面的思路,不难写出以下针对微软数据集提供的恶意软件二进制序列可视化为马尔可夫图像的代码:
马尔可夫图像是基于字节传输概率生成的,字节大小范围为[0, 255]。因此,生成图像大小均为256,下图为将恶意软件可视化为马尔可夫图像的结果:
完成可视化工作之后,就可以将马尔可夫图像作为输入数据来训练分类器,以下是数据类的参考代码:
下图为构建的分类器所选用的模型,该模型将VGG16的全连接层改成只有单层1024个神经元的神经网络与输出层的全连接层,减少了模型的参数,加快模型的训练同时降低过拟合对分类器泛化能力的影响。
以下是与该模型对应的代码:
本文选用cross_entropy作为损失函数,选用Adam优化器来更新模型的梯度,相关参数设置如下:
learning Rate: 1e-3
weight_decay: 1e-6
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2022-5-5 15:43
被1900编辑
,原因: