基于深度学习的恶意软件检测

恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞,例如可以被劫持的合法软件(例如浏览器或 Web 应用程序插件)中的错误。

恶意软件渗透可能会造成灾难性的后果,包括数据被盗、勒索或网络系统瘫痪。

 在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

1、为什么检测恶意软件很重要?

恶意软件是当今互联网上最严重的安全威胁之一。 事实上,大多数互联网问题(例如垃圾邮件和拒绝服务攻击)的根本原因都是恶意软件。 也就是说,受到恶意软件攻击的计算机通常会联网形成僵尸网络,并且许多攻击都是使用这些恶意的、攻击者控制的网络发起的。

为了应对新产生的恶意软件,需要采用新技术来检测它们并防止它们造成的任何损害。

2、为什么选择深度学习?

如今深度学习已经主导了各种计算机视觉任务。 这些深度学习技术不仅使本次比赛取得了快速进步,而且在许多比赛中甚至超越了人类的表现。 这些任务之一是图像分类。

与更传统的机器学习技术方法不同,深度学习分类器是通过特征学习而不是特定于任务的算法进行训练的。 这意味着机器将学习所呈现的图像中的模式,而不是要求人类操作员定义机器应在图像中寻找的模式。 简而言之,它可以自动提取特征并将数据分类为各种类别。

早期层学习如何检测边缘等低级特征,后续层将早期层的特征组合成更全面、更完整的表示。

我们可以使用后面描述的方法将恶意软件/良性文件转换为灰度图像。 然后我们可以将这些深度学习技术应用于生成的图像,将它们分类为恶意软件或良性图像。

3、如何将恶意软件变换为图像?

要使用深度学习模型对图像进行分类,我们需要来自良性文件和恶意软件文件的图像。 我们只会进行二元分类(恶意软件和良性类别)。 多类分类也可以使用这种技术来完成,其想法是恶意软件文件的变体将具有与其他文件不同的图像。

准备好数据集后,我们将通过对每个图像执行以下步骤将每个文件转换为 256x256 灰度图像(每个像素的值在 0 到 255 之间):

  1. 从文件中一次读取 8 位。
  2. 将8位视为二进制数,并将其转换为对应的整数。
  3. 输入数字作为像素值。

最大为 64 KB 的文件可以容纳 256 x 256 的图像。 任何大小超过 64 KB 的文件,其剩余内容将被删除。另一方面,如果文件大小小于 64 KB,则剩余图像将用 0 填充。

由于恶意软件检测是实时完成的,我们需要在几秒钟内将图像分类为良性或恶意软件。 因此,保持图像生成过程简单、简短将帮助我们节省宝贵的时间。

4、数据集的准备

这一步非常简单。 生成所有图像后,将它们分成两个文件夹 - 训练和验证。 每个文件夹都将包含两个文件夹,即恶意软件和良性文件夹。

将这两个文件夹存储在另一个名为“dataset.tar”的文件夹中,并压缩生成.tar 文件。

所以最终的目录结构将是→ dataset.tar 包含验证和训练。 验证将包含恶意软件和良性文件夹。 火车将有文件夹 Malware 和 Benign。

将压缩文件夹移动到包含代码的 Jupyter 笔记本所在的目录中。

5、深度模型实现

要从 Google 云端硬盘读取数据集,请添加以下代码行:

!pip install PyDrive #
import os
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials
auth.authenticate_user()
gauth=GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)

运行上述代码的最后 4 行后,Google SDK 会要求您输入验证码。 它会提到一个链接,点击它后,你将获得安全代码。

link = '1sL4I4xNh657AhrIOOwbr6TX58ahyC'(add the link here )

创建一个变量,其中包含 .tar 文件的链接,该文件包含存储在 Google 云端硬盘中的数据。要获取 URL,请打开驱动器中的 .tar 文件并获取该文件的可共享链接。 你不需要整个 URL,只需要其中的一部分。

获取数据的路径:

downloaded = drive.CreateFile({'id':link}) 
downloaded.GetContentFile('dataset.tar')
import tarfile
tar = tarfile.open("dataset.tar")
path = tar.extractall('DS/')
tar.close()
path = Path.cwd().joinpath("DS/dataset/")
path.ls()
data = ImageDataBunch.from_folder(path, ds_tfms=get_transforms(), size=224)
## To view data in a batch
data.show_batch(rows=3, figsize=(7,6))
## To know the number of classes in a dataset
print(data.c)
## To know the names of the classes in a dataset
print( data.classes)

创建模型:

learn = create_cnn(data, model.resnet34, metrics = error_rate)
## To know the model architecture
learn.model
## Training the model
learn.fit_one_cycle(4)
learn.fit_one_cycle(10)

这是运行上述代码后得到的输出的屏幕截图:

interp = ClassificationInterpretation.from_learner(learn)
losses,idxs =  interp.top_losses()
interp.plot_top_losses(9,figsize=(9,6))

6、如何找到并设置一个好的学习率?

到目前为止,我们还没有告诉模型在训练模型时使用什么学习率,我们都知道这是训练时最重要的超参数之一。

为了找到良好的学习率,请执行以下操作:

learn.lr_find()
learn.recorder.plot()

learn.fit_one_cycle(5, max_lr=slice(1e-6,1e-4))
## Saving the weights of the model
learn.save('stage-1-malware-detection')

注意:每次调用  fit_one_cycle() 函数时,权重都不会重新初始化。 因此,如果依次调用该函数,则epoch会累加,这意味着如果你先调用 fit_one_cycle(5),然后调用 fit_one_cycle(10),则模型已训练了大约 15 个epoch。

完整的代码可以在我的 GitHub 帐户上找到。


原文链接:恶意软件检测实战 - BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/166261.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【面试经典150 | 算术平方根】

文章目录 写在前面Tag题目来源解题思路方法一:数学表达式方法二:二分法 其他语言python3 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并…

【Flink 问题集】The generic type parameters of ‘Collector‘ are missing

错误展示: Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException: The return type of function main(CollectionDemo.java:33) could not be determined automatically, due to type erasure. You can give type in…

Redux-状态管理组件

一、简介 react中的状态只属于某个组件。而Redux是一个全局管理js状态的架构,让组件通信更加容易。 之前是状态在所有组件间传递,而redux通过store来实现这个功能。 Redux特性: 1.Single source Of truth,通过store唯一维护状态…

基于单片机16路抢答器仿真系统

**单片机设计介绍, 基于单片机16路抢答器仿真系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的16路抢答器仿真系统是一种用于模拟和实现抢答竞赛的系统。该系统由硬件和软件两部分组成。 硬件方面&am…

Java21新增特性

版本介绍 Java 21是Java平台的一个新版本,于2023年9月19日由Oracle公司正式发布。这个版本包含了数千个性能、稳定性和安全性更新,以及几十个新功能和增强。其中,15个增强被赋予了自己的JDK增强提案(JEP),…

超详细~25考研规划~感恩现在努力的你!!!

25考研规划 俄语,翻译过来叫我爱你 考试时间 第一天 8.30-11.30政治——100分 2.00-5.00英语——100分 第二天 8.30-11.30数学——150分 2.00-5.00专业课——150分 1.什么是25考研 将在2024年12月参加考研,2025年本科毕业,9月读研究…

【Linux】第十九站:进程替换

文章目录 一、单进程版---最简单的程序替换二、进程替换的原理三、多进程的程序替换1.多进程的程序替换实例2.那么程序在替换时候有没有创建子进程呢3.再谈原理4.一个现象5.我们的CPU如何得知程序的入口地址? 四、各个接口的介绍1.execl2.execlp3.execv4.execvp5.ex…

java文件压缩加密,使用流的方式

使用net.lingala.zip4j来进行文件加密压缩。 添加依赖net.lingala.zip4j包依赖&#xff0c;这里使用的是最新的包2.11.5版本。 <dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>${zip4j.versi…

某60区块链安全之不安全的随机数实战一

区块链安全 文章目录 区块链安全不安全的随机数实战一实验目的实验环境实验工具实验原理实验内容攻击过程分析合约源代码漏洞EXP利用 不安全的随机数实战一 实验目的 学会使用python3的web3模块 学会以太坊不安全的随机数漏洞分析及利用 实验环境 Ubuntu18.04操作机 实验工…

进程之理解进程的概念

你必须非常努力&#xff0c;才能看起来毫不费力。文章目录 进程的基本概念描述进程——pcbtest_struct pcb的一种task_struct 内容分类 组织进程查看进程通过系统调用获取进程标示符总结 进程的基本概念 课本概念&#xff1a;进程是一个执行实列&#xff0c;正在执行的程序等。…

JAVA小游戏拼图

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 创建一个代码类 和一个运行类 代码如下&#xff1a; package heima; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import …

一款实用的.NET Core加密解密工具类库

前言 在我们日常开发工作中&#xff0c;为了数据安全问题对数据加密、解密是必不可少的。加密方式有很多种如常见的AES&#xff0c;RSA&#xff0c;MD5&#xff0c;SAH1&#xff0c;SAH256&#xff0c;DES等&#xff0c;这时候假如我们有一个封装的对应加密解密工具类可以直接…

源码分析Mybatis拦截器(Interceptor)拦截saveBatch()获取不到实体id的原因

1.背景 由于业务需求想在Mybatis拦截器层面获取insert后实体id去做相关业务。但是发现执行saveBatch()方法时&#xff0c;获取参数实体的时候&#xff0c;拿不到自增id。但是save()方法可以。 save方法之所以可以是因为&#xff1a; MybatisPlus的BaseMapper执行insert方法后…

leetcode刷题日志-68.文本左右对齐

给定一个单词数组 words 和一个长度 maxWidth &#xff0c;重新排版单词&#xff0c;使其成为每行恰好有 maxWidth 个字符&#xff0c;且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词&#xff1b;也就是说&#xff0c;尽可能多地往每行中放置单词。必要时可…

C语言:结构体

目录 结构体类型的声明 匿名结构体 全局结构体变量 嵌套结构体 访问结构体成员 结构的自引用 结构体变量的定义和初始化 结构体内存对齐 结构体内存对齐规则 修改默认对齐数 #pragma pack(n) offsetof 求结构体成员相对于结构体开头的偏移量的宏。 为什么存在内存…

JavaScript 异步编程

异步的概念 异步&#xff08;Asynchronous, async&#xff09;是与同步&#xff08;Synchronous, sync&#xff09;相对的概念。 在我们学习的传统单线程编程中&#xff0c;程序的运行是同步的&#xff08;同步不意味着所有步骤同时运行&#xff0c;而是指步骤在一个控制流序…

【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…

六大排序(插入排序、希尔排序、冒泡排序、选择排序、堆排序、快速排序)未完

文章目录 排序一、 排序的概念1.排序&#xff1a;2.稳定性&#xff1a;3.内部排序&#xff1a;4.外部排序&#xff1a; 二、插入排序1.直接插入排序2.希尔排序 三、选择排序1.直接选择排序方法一方法二直接插入排序和直接排序的区别 2.堆排序 四、交换排序1.冒泡排序2.快速排序…

论文阅读——DiffusionDet

在目标检测上使用扩散模型 前向过程&#xff1a;真实框-->随机框 后向过程&#xff1a;随机框-->真实框 前向过程&#xff1a; 一般一张图片真实框的数目不同&#xff0c;填补到同一的N个框&#xff0c;填补方法可以是重复真实框&#xff0c;填补和图片大小一样的框&a…

Hive语法,函数--学习笔记

1&#xff0c;排序处理 1.1cluster by排序 &#xff0c;在Hive中使用order by排序时是全表扫描&#xff0c;且仅使用一个Reduce完成。 在海量数据待排序查询处理时&#xff0c;可以采用【先分桶再排序】的策略提升效率。此时&#xff0c; 就可以使用cluster by语法。 cluster…