基于卷积神经网络的恶意软件操作码分析方法转让专利

申请号 : CN201910776705.5

文献号 : CN110472417B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈璨赵立超李丹史闻博庄宇鹏

申请人 : 东北大学秦皇岛分校

摘要 :

本发明公开了一种基于卷积神经网络的恶意软件操作码分析方法,包括:获取Dalvik字节码;获取操作码序列,并用独热向量表示;将独热向量转化为具有固定大小的向量,然后乘以随机权重矩阵,输入到卷积神经网络;在卷积层中输出特征映射集矩阵C;在k‑max池化中,对矩阵C进行最大合并操作,提取最重要的k个特征值输出特征向量Z;向量Z形成全连接层,在全连接层中对向量Z进行操作得到输出特征y;使用softmax函数处理输出特征y,获得相对概率分布p;计算交叉熵损失函数Lk;使用梯度下降法逐步调整最小化损失函数和相应模型的参数值;基于输出计算迭代地更新模型参数并优化检测模型。本发明具有检测准确度高的特点。

权利要求 :

1.一种基于卷积神经网络的恶意软件操作码分析方法,其特征在于:包括以下步骤:S1.获取训练样本;所述训练样本为已知类型的软件的执行程序,所述类型包括良性和恶意;

S2.对所述训练样本进行反编译处理,得到所述训练样本的smali文件,并从smali文件中获取Dalvik字节码;

S3.根据Android操作码常量列表获取操作码序列文件,并用独热向量表示;

S4.在嵌入层中将独热向量转化为具有固定大小的向量;

S5.将转化后的独热向量乘以随机权重矩阵,生成矩阵M,输入到卷积神经网络;

S6.在卷积层中使用卷积核对矩阵M进行卷积处理,得到特征映射,提取不同卷积核的特征映射集矩阵C;

卷积核的特定卷积操作定义如下:Cj=f1(Conv(M,wj)+bj)其中bj和wj是第j个卷积核的相应偏差参数和权重参数,f1为相应的RELU激活函数,j个卷积核对n‑h+1窗口执行完整的卷积运算,提取的不同卷积核的特征映射归纳如下:T

C=[c1|c2…|cp]

S7.在k‑max池化中,对矩阵C进行最大合并操作,提取最重要的k个特征值,得到隐藏层的特征向量Z;

S8.固定大小的向量Z形成全连接层,在全连接层中,对向量Z进行操作得到输出特征y;

并使用softmax函数处理输出特征y,把多类输出值转化为相对概率,获得相对概率分布p;

S9.针对所获得的概率分布p和标签概率分布计算交叉熵损失函数Lk;

损失函数Lk的定义如下:

其中Lk表示通过输入第k个样本计算的损失函数,p(l=i|y)是softmax函数输出向量的第i个值,表示样本属于第i类的概率; 标签li前面有一个求和符号,范围是从1到T类的数量; T=2表示全连接层的输出数;L表示一批b个数据样本的损失函数的平均值,它可以解释为预测值与通过构建模型获得的真实值之间的差异,定义如下:S10.根据计算出的交叉熵损失函数Lk,估计模型预测值与真实值的差异,并使用梯度下降法进行优化,获得最佳的Android程序检测模型;

S11.基于输出计算和最小化损失函数,迭代地更新模型参数并优化所提出的Android程序检测模型。

2.根据权利要求1所述的基于卷积神经网络的恶意软件操作码分析方法,其特征在于:所述步骤S3中,用独热向量表示的操作码序列中,每个操作码对应256个位置中的一个位置,出现过的操作码表示为1,没有出现的表示为0。

3.根据权利要求1所述的基于卷积神经网络的恶意软件操作码分析方法,其特征在于:所述步骤S7中,k为3或5。

4.根据权利要求1所述的基于卷积神经网络的恶意软件操作码分析方法,其特征在于:所述步骤S8中,在全连接层中对向量Z进行操作,计算前一层权重的总和值,获得每个元素的准确结合,得到输出特征y;softmax函数用处理分类器的方式处理输出特征y。

5.根据权利要求1所述的基于卷积神经网络的恶意软件操作码分析方法,其特征在于:所述步骤S10中,在损失函数最小化时,用梯度下降优化法逐步调整最小化损失函数和相应模型的参数值,获得最佳的Android程序检测模型。

说明书 :

基于卷积神经网络的恶意软件操作码分析方法

技术领域

[0001] 本发明涉及恶意软件检测领域,具体涉及一种基于卷积神经网络的恶意软件操作码分析方法。

背景技术

[0002] 当前对Android恶意软件的分析主要有静态分析的Hindroid,其为基于元路径的链接应用程序的方法,动态识别Android的系统,而在深度学习方面,存在着一种基于卷积
神经网络的检测方法,以及McLaughlin N的检测方法。这些方法存在准确度不足,分类成功
率不高,效率低下,提取操作码序列不够完整等缺点。

发明内容

[0003] 为了解决现有技术问题,本发明提供一种基于卷积神经网络的恶意软件操作码分析方法,具有检测准确度高的特点。
[0004] 为解决上述技术问题,本发明所采取的技术方案是:
[0005] 一种基于卷积神经网络的恶意软件操作码分析方法,包括以下步骤:
[0006] S1.获取训练样本;所述训练样本为已知类型的软件的执行程序,所述类型包括良性和恶意;
[0007] S2.对所述训练样本进行反编译处理,得到所述训练样本的smali文件,并从smali文件中获取Dalvik字节码;
[0008] S3.根据Android操作码常量列表获取操作码序列文件,并用独热向量表示;
[0009] S4.在嵌入层中将独热向量转化为具有固定大小的向量;
[0010] S5.将转化后的独热向量乘以随机权重矩阵,生成矩阵M,输入到卷积神经网络;
[0011] S6.在卷积层中使用卷积核对矩阵M进行卷积处理,得到特征映射,提取不同卷积核的特征映射集矩阵C;
[0012] S7.在k‑max池化中,对矩阵C进行最大合并操作,提取最重要的k个特征值,得到隐藏层的特征向量Z;
[0013] S8.固定大小的向量Z形成全连接层,在全连接层中,对向量Z进行操作得到输出特征y;并使用softmax函数处理输出特征y,把多类输出值转化为相对概率,获得相对概率分
布p;
[0014] S9.针对所获得的概率分布p和标签概率分布计算交叉熵损失函数Lk;
[0015] S10.根据计算出的交叉熵损失函数Lk,估计模型预测值与真实值的差异,并使用梯度下降法进行优化,获得最佳的Android程序检测模型;
[0016] S11.基于输出计算和最小化损失函数,迭代地更新模型参数并优化所提出的Android程序检测模型。
[0017] 进一步的,所述步骤S3中,用独热向量表示的操作码序列中,每个操作码对应256个位置中的一个位置,出现过的操作码表示为1,没有出现的表示为0。
[0018] 进一步的,所述步骤S7中,k为3或5。
[0019] 进一步的,所述步骤S8中,在全连接层中对向量Z进行操作,计算前一层权重的总和值,获得每个元素的准确结合,得到输出特征y;softmax函数用处理分类器的方式处理输
出特征y。
[0020] 进一步的,所述步骤S10中,在损失函数最小化时,用梯度下降优化法逐步调整最小化损失函数和相应模型的参数值,获得最佳的Android程序检测模型。
[0021] 采用上述技术方案所产生的有益效果在于:
[0022] 本发明采用卷积神经网络实现了有效的安卓软件静态特征提取,采用静态分析工具从安卓软件的apk文件中提取操作码序列,比现有方法更加完整和高效;本发明利用k‑
max池化策略,实现了对操作码相对位置信息的采集,所采用的k‑max池化可以在所有特征
值中取最好的k个并保留这些特征值的原始阶数,消除了弱信息的特征,保留了重要特征,
还反映了特征的相对位置信息,本发明将可变长度序列组织成固定长度输入并减少了模型
参数的数量,有利于减少模型的过度拟合问题。本发明使用交叉熵损失训练分类模型,这比
使用均方误差能更好地评估神经网络的质量。

附图说明

[0023] 图1是本发明分析方法的流程图;
[0024] 图2是本发明apk预处理工作流程图;
[0025] 图3是本发明所提出的检测系统流程示意图;
[0026] 图4是本发明卷积神经网络输入的生成图;
[0027] 图5是本发明k‑max(k=2)池化的示例。

具体实施方式

[0028] 下面结合附图和具体实施方式对本发明作进一步详细的说明。
[0029] 如图1所示,本发明公开了一种基于卷积神经网络的恶意软件操作码分析方法,包括以下步骤:
[0030] S1.获取训练样本;所述训练样本为已知类型的软件的执行程序,所述类型包括良性和恶意;
[0031] S2.使用apktool对所述训练样本进行反编译处理,得到所述训练样本的smali文件,并从smali文件中获取Dalvik字节码,并丢弃操作数;apk预处理过程如图2所示。
[0032] S3.根据Android操作码常量列表获取操作码序列文件,操作码序列向量用X={X1,X2,...,Xn}表示,其中n是apk的操作码长度,并用n×o(o=256)独热向量表示;
[0033] S4.在嵌入层中将独热向量转化为具有固定大小的向量,以提高计算效率,也让apk信息更加集中与统一。
[0034] S5.将转化后的独热向量Xi乘以随机权重矩阵We∈Ro×g(o=256,g为嵌入空间的维n×g
度),生成矩阵M∈R ,输入到卷积神经网络;卷积神经网络输入的生成如图4所示。
[0035] S6.在卷积层中使用卷积核对矩阵M进行卷积处理,得到特征映射,提取不同卷积核的特征映射集矩阵C;
[0036] 卷积核的特定卷积操作定义如下:
[0037] Cj=f1(Conv(M,wj)+bj)
[0038] 其中bj和wj是第j个卷积核的相应偏差参数和权重参数,f1为相应的RELU激活函数,j个卷积核对n‑h+1窗口执行完整的卷积运算,提取的不同卷积核的特征映射归纳如下:
[0039] C=[c1|c2…|cp]T
[0040] S7.如图5所示,在k‑max池化中,对矩阵C进行最大合并操作,提取最重要的k个特征值,得到隐藏层的特征向量Z,它们被描述为:
[0041]
[0042] S8.固定大小的向量Z形成全连接层,在全连接层中,对向量Z进行操作得到输出特征y;这会减少模型的负担,也能防止模型被过度使用。使用softmax函数处理输出特征y,把
多类输出值转化为相对概率,获得相对概率分布p;
[0043] 输出y的操作如下:
[0044] y=f2(Wf·z)+b′
[0045] 其中Wf和b′是全连接层的权重矩阵和偏差,函数f2是RELU激活函数。
[0046] softmax函数的公式定义如下:
[0047] p(l=i|y)=expyi/∑yi
[0048] 其中yi是全连接层的第i个神经元的输出,l是数据样本的标签,表示数据样本是恶意样本或良性样本。
[0049] S9.针对所获得的概率分布p和标签概率分布计算交叉熵损失函数Lk;本发明使用交叉熵损失函数,比使用均方误差能够更好的评估神经网络的质量。
[0050] 损失函数Lk的定义如下:
[0051]
[0052] 其中Lk表示通过输入第k个样本计算的损失函数,p(l=i|y)是softmax函数输出向量的第i个值,表示样本属于第i类的概率。标签li前面有一个求和符号,范围是从1到T类
的数量。T=2表示全连接层的输出数。
[0053] L表示一批b个数据样本的损失函数的平均值,它可以解释为预测值与通过构建模型获得的真实值之间的差异,定义如下:
[0054]
[0055] S10.根据计算出的交叉熵损失函数Lk,估计模型预测值与真实值的差异,并使用梯度下降法进行优化,获得最佳的Android程序检测模型;
[0056] S11.基于输出计算和最小化损失函数,迭代地更新模型参数并优化所提出的Android程序检测模型;
[0057] S12.模型训练完,输入新的测试集测试模型。
[0058] 其中的步骤S3中,用独热向量表示的操作码序列中,每个操作码对应256个位置中的一个位置,出现过的操作码表示为1,没有出现的表示为0。
[0059] 其中的步骤S7中,k为3或5。k为3或5时,效果最佳,这样消除了弱信息的特征,保留了重要的特征,减少了模型的过拟合问题。
[0060] 其中的步骤S8中,在全连接层中对向量Z进行操作,计算前一层权重的总和值,获得每个元素的准确结合,得到输出特征y;softmax函数用处理分类器的方式处理输出特征
y。
[0061] 其中的步骤S10中,在损失函数最小化时,用梯度下降优化法逐步调整最小化损失函数和相应模型的参数值,获得最佳的Android程序检测模型。
[0062] 本发明分析方法采用Python实现,主要使用的实验平台有:pandas,sklearn,matplotlib,numpy。系统开发环境是64位Ubuntu 17.10。提出的神经网络检测模型是使用
Tensorflow和Torch框架环境开发,使用Tesla K80 GPU进行检测方法的实验和培训。
[0063] 本发明采用卷积神经网络实现了有效的安卓软件静态特征提取,采用静态分析工具从安卓软件的apk文件中提取操作码序列;在卷积层利用k‑max池化策略,实现了对操作
码相对位置信息的采集,而将可变长度序列组织成固定长度输入并减少了模型参数的数
量,有利于减少模型的过度拟合问题。最后使用交叉熵损失训练分类模型,更好地评估神经
网络的质量。通过在不同数据集上的实验,与其它方法相比,本发明无论是准确度还是精确
度还是其他指标都具有一定的优势,且在不同数据集上表现效果良好。
[0064] 以上所述的实施例仅仅是对本发明的优选实施方式进行描述,并非对本发明的范围进行限定,在不脱离本发明设计精神的前提下,本领域普通技术人员对本发明的技术方
案做出的各种变形和改进,均应落入本发明权利要求书确定的保护范围内。