掌桥专利:专业的专利平台
掌桥专利
首页

代码检测方法、装置、存储介质以及终端

文献发布时间:2023-06-19 09:46:20


代码检测方法、装置、存储介质以及终端

技术领域

本申请涉及计算机安全技术领域,尤其涉及一种代码检测方法、装置、存储介质以及终端。

背景技术

随着科学技术的发展,人们生活中使用到移动终端、计算机等电子设备的机会也越来越多,在各种电子设备中软件作为实现各种功能的基础,软件中恶意代码检测方法也成为本领域人员研究的重点之一。

恶意代码是指没有作用却会带来危险的代码,最常见的恶意代码有计算机病毒(简称病毒)、特洛伊木马(简称木马)、计算机蠕虫(简称蠕虫)、后门以及逻辑炸弹等。在相关技术中,可以基于标准损失函数的机器学习,以实现代码检测,但是直接套用基于标准损失函数的机器学习算法,容易使得训练出来的模型只追求的错误代码分类率,但却有很高的实际业务损失。

发明内容

本申请提供一种代码检测方法、装置、存储介质以及终端,可以解决相关技术中直接套用基于标准损失函数的机器学习算法,容易使得训练出来的模型只追求的错误代码分类率,但却有很高的实际业务损失的技术问题。

第一方面,本申请实施例提供一种代码检测方法,所述方法包括:

获取训练样本代码,以及获取所述训练样本代码对应的误报和漏报的自定义损失函数;

基于所述自定义损失函数以及所述训练样本代码对预设训练模型进行迭代训练,将训练后的所述预设训练模型作为预测模型;

获取待检测代码,将所述待检测代码输入所述预测模型得到代码检测结果。

可选地,所述获取所述训练样本代码对应的误报和漏报的自定义损失函数,包括:获取所述训练样本代码对应的预设误报代价值以及预设漏报代价值;基于所述预设误报代价值、所述预设漏报代价值以及标准损失函数得到自定义损失函数。

可选地,所述基于所述自定义损失函数以及所述训练样本代码对预设训练模型进行迭代训练,包括:获取所述训练样本代码对应的样本特征;将所述样本特征输入预设训练模型,得到所述训练样本代码对应预测结果,其中,所述预测结果包括:预测恶意以及预测正常;获取所述训练样本代码对应的实际结果,其中,所述实际结果包括:实际恶意以及实际正常;将所述预测结果以及所述实际结果输入所述自定义损失函数中,得到损失结果。

可选地,所述基于所述自定义损失函数以及所述训练样本代码对预设训练模型进行迭代训练,还包括:当所述损失结果不满足预设结果要求,则执行步骤“获取所述训练样本代码对应的样本特征”,直至所述损失结果满足所述预设结果要求。

可选地,所述获取所述训练样本代码对应的样本特征之后,还包括:基于所述样本特征生成关于所述训练样本的样本特征向量;所述将所述样本特征输入预设训练模型,包括:将所述特征向量输入预设训练模型。

可选地,将所述预测结果是预测恶意,且所述实际结果是实际正常的训练样本代码确定为误报训练代码;将所述预测结果是预测正常,且所述实际结果是实际恶意的训练样本代码确定为漏报训练代码;所述预设误报代价值为针对所述误报训练代码设置的代价值;所述预设漏报代价值为针对所述漏报训练代码设置的代价值。

可选地,所述方法还包括:获取所述误报训练代码对应的误报业务损失,以及获取所述漏报训练代码对应的漏报业务损失;当所述误报业务损失大于所述漏报业务损失时,设置所述预设误报代价值对应的权重大于所述预设漏报代价值对应的权重;当所述误报业务损失小于所述漏报业务损失时,设置所述预设误报代价值对应的权重小于所述预设漏报代价值对应的权重;当所述误报业务损失等于所述漏报业务损失时,设置所述预设误报代价值对应的权重等于所述预设漏报代价值对应的权重。

第二方面,本申请实施例提供一种代码检测装置,所述装置包括:

样本获取模块,用于获取训练样本代码,以及获取所述训练样本代码对应的误报和漏报的自定义损失函数;

训练模块,用于基于所述自定义损失函数以及所述训练样本代码对预设训练模型进行迭代训练,将训练后的所述预设训练模型作为预测模型;

检测模块,用于获取待检测代码,将所述待检测代码输入所述预测模型得到代码检测结果。

第三方面,本申请实施例提供一种计算机存储介质,所述计算机存储介质存储有多条指令,所述指令适于由处理器加载并执行实现上述的方法的步骤。

第四方面,本申请实施例提供一种设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述的方法的步骤。

本申请一些实施例提供的技术方案带来的有益效果至少包括:

本申请提供一种代码检测方法,首先获取训练样本代码,以及获取训练样本代码对应的误报和漏报的自定义损失函数;然后基于自定义损失函数以及训练样本代码对预设训练模型进行迭代训练,将训练后的预设训练模型作为预测模型;最后获取待检测代码,将待检测代码输入预测模型得到代码检测结果。因此可以根据代码对应的业务需要,设置训练样本代码对应的误报和漏报的自定义损失函数,可以极大降低代码检测结果带来的业务损失。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的一种代码方法的示例性系统架构图;

图2为本申请实施例提供的一种代码检测方法的系统交互图;

图3为本申请另一实施例提供的一种代码检测方法的流程示意图;

图4为本申请另一实施例提供的一种代码检测方法的流程示意图;

图5为本申请另一实施例提供的代码检测装置的结构示意图;

图6为本申请另一实施例提供的代码检测装置的结构示意图;

图7为本申请实施例提供一种终端的结构示意图。

具体实施方式

为使得本申请的特征和优点能够更加的明显和易懂,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而非全部实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

图1为本申请实施例提供的一种代码方法的示例性系统架构图。

如图1所示,系统架构可以包括至少一个终端110、服务器120以及网络130,网络130用于在终端110和服务器120之间提供通信链路的介质。网络130可以包括各种类型的有线通信链路或无线通信链路,例如:有线通信链路包括光纤、双绞线或同轴电缆的,无线通信链路包括蓝牙通信链路、无线保真(Wireless-Fidelity,Wi-Fi)通信链路或微波通信链路等。

终端110可以是硬件,也可以是软件。当终端110为硬件时,可以是具有显示屏的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携式计算机和台式计算机等。当终端110为软件时,可以是安装在上述所列举的电子设备中,其可以实现成多个软件或软件模块(例如:用来提供分布式服务),也可以实现成单个软件或软件模块,在此不作具体限定。

服务器120可以是提供各种服务的业务服务器。需要说明的是,服务器120可以是硬件,也可以是软件。当服务器120为硬件时,可以实现成多个服务器组成的分布式服务器集群,也可以实现成单个服务器。当服务器120为软件时,可以实现成多个软件或软件模块(例如用来提供分布式服务),也可以实现成单个软件或软件模块,在此不做具体限定。

应理解,图1中的终端、网络和服务器的数目仅是示意性的。根据实现需要,可以是任意数量的终端、网络和服务器。请参阅图2,图2为本申请实施例提供的一种代码检测方法的系统交互图,下面将结合图1和图2介绍一种代码检测方法中系统交互过程。

S201、终端从服务器获取训练样本代码,以及获取训练样本代码对应的误报和漏报的自定义损失函数。

可选地,获取训练样本代码对应的误报和漏报的自定义损失函数,包括:获取训练样本代码对应的预设误报代价值以及预设漏报代价值;基于预设误报代价值、预设漏报代价值以及标准损失函数得到自定义损失函数。

S202、终端基于自定义损失函数以及训练样本代码对预设训练模型进行迭代训练,将训练后的预设训练模型作为预测模型。

可选地,基于自定义损失函数以及训练样本代码对预设训练模型进行迭代训练,包括:获取训练样本代码对应的样本特征;将样本特征输入预设训练模型,得到训练样本代码对应预测结果,其中,预测结果包括:预测恶意以及预测正常;获取训练样本代码对应的实际结果,其中,实际结果包括:实际恶意以及实际正常;将预测结果以及实际结果输入自定义损失函数中,得到损失结果。

可选地,基于自定义损失函数以及训练样本代码对预设训练模型进行迭代训练,还包括:当损失结果不满足预设结果要求,则执行步骤“获取训练样本代码对应的样本特征”,直至损失结果满足预设结果要求。

可选地,获取训练样本代码对应的样本特征之后,还包括:基于样本特征生成关于训练样本的样本特征向量;将样本特征输入预设训练模型,包括:将特征向量输入预设训练模型。

可选地,将预测结果是预测恶意,且实际结果是实际正常的训练样本代码确定为误报训练代码;将预测结果是预测正常,且实际结果是实际恶意的训练样本代码确定为漏报训练代码;预设误报代价值为针对误报训练代码设置的代价值;预设漏报代价值为针对漏报训练代码设置的代价值。

可选地,方法还包括:获取误报训练代码对应的误报业务损失,以及获取漏报训练代码对应的漏报业务损失;当误报业务损失大于漏报业务损失时,设置预设误报代价值对应的权重大于预设漏报代价值对应的权重;当误报业务损失小于漏报业务损失时,设置预设误报代价值对应的权重小于预设漏报代价值对应的权重;当误报业务损失等于漏报业务损失时,设置预设误报代价值对应的权重等于预设漏报代价值对应的权重。

S203、终端获取待检测代码,将待检测代码输入预测模型得到代码检测结果。

在本申请实施例中,首先获取训练样本代码,以及获取训练样本代码对应的误报和漏报的自定义损失函数;然后基于自定义损失函数以及训练样本代码对预设训练模型进行迭代训练,将训练后的预设训练模型作为预测模型;最后获取待检测代码,将待检测代码输入预测模型得到代码检测结果。因此可以根据代码对应的业务需要,设置训练样本代码对应的误报和漏报的自定义损失函数,可以极大降低代码检测结果带来的业务损失。

请参阅图3,图3为本申请另一实施例提供的一种代码检测方法的流程示意图。

如图3所示,该方法包括:

S301、获取训练样本代码,以及获取训练样本代码对应的误报和漏报的自定义损失函数。

可以理解的,本申请实施例的执行主体可以是服务器或者终端,也即当执行主体是服务器时,通过代码检测方法获取到的预测模型可以发送给终端使用,当执行主体为终端时,终端可以直接通过代码检测方法获取预测模型,并基于该预测模型进行代码检测,为方便描述本申请实施例以执行主体为终端描述代码检测方法的执行过程。

本申请实施例的主要思想是通过机器学习的方式获取预测模型,以便于通过预测模型对代码进行检测,而实现机器学习首先需要获取样本,也即在本申请实施例中需要先获取针对代码检测的训练样本代码,其中训练样本代码为与待检测代码类型相关或者类似的代码,也即训练样本代码与待检测代码具有相似的特征,那么通过训练样本代码进行机器学习得到的预测模型,可以更加准确识别出待检测代码的特征,也就可以更加准确对待检测代码进行检测。其中,获取训练样本代码的方式可以是,从服务器获取训练样本代码,还可以是从终端本地获取训练样本代码,本申请实施例不限制获取训练样本代码的方式。

由于本申请实施例中,最终需要通过预测模型对待检测代码进行检测,并减少检测结果中误报代码或者漏报代码的比例,以减少误报代码或者漏报代码带来的业务损失,而在对训练样本代码的训练过程中,每一次的训练结果对应预测模型输出的检测结果,因此可以对训练过程使用到的损失函数进行自定义,并提高代码训练过程中对检训练结果为误报代码或者对训练结果为漏报代码的训练代价。

在本申请实施例中,可以先设置训练样本代码对应的误报和漏报的自定义损失函数,其中误报是指在通过预测模型对待检测代码的检测过程中,当某代码的代码检测结果为恶意代码,但是该代码实际为正常代码,则该检测结果为误报;当某代码的代码检测结果为正常代码,但是该代码实际为恶意代码,则该检测结果为漏报;而损失函数是将随机事件或其有关随机变量的取值映射为非负实数,以表示该随机事件的“风险”或“损失”的函数。损失函数应用于本申请实施例的机器学习时,损失函数被用于模型的参数估计,因此在机器学习中,可以通过损失函数代表本次训练结果与预设实际结果之间的风险或者代价,由于机器学习是一个不断训练以及迭代的过程,那么可以通过自定义损失函数对训练结果进行纠正,也即可以根据损失函数对应的损失结果也就是风险结果或者代价结果,持续对预设模型训练以及迭代,由于风险结果或者代价结果越高,那么下次训练时预设模型就会减少输出对应的训练结果,直至损失函数对应的损失结果也就是风险结果或者代价结果满足要求,那么训练得到的预测模型也就可以满足用户的需要。

具体的,可以根据需要减少的训练结果,自由设置损失函数中训练结果对应的代价值,例如,当需要减少误报的训练结果时,可以提高自定义损失函数中误报的训练结果对应的代价值;但需要减少漏报的训练结果时,可以提高自定义损失函数中漏报的训练结果对应的代价值。

S302、基于自定义损失函数以及训练样本代码对预设训练模型进行迭代训练,将训练后的预设训练模型作为预测模型。

在上述步骤中,获取到了训练样本代码以及自定义损失函数,还需要获取预设训练模型,其中预设训练模型可以不做限定,因为本申请实施例的核心不在于预设训练模型,而是在于通过自定义损失函数对预设训练模型进行迭代训练,进而实现通过对预设训练模型进行训练后得到的预测模型,可以在代码检测过程中,预测模型可以输出用户预想的检测结果。因此可以基于自定义损失函数以及训练样本代码对预设训练模型进行迭代训练,将训练后的预设训练模型作为预测模型。

S303、获取待检测代码,将待检测代码输入预测模型得到代码检测结果。

在获取到预测模型后,就可以对待检测代码进行检测,也即将待检测代码输入预测检测模型中,得到关于待检测代码的输出结果,输出结果包括待检测代码为恶意代码或者正常代码。由于可以根据代码对应的业务需要,设置训练样本代码对应的误报和漏报的自定义损失函数,因此可以极大降低代码检测结果带来的业务损失。

请参阅图4,图4为本申请另一实施例提供的一种代码检测方法的流程示意图。

如图4所示,该方法包括:

S401、获取训练样本代码,获取训练样本代码对应的预设误报代价值以及预设漏报代价值。

其中,关于获取训练样本代码的过程,可以参阅上述步骤S301中的记载,此处不在赘述。由于自定义损失函数可以通过对标准损失函数进行参数设置得到,在本申请实施例中,由于不需要考虑预测模型输出的检测结果为正确带来的业务损失,也即不需要考虑代码检测结果为恶意代码,而实际代码结果为恶意代码,或者检测结果为正常代码,而实际代码结果为正常代码的情况,仅需要考虑误报和漏报带来的业务损失,那么关于预设训练模型对应的自定义损失函数也就仅包括误报损失结果以及漏报损失结果,因此仅需要对标准损失函数中关于误报参数以及漏报参数进行设置,具体的,误报参数以及漏报参数在损失函数中分别对应预设误报代价值以及预设漏报代价值,因此通过对预设误报代价值以及预设漏报代价值进行预先设置,就可以在后续利用自定义损失函数对预设训练模型进行迭代训练时,使得训练出的预测模型更加符合用户要求。

S402、基于预设误报代价值、预设漏报代价值以及标准损失函数得到自定义损失函数。

在本申请实施例中,由于不需要考虑预测模型输出的检测结果为正确带来的业务损失,仅需要考虑误报和漏报带来的业务损失,那么标准损失函数也就仅包括误报损失结果对应的损失值以及漏报损失结果对应的损失值,因此在获取到标准损失函数后,可以分别针对误报损失函数对应的损失值以及漏报损失函数,设置对应的代价值,以针对后续训练中对误报或者漏报的检测,减少误报损失结果或者漏报损失结果。因此自定义损失函数等于预设误报代价值与误报损失函数的乘积加上预设漏报代价值与漏报损失函数的乘积。

本申请实施例中使用的标准损失函数可以不做限定,下面以机器学习模型常用到标准损失函数为对数损失(二元交叉熵)为例,介绍通过标准损失函数得到自定义损失函数的过程。当标准损失函数为对数损失(二元交叉熵)时,标准损失函数为:

Loss-standard=y

上述损失函数用于惩罚训练过程中预设训练模块输出的误报和漏报,其中y

Loss-standard=C

S403、获取训练样本代码对应的样本特征。

在获取到训练样本代码以及自定义损失函数之后,就可以基于预设训练模型进行模型训练的过程,其中可以首先获取训练样本代码对应的样本特征,也即从训练样本代码中提取出用于训练的特征,根据训练样本代码对应的文件格式的不同,提取出用于训练的特征也不一样。比如对于安卓系统中的dex文件来说,可以提取出用于训练的特征包括但不限于:头部信息特征、常量特征、操作数特征、指令序列特征、类名函数名特征以及权限特征。然后还可以基于样本特征生成关于训练样本的样本特征向量,也即将每个样本的特征按照一定的顺序排列,生成特征向量,便于后续输入预设模型进行训练。

S404、将样本特征输入预设训练模型,得到训练样本代码对应预测结果,其中,预测结果包括:预测恶意以及预测正常。

在获取到样本特征以及样本特征对应的特征向量之后,可以将样本特征输入预设训练模型,也即将特征向量输入预设训练模型,预设训练模型根据输入的特征向量输出对应的预测结果,其中预测结果包括:预测恶意以及预测正常。

S405、获取训练样本代码对应的实际结果,其中,实际结果包括:实际恶意以及实际正常。

由于在将训练样本代码输入预设训练模型进行训练之前,就可以获取训练样本代码对应的实际结果,其中,实际结果包括:实际恶意以及实际正常,那么在同时知晓训练样本代码对应的预测结果以及实际结果之后,就可以获取预测结果以及实际结果之间的对比情况,也即将预测结果以及实际结果输入自定义损失函数,便于根据损失结果调整下次预设训练模型进行训练的过程。

S406、将预测结果以及实际结果输入自定义损失函数中,得到损失结果。

在同时知晓训练样本代码对应的预测结果以及实际结果之后,就可以获取训练结果,其中训练结果包括四种结果,可以参阅表一中示出的具体训练结果:

表一

由上述表一可知,训练结果包括四种结果分别为,第一种为预测为恶意且实际为恶意,该结果正确预测;第二种为预测为恶意但实际为正常,该结果为错误预测,可以将预测结果是预测恶意,且实际结果是实际正常的训练样本代码确定为误报训练代码;第三种为预测为正常但实际为恶意,该结果为错误预测,可以将预测结果是预测正常,且实际结果是实际恶意的训练样本代码确定为漏报训练代码;第四种为预测为正常且实际为正常,该结果为正确预测。

由上述确定自定义损失函数的过程可以得知,不管使用何种形式的标准损失函数,形式上算法的预测错误的即是FP(误报)和FN(漏报)两部分所表示,即:Loss=Loss(FP)+Loss(FN)。从标准损失函数的通用数学公式角度来看,损失函数的求导优化对FP和FN是没有任何偏置的。分类算法所关心的是如何使得FP+FN的值尽可能的小,从而获得较高的分类准确率。对于FP、FN两部分各自在错误实例中所占的比重,标准损失函数并没有加以任何的考虑和限制。

然而在恶意代码检测的实际业务场景中,FN和FN所带来的实际业务损失往往是不同的。例如,在一些经常使用的代码对应的检测过程中,由于需要经常性对该类代码进行检测,那么误报造成的业务损失常常比漏报来的要大,因为如果一个恶意代码检测系统每天都在产生大量虚警,那么对用户的压力就会非常大,时间久了用户对系统的信任度就会下降,同时真实的有效告警也可能被淹没在海量的虚警中,反而导致更多和更严重的漏报。再例如,在一些较为重要的代码中,那么漏报带来的业务损失往往要大于误报来的业务损失,因此在重要代码中(例如金融代码或者支付代码),任何一个恶意代码被漏报后,都可能造成较大的损失,在此类代码的检测过程中,宁愿代码出现误报也不愿意代码被漏报。

因此,本申请实施例的核心是将误报、漏报两部分各自在业务损失中所占的比重加入到损失函数,再进行模型训练,尽量降低总代价而不是降低误分类(也就是为了降低总代价而容许更多的误分类)。

那么可以用表二来描述本申请实施例中做出不同决定所造成的不同的代价矩阵。

表二

根据表二可知,在恶意代码检测场景中,C

将预测结果以及实际结果输入自定义损失函数中,得到损失结果,由于自定义函数中的求导优化对FP和FN进行了偏置,因此下次训练时,就可以使得预测训练模型的预测结果对FP和FN进行了偏置。

S407、当损失结果不满足预设结果要求,则执行步骤“获取训练样本代码对应的样本特征”,直至损失结果满足预设结果要求。

当损失结果不满足预设结果要求,也即对FP和FN进行偏置的结果还不满足用户的需要,那么可以一直重复训练过程,也即执行步骤“获取训练样本代码对应的样本特征”,以及后续训练步骤,而每次训练时都会利用自定义损失函数对FP和FN进行偏置。那么就可以一直训练,直至损失结果满足预设结果要求,使得最终损失的数值计算朝向降低用户需要的业务损失代价的方向偏置,从而得到在真实业务场景中更实用的预测模型(恶意代码识别模型)。

本申请实施例的核心是在机器学习算法的原始标准代价损失函数的基础上,将误报、漏报两部分各自在损失中所占的权重加入到损失函数,形成新的自定义损失函数,至于其中使用到的机器学习算法和原始标准损失函数则没有限制,比如算法可以选择SVM、神经网络等,损失函数可以选择平方损失函数、指数损失函数等,我们可以根据实际测试效果来选择其中最优的机器学习算法和原始标准损失函数。

S408、获取待检测代码,将待检测代码输入预测模型得到代码检测结果。

在对待检测代码进行检测时,其检测步骤与对训练样本代码进行训练的过程类似,也即获取将待检测代码对应的样本特征,基于样本特征生成关于待检测代码的检测特征向量,将检测特征向量输入预测模型即可得到代码检测结果。其中预测模型中使用的算法与预设训练模型中使用的算法一致,例如,预测模型中使用的算法为SVM算法,那么预设训练模型中使用的算法也应该为SVM算法。

请参阅图5,图5为本申请另一实施例提供的代码检测装置的结构示意图。

如图5所示,该代码检测装置500包括:

样本获取模块510,用于获取训练样本代码,以及获取训练样本代码对应的误报和漏报的自定义损失函数;。

训练模块520,用于基于自定义损失函数以及训练样本代码对预设训练模型进行迭代训练,将训练后的预设训练模型作为预测模型。

检测模块530,用于获取待检测代码,将待检测代码输入预测模型得到代码检测结果。

请参阅图6,图6为本申请另一实施例提供的代码检测装置的结构示意图。

如图6所示,该代码检测装置600包括:

代价值获取模块610,用于获取训练样本代码对应的预设误报代价值以及预设漏报代价值。

损失函数获取模块620,用于基于预设误报代价值、预设漏报代价值以及标准损失函数得到自定义损失函数。

样本特征获取模块630,用于获取训练样本代码对应的样本特征。

其中,获取训练样本代码对应的样本特征之后,还包括:基于样本特征生成关于训练样本的样本特征向量。

第一训练模块640,用于将样本特征输入预设训练模型,得到训练样本代码对应预测结果,其中,预测结果包括:预测恶意以及预测正常。

那么将样本特征输入预设训练模型,包括:将特征向量输入预设训练模型。

实际结果获取模块650,用于获取训练样本代码对应的实际结果,其中,实际结果包括:实际恶意以及实际正常。

损失结果获取模块660,用于将预测结果以及实际结果输入自定义损失函数中,得到损失结果。

其中,将预测结果是预测恶意,且实际结果是实际正常的训练样本代码确定为误报训练代码;将预测结果是预测正常,且实际结果是实际恶意的训练样本代码确定为漏报训练代码;预设误报代价值为针对误报训练代码设置的代价值;预设漏报代价值为针对漏报训练代码设置的代价值。

可选地,代价值获取模块610,还用于获取误报训练代码对应的误报业务损失,以及获取漏报训练代码对应的漏报业务损失;当误报业务损失大于漏报业务损失时,设置预设误报代价值对应的权重大于预设漏报代价值对应的权重;当误报业务损失小于漏报业务损失时,设置预设误报代价值对应的权重小于预设漏报代价值对应的权重;当误报业务损失等于漏报业务损失时,设置预设误报代价值对应的权重等于预设漏报代价值对应的权重。

第二训练模块670,用于当损失结果不满足预设结果要求,则执行步骤“获取训练样本代码对应的样本特征”,直至损失结果满足预设结果要求。

代码检测模块680,用于获取待检测代码,将待检测代码输入预测模型得到代码检测结果。

在本申请实施例中,一种代码检测装置包括:样本获取模块,用于获取训练样本代码,以及获取训练样本代码对应的误报和漏报的自定义损失函数;训练模块,用于基于自定义损失函数以及训练样本代码对预设训练模型进行迭代训练,将训练后的预设训练模型作为预测模型;检测模块,用于获取待检测代码,将待检测代码输入预测模型得到代码检测结果。因此可以根据代码对应的业务需要,设置训练样本代码对应的误报和漏报的自定义损失函数,可以极大降低代码检测结果带来的业务损失。

本申请实施例还提供了一种计算机存储介质,计算机存储介质存储有多条指令,指令适于由处理器加载并执行如上述实施例中的任一项的方法的步骤。

进一步地,请参见图7,图7为本申请实施例提供了一种终端的结构示意图。如图7所示,终端700可以包括:至少一个中央处理器701,至少一个网络接口704,用户接口703,存储器705,至少一个通信总线702。

其中,通信总线702用于实现这些组件之间的连接通信。

其中,用户接口703可以包括显示屏(Display)、摄像头(Camera),可选用户接口703还可以包括标准的有线接口、无线接口。

其中,网络接口704可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。

其中,中央处理器701可以包括一个或者多个处理核心。中央处理器701利用各种接口和线路连接整个终端700内的各个部分,通过运行或执行存储在存储器705内的指令、程序、代码集或指令集,以及调用存储在存储器705内的数据,执行终端700的各种功能和处理数据。可选的,中央处理器701可以采用数字信号处理(Digital Signal Processing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable Logic Array,PLA)中的至少一种硬件形式来实现。中央处理器701可集成中央中央处理器(Central Processing Unit,CPU)、图像中央处理器(GraphicsProcessing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示屏所需要显示的内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到中央处理器701中,单独通过一块芯片进行实现。

其中,存储器705可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。可选的,该存储器705包括非瞬时性计算机可读介质(non-transitory computer-readable storage medium)。存储器705可用于存储指令、程序、代码、代码集或指令集。存储器705可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现上述各个方法实施例的指令等;存储数据区可存储上面各个方法实施例中涉及到的数据等。存储器705可选的还可以是至少一个位于远离前述中央处理器701的存储装置。如图7所示,作为一种计算机存储介质的存储器705中可以包括操作系统、网络通信模块、用户接口模块以及代码检测程序。

在图7所示的终端700中,用户接口703主要用于为用户提供输入的接口,获取用户输入的数据;而中央处理器701可以用于调用存储器705中存储的代码检测程序,并具体执行以下操作:

获取训练样本代码,以及获取训练样本代码对应的误报和漏报的自定义损失函数;

基于自定义损失函数以及训练样本代码对预设训练模型进行迭代训练,将训练后的预设训练模型作为预测模型;

获取待检测代码,将待检测代码输入预测模型得到代码检测结果。

在一个实施例中,中央处理器701在执行获取训练样本代码对应的误报和漏报的自定义损失函数时,具体执行以下步骤:

获取训练样本代码对应的预设误报代价值以及预设漏报代价值;

基于预设误报代价值、预设漏报代价值以及标准损失函数得到自定义损失函数。

在一个实施例中,中央处理器701在执行基于自定义损失函数以及训练样本代码对预设训练模型进行迭代训练时,具体执行以下步骤:获取训练样本代码对应的样本特征;将样本特征输入预设训练模型,得到训练样本代码对应预测结果,其中,预测结果包括:预测恶意以及预测正常;获取训练样本代码对应的实际结果,其中,实际结果包括:实际恶意以及实际正常;将预测结果以及实际结果输入自定义损失函数中,得到损失结果。

在一个实施例中,中央处理器701在执行基于自定义损失函数以及训练样本代码对预设训练模型进行迭代训练时,还具体执行以下步骤:当损失结果不满足预设结果要求,则执行步骤“获取训练样本代码对应的样本特征”,直至损失结果满足预设结果要求。

在一个实施例中,中央处理器701在执行获取训练样本代码对应的样本特征之后,还具体执行以下步骤:基于样本特征生成关于训练样本的样本特征向量;中央处理器701在执行将样本特征输入预设训练模型时,具体执行以下步骤:将特征向量输入预设训练模型。

中央处理器701还用于将预测结果是预测恶意,且实际结果是实际正常的训练样本代码确定为误报训练代码;将预测结果是预测正常,且实际结果是实际恶意的训练样本代码确定为漏报训练代码;预设误报代价值为针对误报训练代码设置的代价值;预设漏报代价值为针对漏报训练代码设置的代价值。

中央处理器701还用于:获取误报训练代码对应的误报业务损失,以及获取漏报训练代码对应的漏报业务损失;当误报业务损失大于漏报业务损失时,设置预设误报代价值对应的权重大于预设漏报代价值对应的权重;当误报业务损失小于漏报业务损失时,设置预设误报代价值对应的权重小于预设漏报代价值对应的权重;当误报业务损失等于漏报业务损失时,设置预设误报代价值对应的权重等于预设漏报代价值对应的权重。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。

作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本申请所必须的。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。

以上为对本申请所提供的一种代码检测方法、装置、存储介质以及终端的描述,对于本领域的技术人员,依据本申请实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。

相关技术
  • 一种代码检测方法、装置、存储介质及测试终端
  • 代码规范性检测方法、装置、终端设备及存储介质
技术分类

06120112298982