计算机毕业设计源码网,计算机毕业设计,毕业设计,计算机毕设,毕业设计代做
您现在的位置:计算机毕业设计源码网 > 热门毕业设计 > 基于卷积神经的Android恶意软件检测
基于卷积神经的Android恶意软件检测

基于卷积神经的Android恶意软件检测

  • 所属类别:热门毕业设计
技术支持: 远程指导安装 赠送文档 如有BUG免费修复
评价: 热度: ℃   

查看演示 毕业设计订制

本站郑诺:

凡购买的成品设计免费赠送文档,提供远程调试答疑等服务.
  • 程序描述
程序信息
ID编号:3606
编码:GBK及UTF-8
浏览量:
适用站点:Python毕业设计
最后更新:2026-01-18 10:03
程序架构描述:


Android恶意软件是一种针对Android设备的恶意程序,它能窃取用户隐私、破坏Android设备功能或收集Android设备信息。由于Android系统是开放性的,市面上有很多的Android设备,普及性非常广,其中Android系统的手机全球占有率就高达70%以上,所以也造成了针对Android而出现的恶意软件数量和变种非常多,这些恶意软件对用户的数据安全和设备稳定性造成了严重的威胁。近年来,随着网络的快速发展,人们在工作、学习、生活中无时无刻的使用Android设备,大家通过网络查找资料、传输文件、接收邮件的过程中,不可避免的会被恶意软件盯上,这些恶意软件只靠人工是很难分别出来的。所以需要通过卷积神经的技术,实现一个基于卷积神经的Android恶意软件检测是非常有必要的。
本设计通过UCI等众多网站收集恶意软件和正常软件的数据集,经过图像转换把其转换成图形文件并进行分类的存储,利用CNN模型中的ResNet算法,建立恶意软件的检测模型。把收集到的恶意软件及正常软件的图像文件数据集用来训练恶意软件的检测模型,建立恶意软件识别的分类器。再通过PyQt5设计UI界面,利用 Python开发语言进行编程完成恶意代码软件检测功能。最终使用户可以利用该功能快速的辨别出文件是不是恶意代码的文件,提高Android设备的安全性。
 
 关键词:恶意软件;文件识别;图像文件;CNN;ResNet;PyQt5

研究背景

根据GIR的相关调研报告[1]可知,2022年到现在全球的高级恶意软件保护软件带来的经济效益高达8334.5百万美元,而我国的恶意软件的保护软件市场收益也高达百万美元。根据市场调研可知[2],随着计算机网络技术的高速发展,恶意软件也在不断的发展,目前流行的主要是病毒、蠕虫、木马、间谍等形式的恶意软件,不过随着科学技术的变化,恶意软件的形式正在日趋多样化,不断的演变和复杂化,当前如何有效和准确的定位恶意软件已经成为头等的安全问题。恶意软件对Android设备的破坏力非常强大,对个人用户可造成严重的个人隐私泄露、对企业用户可造成商业机密泄露,对国家更可造成经济、军事、安全的严重泄密,其危害之大,已经能影响人类的生命财产和国家安全,可见Android恶意软件检测的重要性。近几年,机器学习算法尤其是卷积神经网络技术的发展,为Android恶意软件检测提供新的技术方向,所以也就有了基于卷积神经的Android恶意软件检测研究。

研究意义

基于卷积神经的Android恶意软件检测研究是具有重大意义的。目前恶意软件检测是IT安全中的一个重大问题。伴随着Android设备的普及和恶意软件的演变,如何避免Android用户设备被恶意软件所攻击和破坏变得十分重要。卷积神经网络能够深度自主学习并识别出恶意软件的特征,提高检测的准确性和效率,从而及时发现和及时切断恶意软件代码的传播,更有效的保护Android用户的设备安全。并且基于卷积神经的Android恶意软件检测在保护网络的安全和个人隐私方面,推动IT安全技术发展和提高网络安全防御智能化水平等方面都具有重要的意义,随着科学的不断进步和应用场景的不断扩大,针对性的研究将会更加深入和广泛。

国内外研究现状

当前Android恶意软件检测的研究已经成为国内外非常关注的问题,尤其是在军事领域,目前还在进行中的俄乌战争,就有很多军事机密的暴露是由Android恶意软件所造成的。世界各国对Android恶意软件的检测技术尤为重视。2022年,赵敏,张雪芹,朱唯一[3]依托LSTM-SVM方法,构建了手机端的静态软件检测模型,为实现恶意软件的检测提供了依据,该作者从恶意软件执行时对应的时序性、特征维度等众多的角度出发来分析,并把特征数据当作样本特征,以此训练LSTM模型来进行恶意软件检测。乔梦晴,李琳[4]等研究人员是基于遗传规划的算法,最终实现恶意软件检测,研究人员发现当软件特征处理和构建检测模型分开操作时,是无法解决恶意软件检测识别准确率和多样性的问题,所以这些研究人员把这两个步骤合并集成,以此来解决识别准确率和多样性的问题。白敬华[5]提出了基于图卷积网络技术检测Android恶意软件,利用Android恶意软件特征的提取和多标签分类,进行恶意软件检测模型,重点解决了恶意软件多标签分类问题。2023年,王海宽[6]利用深度学习算法检测恶意软件,将恶意软件的加密、寡态、打包进行了研究,王海宽使用Transformer构建恶意软件检测的框架,训练了检测模型进行恶意软件的检测。在国际上,基于卷积神经的Android恶意软件检测也取得了显著的进展。许多知名的网络安全公司和研究机构都在这一领域进行了深入研究, 2023年,Naeem Hamad,Dong Shi[7]等学者利用CNNs方法建立恶意软件检测及分类的模型,将恶意软件文件转为图像,在经过深度学习算法完成模型的训练。

研究工作内容

本研究是以Android恶意软件和Android正常软件文件数据做为样本,把文件转为图像,再利用卷积神经网络中的残差神经网络构建Android恶意软件检测模型,最终基于卷积神经的Android恶意软件检测。
其研究内容为:
(1)、利用网络先搜集收Android恶意的软件与Android正常的软件文件数据,本次研究从UNB等众多互联网站上下载Android恶意软件的文件数据,利用图像技术进行转换,把相关文件转换成图像的文件。
(2)、对Android恶意的软件与Android正常的软件文件图像数据集进行分类,建成训练数据集和验证数据集以及测试数据集样本。
(3)、将Android恶意的软件和Android正常的软件文件图像数据,利用ResNet构建Android恶意软件检测模型,生成训练过的模型文件,再通过测试集数据来验证生成的模型,并通过混淆举证、。
(4)、最后用训练过的Android恶意软件检测模型文件,实现基于卷积神经的Android恶意软件检测。

论文组织结构

本论文共有五个章节。
第一章:绪论,介绍了基于卷积神经的Android恶意软件检测的背景、目的、意义,总结国内外相关基于卷积神经的Android恶意软件检测的研究现状,明确本论文的研究内容和结构。
第二章:对基于卷积神经的Android恶意软件检测的相关主要技术进行了介绍,主要有卷积神经网络、Python、、ResNet、PyQt5。
第三章:基于卷积神经的Android恶意软件检测模型构建,介绍基于卷积神经的Android恶意软件检测构建过程。
第四章:基于卷积神经的Android恶意软件检测设计与实现,介绍基于卷积神经的Android恶意软件检测的文件上传、检测等相关业务的流程和运行效果,以及关键代码。
第五章:总结了基于卷积神经的Android恶意软件检测的实现过程,展望以后的改进方向。

卷积神经网络介绍

卷积神经网络

卷积神经网络[8]是一种深度学习模型,简称CNN,主要的作用是进行识别物体的图像处理器,常用在分析视觉图像,第一个提出概念的是Yann LeCun,第一次应用是解决手写数字的问题。当前卷积神经网络的应用十分广泛,例如图像识别与分类、物体检测、图像分割、人脸识别、视频分析、自然语言处理、医学成像、游戏等。

卷积神经网络基本原理

卷积神经网络主要分为:输入层、卷积层、激活层、池化层、全连接FC层五个层次。
(1)输入层[9],接收传递过来的样本,对其去均值、归一化和PCA/SVD降维等的相关数据进行处理与操作。
(2)卷积层[10] ,利用卷积核完成局部感知[33],例如我们设想一个48×48×3的RGB图像,当其经过一层5×5×3的卷积核处理后,会生成一个44×44×1的特征图。经过精确计算,我们可以得知输入层的神经元总数为6912个。再来看第一层隐藏层,它所包含的神经元数量为1936个,这些神经元发挥了局部连接的关键作用。该层的主要目标是通过多种手段来减少参数的数量,在减少参数的过程中,权值共享机制扮演着至关重要的角色。以某个隐层神经元为例,假设它有10×10个连接,那么理论上该神经元会有100个参数。然而,在权值共享的机制下,同一层内的位置连接值都是相同的,这使得参数数量大大减少。
(3)激活层,对上一层卷积操作所得到的结果进行非线性映射处理是神经网络中常见的步骤。在本层中,存在多种处理方法可供选择,例如Sigmoid函数、Tanh函数、ReLU函数、Leaky ReLU函数、ELU函数、Maxout函数等。这些函数都已被封装好,在应用的时候实现起来更容易。
(4)池化层[11],对于获取的内容数据,进行降维压缩以及参数和拟合度的减少处理。这一层的核心工作主要聚焦于内容数据的有效处理,同时该层对模型容错[34]性能进行了相应的优化。
(5)输出层,也是模型处理流程的终点,它承接了前面一系列复杂的操作。经过这些处理后,模型会将提取的各个特征图片进行全连接,以便整合并输出最终的预测结果。

卷积神经网络算法分类介绍

算法的分类主要基于其不同的应用目标和结构特点。在实际应用中,根据目标的不同,卷积神经网络算法可以大致分为检测算法、分类算法、分割算法等。本次基于卷积神经的Android恶意软件检测的研究是检测算法,检测算法主要用于在图像中定位并识别出特定的目标。它分为one-stage和two-stage两种思路类型。
One-stage算法,如YOLO系列的各个版本、SSD、RetinaNet、Resnet等,它们的特点是处理速度快,但可能在精度上略有不足。这些算法通过单次前向传播即可直接输出目标的位置和类别,无需进行额外的区域提议步骤。
Two-stage算法,如Fast-RCNN、Faster-RCNN和FPN(Feature Pyramid Networks)等,它们在精度上表现出色,但处理速度相对较慢。这类算法首先生成一系列可能包含目标的候选区域,然后对这些区域进行精细的分类和位置调整。
本次基于卷积神经的Android恶意软件检测主要采用的是Resnet模型算法。

ResNet理论介绍

ResNet基本概念介绍

Resnet[12]主要用于解决图像分类问题,它是一种创新的残差网络,从VGG网络演变而来。Resnet成功解决了传统网络中,随着网络深度增加,损失函数值反而增大的问题。作为CNN的一种变种算法,Resnet在CNN算法领域中占据重要地位。在实际应用中,当输入一个多维张量X时,经过Resnet的某一层网络后,会得到相应的输出H(x)。与传统的神经网络训练过程不同,Resnet并非直接学习H(x),而是学习H(x)与输入X之间的残差,即H(x) - X。这种残差学习的思想使得Resnet能够有效地避免梯度消失或爆炸的问题,从而使得网络能够更深、更准确地学习到数据的特征。

原理介绍

ResNet基本组成[13]主要包括residual block/bottleneck模块、BN模块[14]、Relu模块组成,其中,残差网络的核心是由多个residual block构建而成,这些block在结构上设计精妙,能够有效缓解深度网络训练中的梯度消失问题。BN模块在深度网络学习中扮演着至关重要的角色。它能够显著改善网络的训练稳定性和收敛速度,通过标准化每一层的输入,使得网络对不同的学习率、dropout比率等参数更加鲁棒。ReLU模块则作为网络的激活函数,其特点是将输入值映射到0和1之间,有助于网络学习非线性特征。ReLU函数的简单性和计算效率使得它在深度学习中得到广泛应用。常见的ResNet网络结构根据其层数可以划分为18层、34层、50层、101层和152层等几种。这些网络在深度和宽度上有所不同,以适应不同的任务和数据集。其中,ResNet-50层残差网络的结构图展示了其内部的层次和连接关系,体现了残差学习和模块化的设计理念,结构图如下所示。

Android恶意软件文件图像转换

本研究采用了卷积神经网络算法,对收集的Android恶意软件和正常软件文件进行了创新性的图像处理。具体步骤如下:我们针对二进制文件设计了独特的数据转换流程。首先,读取每个文件的二进制数据,并将每连续的8位数据转换为一个无符号整数,其数值范围在0至255之间。接着,我们根据预定的行宽,将这些整数有序地排列成一个向量。最终,整个文件被转换成一个二维数组的形式。为了更直观地展现这些数据,我们进一步将这个二维数组转化为灰阶图像。在这个转换过程中,二维数组中的每个元素值都直接对应到图像中的一个像素点的灰度值。由于元素的取值范围恰好是0到255,这与灰度图像中像素点的灰度值范围完全一致,从而确保了转换的准确性和有效性。通过这种创新的转换方式,我们成功地将原本难以直接处理的恶意软件和正常软件文件转化为了易于分析和处理的图像形式。这种转换不仅保留了原始文件的重要信息,还使得卷积神经网络能够更好地发挥其在图像处理方面的优势,从而实现对Android软件的有效分类和识别。以下是关键代码段的示例:

f = open(filename,'rb') # 读入文件
ln = os.path.getsize(filename) # 文件长度(byte)
width = 256 # 固定图片宽度为256
rem = ln%width # 计算余出的字节
a = array.array("B") # uint8 数组
a.fromfile(f,ln-rem) # 将文件读入数组a中,舍去余出的字节
f.close()           
g = numpy.reshape(a,(len(a)/width,width)) # 将数组转为二维
g = numpy.uint8(g)
scipy.misc.imsave(graphname,g) # 保存图片

Android恶意软件检测模型训练

图像文件预处理

在进行图像文件预处理时,训练数据集和验证集所经历的transform处理流程是有所不同的。这主要是因为两者在模型开发和评估过程中扮演着不同的角色。对于训练数据集来说,除了进行基本的resize和归一化操作以调整图像大小和统一像素值范围外,通常还会额外进行一系列图像增强操作。这些操作包括随机旋转、裁剪、调整亮度对比度等,旨在模拟现实世界中可能出现的各种图像变化。通过引入这些变化,模型能够学习到更多的特征组合和变换模式,从而提高其泛化能力,即对于未见过的、但具有相似特征变化的图像的识别能力。
相比之下,验证集主要用于评估模型的性能。为了确保评估结果的准确性和可靠性,验证集通常不会进行图像增强操作。这是因为图像增强可能会引入额外的噪声和变化,使得模型在验证集上的表现与实际性能有所偏差。因此,通过对验证集进行基本的resize和归一化操作,我们可以更准确地评估模型在未经增强的图像上的性能,从而为模型调优和选择提供可靠的依据。。
以下是图像文件预处理的代码示例:
# 数据预处理
 transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
])
transform_test = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
    transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
])

图像文件数据读取

完成图像文件的预处理工作后,下一步是编写相应的程序来加载和读取这些图像文件数据。在本文中,我们将利用torchvision.datasets库中提供的ImageFolder方法,这是一种便捷的方式来读取特定目录下的图像数据。具体来说,我们将使用ImageFolder方法分别加载data/train目录下的训练集图像文件数据和data/val目录下的验证集图像文件数据。ImageFolder方法能够自动根据目录结构来区分不同的类别,并读取相应的图像文件,这大大简化了数据加载的过程,提高了我们的工作效率。通过这种方式,我们可以方便地获取到预处理后的图像数据,为后续的训练和验证工作做好准备。
以下是相应的关键代码:

# 读取数据
dataset_train = datasets.ImageFolder('data/train', transform)
print(dataset_train.imgs)
# 对应文件夹的label
print(dataset_train.class_to_idx)
dataset_test = datasets.ImageFolder('data/val', transform_test)
# 对应文件夹的label
print(dataset_test.class_to_idx)
# 导入数据
train_loader = torch.utils.data.DataLoader(dataset_train, batch_size=BATCH_SIZE, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset_test, batch_size=BATCH_SIZE, shuffle=False)

设置Android恶意软件检测模型

在设置用于恶意软件检测的深度学习模型时,我们选择了交叉熵作为损失函数,因为它适合处理多分类问题,并能够有效衡量模型预测与真实标签之间的差异。模型架构方面,我们采用了resnet18,这是一个在ImageNet等大型数据集上预先训练过的模型。使用预训练模型的好处在于,它能够利用在大量数据上学到的通用特征,从而加快收敛速度并提高模型性能。为了将预训练的resnet18模型适应到我们的二分类任务(即区分恶意软件和正常软件),我们需要进行以下步骤:首先,将模型的pretrained参数设置为True,以便加载预训练权重。接着,修改模型最后一层的全连接层,将其输出单元数从原来的1000(或ImageNet上的类别数)调整为2,以对应我们的恶意软件和正常软件两个类别。之后,我们将模型移动到指定的设备(如CPU或GPU)上以进行训练和推理。最后,我们选择了Adam优化器,它是一种自适应学习率的优化算法,能够有效调整学习步长以加速收敛。为了进一步提高模型的稳定性和性能,我们还对学习率进行了适当的调低。设置恶意代码检测模型的关键代码如下:

# 实例化模型并且移动到GPU
criterion = nn.CrossEntropyLoss()
model = torchvision.models.resnet18(pretrained=False)
num_ftrs = model.fc.in_features
model.fc = nn.Linear(num_ftrs, 2)
model.to(DEVICE)
# 选择简单暴力的Adam优化器,学习率调低
optimizer = optim.Adam(model.parameters(), lr=modellr)
def adjust_learning_rate(optimizer, epoch):
    """Sets the learning rate to the initial LR decayed by 10 every 30 epochs"""
    modellrnew = modellr * (0.1 ** (epoch // 50))
    print("lr:", modellrnew)
    for param_group in optimizer.param_groups:
        param_group['lr'] = modellrnew

功能需求分析

通过多次的需求调研,基于卷积神经的Android恶意软件检测要求用户能选择恶意软件文件并进行转换,能验证Android恶意软件的文件是不是Android恶意软件,并可以查看Android恶意软件检测的结果,通过用例图对Android恶意软件检测系统中的用户功能进行说明。用户参与的用例主要是Android恶意软件文件选择、Android恶意软件文件检测、Android恶意软件文件检测结果查看。

功能总体设计

本系统功能模块分为三个:Android恶意软件文件选择,Android恶意软件文件检测,Android恶意软件文件检测结果查看。结构图如下

(1) Android恶意软件文件选择及转换,为用户提供选择需要检测Android恶意软件文件地方,并将上传的Android恶意软件文件进行图像转换。
(2) Android恶意软件文件检测,通过上述训练得到Android恶意软件检测模型,对上传的Android恶意软件文件进行检测。
(3)对Android恶意软件文件检测的结果进行查看。

功能模块实现

Android恶意软件文件选择及转换功能实现

Android恶意软件文件选择及转换功能的用户界面设计如下:界面上有一个Lable标签,用于提示用户“请选择Android恶意软件文件”。同时,还有一个QLineEdit控件,用于实时显示用户所选的Android恶意软件文件的路径,方便用户确认文件位置。此外,界面还提供了两个按钮控件,一个是“选择文档”按钮,用户点击后可浏览并选取本地的Android恶意软件文件;另一个是“确认Android恶意软件检测”按钮,用户点击后,系统将开始执行文件转换和检测流程。这样的界面设计旨在为用户提供直观、易用的操作体验,方便用户快速完成恶意软件文件的选择和检测工作。其中Android恶意软件文件读取的关键代码如下:
Def  WSavedivufile(self):
    # 读取界面数据
    divfwz = self.txtdivfwz.text()

    if divfwz == "":
        QMessageBox.warning(self, "警告", "请选择要检测的文件")
        return
    divfnm, divftype = os.path.splitext(divfwz)  # 获取文件名、文件扩展名
    divfnmindex=divfnm.rfind('/')
    divfnm=divfnm[divfnmindex+1:]


总结

在经过对Android恶意软件检测市场的深度剖析,我们发现Android恶意软件防护软件在应用市场上的受欢迎程度极高。从个人用户的角度出发,如果个人的Android手机遭受恶意软件的侵扰,不仅可能导致个人重要数据的丢失,还可能面临敏感信息被窃取、密码被破解等风险,进而造成个人财产的损失。而在企业层面,一旦企业内部的Android设备感染恶意软件,企业的网络系统可能面临被操控的风险,商业机密数据可能被盗取,关键业务信息可能被篡改或删除,给企业带来无法估量的经济损失,甚至可能使企业陷入破产的境地。对于国家和军事领域而言,Android恶意软件更是国家安全的潜在威胁,可能导致国家机密信息外泄,严重威胁国家安全与人民财产安全。
随着计算机技术的飞速发展,Android恶意软件的防御技术也在不断更新迭代。因此,Android恶意软件检测功能在当前依然备受瞩目,市场前景广阔。无论是从个人、企业还是国家安全的角度来看,加强Android恶意软件的检测和防护都显得尤为重要。所以本设计致力于研究并实现基于卷积神经的Android恶意软件检测。
经过3个月的辛勤努力,终于成功完成了基于卷积神经的Android恶意软件检测的设计与实现,并撰写了相关论文。在设计过程中,主要攻克了以下难点:
(1)Android恶意软件二进制文件的图像转换问题。由于初次接触此领域,且项目要求使用神经网络算法,需要将二进制文件转换为图像文件数据。面对这一挑战,我积极查阅相关资料,深入学习图像转换的原理和方法,最终成功解决了这一问题。
(2)残差神经网络(ResNet)算法的理解与实现。在本设计中,我采用ResNet算法构建Android恶意软件检测模型。因此,需要对ResNet算法所需的数据集预处理、模型数据加载以及模型训练等知识进行掌握。虽然起初对Python实现该算法不太熟悉,但通过向导师请教以及利用网络等平台学习相关教程,最终掌握了ResNet算法的实现方法。
(3)PyQt5框架的应用。为实现基于卷积神经的Android恶意软件检测的界面,我使用了PyQt5框架。为此,我深入学习了PyQt5框架的界面设计原理及控件使用方法,目前已能够熟练运用其进行界面开发。
综上所述,通过本次设计的实现,我不仅掌握了ResNet算法的具体实现过程,还为日后的工作积累了宝贵的经验。
 

本站由为毕设源码站提供计算与安全服务.
备案号:鲁ICP备2022033926号-2