首页
社区
课程
招聘
[原创]基于深度学习的恶意软件分类器(四)
发表于: 2022-4-13 17:23 10555

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

2022-4-13 17:23
10555

本文的主要内容参考链接:https://www.malwaredatascience.com/code-and-data。在该链接中,作者提供了大量良性和恶意的html文件源码作为数据集来训练和测试分类器,html文件中会包含了该文件用到的字符串,通过这些字符串可以判断一个html文件是否是恶意文件(可执行文件也一样,只不过字符串的提取方式不一样)。通过将这些字符串作为数据,作者基于Keras框架构建了一个恶意软件分类器,用来识别相应html文件是否是恶意文件。因此该任务是一个二分类任务,本文将基于Pytorch框架复现相关内容

Python版本:3.6.13

Pytorch版本:1.8.1

CUDA版本:11.4

数据集中分别有50000个良性html文件和44812个恶意html文件,两类文件中均抽出5000个样本用来作为测试集,剩余样本用来作为训练集。每一个样本均是如下所示的html文件源码:

对于这样的html源码,需要通过数据处理转换为固定长度的向量才可以用来构建分类器,本文的向量长度将是1024。

首先是打开html文件然后获取其中的源码:

通过正则表达式从源码中提取出字符串存入列表中:

提取出这些字符串以后,可以通过哈希算法来对每一个字符串进行计算,将计算结果与要生成的数据长度进行求余得到每一个字符串计算的结果。这里的哈希算法可以有多种选择,本文选择了局部敏感哈希(Simhash)哈希算法,因为该算法可以将相似字符串哈希出相近的数值。将上面提取的字符串进行计算以后,就会得到如下的整型列表:

对该整型列表进行去重处理,得到其中的每一个不重复的整型数值以及这些整型数值在该整型列表中出现的次数:

最后,生成一个向量长度(1024)的numpy数组,将每一个出现数值作为数组下标,数值出现的次数作为值赋给对应下标的数组元素:

现在就可以将每一个html文件中字符串转换为可以用来作为深度学习算法输入数据的向量,接下来只需要将每一个html转换为该向量就可以用来训练模型。数据集中包含的样本数过多(将近10万),而且每一个样本都要经历上述的转换过程,如果所有数据都拿来训练和测试会导致数据处理的时间太过漫长。为了缩短时间,将会通过随机选择的方式来生成指定数量的训练集或者测试集。

最终的数据类代码如下,这里首先是随机产生0或1来选择增加良性数据还是恶意数据,之后在随机产生0到良性文件或恶意文件长度-1的数值来决定具体加入哪一个文件。

模型如下图所示,模型输入长度为每一个html文件的字符串经过转换生成的向量的长度(1024)。该模型具有3层隐藏层的神经网络,其中3层隐藏层神经元数量分别是1024,512,64,每一个隐藏层的输出结果都会先通过Relu函数进行激活,在通过BatchNormal函数进行归一化处理。最后的输出层通过Sigmoid激活函数来输出最终的分类结果。

相应的网络代码如下:

该任务是一个二分类任务,因此选择二分类交叉熵损失(BCELoss)函数来计算损失,随后通过Adam优化器来更新模型参数。相关参数设定如下:

batch_size: 128

epoch: 10

lr: 1e-3

decay: 0.0005


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2022-4-14 09:28 被1900编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//