首页
社区
课程
招聘
[原创]基于深度学习的恶意软件分类器(一)
发表于: 2022-2-19 18:37 27226

[原创]基于深度学习的恶意软件分类器(一)

2022-2-19 18:37
27226

通过将程序的16进制序列按照一定的规则转换为灰度图作为输入数据,随后使用VGG16深度卷积神经网络作为模型,利用深度卷积神经网络在图像识别上的准确性来来构建恶意程序分类器。该实验将会在两个公开数据集上进行测试,两个公开数据集的数据分别属于不同的恶意程序家族。因此,构建的分类器要解决的问题将是一个多分类问题。

Python版本:3.6.13

Pytorch版本:1.8.1

CUDA版本11.4

最初提出将程序的16进制序列转换为灰度图作为输入数据的是由2011年发表的一篇论文中阐述的,该论文的链接是:Malware Images: Visualization and Automatic  Classification,感兴趣的,可以将论文下载下来,下面讲一下转换思路。

当程序被编译器编译完成以后,将会以二进制的形式保存在磁盘中。但是程序解析的时候,都是按照一个字节(8比特)来解析,所以解析器一般是按照16进制形式展现一个程序的二进制文件,如下图所示:

而每个字节的大小在0-255的范围内,这个范围和像素点的范围是一样的。因此,可以考虑将程序的每个字节当成一个像素点,转换成一个二维的数组,然后生成相应的灰度图,过程如下图所示:

这里就有一个问题,每个程序的字节数是不同的。因此,需要按照一定的规则来指定生成的图像的宽和高,作者在论文中给出的参考如下:

根据文件大小的不同来固定生成的图像的宽度,剩余的字节就填充到高度去,以此,来生成相应的灰度图来表征程序。此外,作者认为,生成灰度图的时候,应当把程序的PE头部分删除,只留下节区,因为节区中的内容才保存了程序要执行的指令,使用到的数据等到。如下图所示,可以看到不同节区生成的灰度图的纹理存在着明显的不同:

最终生成的灰度图如下图所示,其中上面三张图是其中一个类别的恶意程序生成的灰度图,而下面的三张图则是另一类别恶意程序生成的灰度图。从中可以看到,不同家族的恶意程序所生成的灰度图的纹理存在非常明显的差异,这就给模型的训练带来的便利。

上述论文作者按照其思路,将如下所示的25个家族的恶意程序转换成数据集供给大家实验。其中,最后一列代表的是该家族恶意程序的数量,可以看出,数据集存在明显的类别不均衡的问题,事实上,这也是该领域的一大问题。

该数据集一共有九千多条数据,其中的百分之90(8000多条)用来作为训练数据,百分之10(900多条)用来作为测试数据。训练数据和测试数据的形式如下图所示:

每种家族的恶意程序都被保存到了一个文件夹中,文件夹的名称就是程序所属的家族,文件夹中则保存了每个家族的恶意软件生成的灰度图,如下图所示:

该数据集提供了测试集的标签,因此使用准确率来判断模型性能,如下是该数据集的数据类代码

该数据集是微软2015年在kaggle举行的恶意软件分类比赛上提供的数据集,该比赛的网址是:Microsoft Malware Classification Challenge。该数据集的训练集样本的测试集样本数量差不多,都是1W出头的数量。trainLabels.csv文件保存了训练集中的恶意程序类别,其中ID是软件的名称,Class是所属的类别,如下图所示:

对于每个恶意软件,数据集都给出了其16进制序列和汇编指令,分别保存在.bytes和.asm文件中。

其中,.bytes文件保存的软件的16进制序列去除了PE头,如下图所示:

.asm文件中的汇编指令则是使用IDA生成的,如下图所示:

这个数据集特别的大,所以解压的时候最好使用py7zr用来解压,下面是参考代码:

在本实验中,只使用到了.bytes文件。由于.bytes文件中保存的是程序的16进制序列,因此,需要将其按照上述规则转换为对应的灰度图像。下面给出相应的参考代码:

该数据集没有提供测试集的标签,想要测试分类器的性能需要将测试结果上传到以上的数据集官网中。官网按照以下的公式计算损失,来对测试结果进行评分,验证分类器的精度:


[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!

最后于 2022-4-12 16:56 被1900编辑 ,原因:
收藏
免费 11
支持
分享
最新回复 (15)
雪    币: 8411
活跃值: (4336)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
分析的很到位,谢谢分享
2022-2-20 08:25
0
雪    币: 7
活跃值: (389)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
很强大,学习了
2022-2-21 14:55
0
雪    币: 6220
活跃值: (5057)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
4
mark了
2022-2-21 22:13
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
2022-3-23 17:04
0
雪    币: 489
活跃值: (2858)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
2022-3-24 17:27
0
雪    币: 587
活跃值: (1002)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
wa
2022-3-24 18:52
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
请问maling数据集的下载地址是什么
2022-5-24 19:23
0
雪    币: 22413
活跃值: (25381)
能力值: ( LV15,RANK:910 )
在线值:
发帖
回帖
粉丝
9
mb_pyuhxzzy 请问maling数据集的下载地址是什么

论文里面有,不过之前有人分享了kaggle的,所以也可以去这里下载:https://www.kaggle.com/datasets/keerthicheepurupalli/malimg-dataset9010

最后于 2022-5-24 19:30 被1900编辑 ,原因:
2022-5-24 19:27
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
可以发下完整代码吗?
2022-7-12 15:05
0
雪    币: 22413
活跃值: (25381)
能力值: ( LV15,RANK:910 )
在线值:
发帖
回帖
粉丝
11
mb_bzepgvmk 可以发下完整代码吗?
所有代码不是都发出来了嘛
2022-7-12 17:20
0
雪    币: 4928
活跃值: (2604)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
非常感谢分享!
2022-10-19 17:04
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
请问这个错误您遇到过吗?
size mismatch for classifier.6.weight: copying a param with shape torch.Size([1000, 4096]) from checkpoint, the shape in current model is torch.Size([25, 4096]).
       size mismatch for classifier.6.bias: copying a param with shape torch.Size([1000]) from checkpoint, the shape in current model is torch.Size([25]).
2023-2-24 16:34
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
mb_aaxzszrk 请问这个错误您遇到过吗? size mismatch for classifier.6.weight: copying a param with shape torch.Size([1000, 40 ...
将预训练参数的最后一层删掉就可以了,我是这么解决的
2023-5-4 19:33
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
你好,老师,请问有malimg灰度图数据集的原始恶意软件样本数据集吗?
2023-12-8 17:53
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
mb_twuecnyv 将预训练参数的最后一层删掉就可以了,我是这么解决的
请问,可以说一下改哪里的代码吗
2024-3-12 20:35
0
游客
登录 | 注册 方可回帖
返回
//