1.一种基于AndroGRU的安卓恶意软件静态检测方法,其特征在于,其步骤为:
1)使用Androguard逆向工具对安卓APK文件进行反编译,解析AndroidManifest.xml并提取安卓应用程序用到的Intents特征;
2)采用androcg.py来生成函数调用图并从中提取敏感函数调用序列;
3)模型训练模块负责基于提取的静态特征对AndroGRU模型进行训练,检测模块通过训练好的AndroGRU模型对未知的安卓APK样本进行检测。
2.根据权利要求1所述的一种基于AndroGRU的安卓恶意软件静态检测方法,其特征在于,所述的步骤2)中具体方法为:
2.1)对函数调用图进行预处理,通过Androguard逆向工具对函数调用图进行过滤,将函数调用图简化,使其仅包含敏感函数调用;
2.2)对敏感函数调用图进行遍历,从图中提取敏感函数调用序列,将提取的敏感函数调用序列作为训练数据。
3.根据权利要求1所述的一种基于AndroGRU的安卓恶意软件静态检测方法,其特征在于,所述的步骤3)中,AndroGRU模型为:将文本相似性原理与GRU结构进行结合,通过分析GRU结构的门限机制从而对其内部结构进行改进,提出的一种基于GRU的安卓恶意软件检测模型。
4.根据权利要求1所述的一种基于AndroGRU的安卓恶意软件静态检测方法,其特征在于,所述的步骤3)中,
3.1)基于输入数据的相似度计算:
GRU的输入数据xt是对原始数据的向量化表示,对相邻两个GRU单元的输入数据进行相似度计算,可以得到一个相似度:s=sim(xt-1,xt);通过该相似度可以得到xt-1和xt之间的差异信息:Δx=(1-s)xt-1;将对输入数据进行相似度计算的GRU结构命名为InputGRU;
将相邻两个GRU单元的输入数据之间的差异信息和当前的输入数据一起输入到重置门和更新门中,由它们来控制信息的传递过程,并从中学习到更多的抽象信息:zt=σ(Wzxt+UΔx(1-sim(xt-1,xt))xt-1+Uzht-1+bz) (3)rt=σ(Wrxt+UΔx(1-sim(xt-1,xt))xt-1+Urht-1+br) (4)对于候选状态 选择将输入数据xt作为输入,保留当前时间步的输入信息:隐藏状态ht是从输入数据和隐藏状态中学习到的信息;在t时间步,InputGRU的隐藏状态ht的计算公式如下:
5.根据权利要求4所述的一种基于AndroGRU的安卓恶意软件静态检测方法,其特征在于,所述的步骤3)中,
3.2)基于隐藏状态的相似度计算:
在第t时间步,GRU输入的隐藏状态ht-1包含前t-1个时间步的输入数据的所有信息;在t-1时间步,GRU输入的隐藏状态ht-2包含前t-2个时间步的输入数据的所有信息;类似于基于输入数据的相似度计算,对ht-1和ht-2进行了相似度计算:s=sim(ht-2,ht-1),二者的差异信息为:Δh=(1-s)ht-2;将对隐藏状态进行相似度计算的GRU结构命名为HiddenGRU;
对当前时间步t的前两个GRU单元输出的隐藏状态ht-2、ht-1进行相似度计算得到二者的差异信息,将该差异信息以及当前输入的隐藏状态ht-1输入到重置门和更新门中:rt=σ(Wrxt+Urht-1+UΔh(1-sim(ht-2,ht-1))ht-2+br) (7)zt=σ(Wzxt+Uzht-1+UΔh(1-sim(ht-2,ht-1))ht-2+bz) (8)对于候选状态 和隐藏状态ht,二者的计算公式和InputGRU结构中的计算公式相同。
6.根据权利要求5所述的一种基于AndroGRU的安卓恶意软件静态检测方法,其特征在于,所述的步骤3)中,
3.3)基于输入数据和隐藏状态的相似度计算
在GRU结构中同时对输入数据和隐藏状态进行相似度计算,这样能够从数据中学习到更多的抽象信息;在GRU结构内同时对输入数据和隐藏状态进行相似度计算,将该GRU结构命名为InputHiddenGRU;
rt=σ(Wrxt+UΔx(1-sim(xt-1,xt))xt-1+Urht-1+UΔh(1-sim(ht-2,ht-1))ht-2+br) (9)zt=σ(Wzxt+UΔx(1-sim(xt-1,xt))xt-1+Uzht-1+UΔh(1-sim(ht-2,ht-1))ht-2+bz) (10)。
7.根据权利要求6所述的一种基于AndroGRU的安卓恶意软件静态检测方法,其特征在于:对于3.1)-3.3)中三种不同的GRU结构,可以采用如下公式来进行抽象表示:NewGRU=i*InputGRU+j*HiddenGRU,{i,j}∈{0,1} (11)NewGRU表示一个GRU结构的抽象定义;
因为i和j的取值只能在{0,1}之间,所以,上述公式可以表示如下4种不同的GRU结构:当i=0且j=0时,该结构将会退化为原生的GRU结构;
当i=1且j=0时,该结构为InputGRU结构,只对输入数据进行相似度计算;
当i=0且j=1时,该结构为HiddenGRU结构,只对隐藏状态进行相似度计算;
当i=1且j=1时,该结构为InputHiddenGRU结构,在GRU结构内部同时对输入数据和隐藏状态进行相似度计算。