论文部分内容阅读
安卓系统使用量的增长使得各种新型恶意代码不断出现,这些恶意代码通常在未经用户允许的情况下运行在用户终端的后台。编写人员利用这些恶意代码来窃取私人信息或投放广告,严重的侵犯了用户合法权益。越来越多的研究人员开始投身于基于安卓平台的恶意代码检测领域,并且把发现的恶意代码公布在互联网公共平台,起到了监督的作用。检测恶意代码的方法主要分为静态检测和动态检测。静态检测主要是分析源代码的结构和配置文件的信息等静态特征,然后再与公共平台上已经公布的恶意代码进行匹配,如果匹配度极高则判断为是恶意的。静态检测方法是非常准确的,这种方法不执行应用程序,能够达到快速的分类,但是不能检测到未知的的新型恶意代码;动态检测主要是在源代码中加入设计好的代码段,通常是放在接口的入口或出口,通过重新编译后再执行来跟踪应用的行为。根据程序是否输出信息来查看接口是否被调用,而且还可以利用程序的顺序执行来分析程序的调用序列,然后判断其逻辑,看是否有越权和调用一些与本身应用功能无关的接口等操作。但是也存在着缺点:首先,手动插入代码工作量较大,需要对源代码非常熟悉并且难以模拟恶意代码被激活的真实环境。其次,安卓系统更新较快,不同的版本需要插入代码段的时间和位置也就不一样,这样就增加了动态分析的复杂性。最近,分类算法被成功地用于检测恶意代码,其中提取特征的重要性决定了分类结果的好坏。本论文面向基于安卓平台的恶意代码检测,提出了一种基于安卓虚拟机(Dalvik)指令操作符(OpCode)特征的分类算法的检测模型。同时也改进了自然语言处理领域中的N元模型(N-Gram),使用N个OpCode组成一个词语来表示特征,并且利用国内开源的并行深度学习框架(Paddle)进行特征训练,加快了特征训练的速度,不但节省了时间,而且提高了准确率。本文主要工作内容具体如下:(1)通过编写脚本批量反编译安卓应用,汇总每个应用的Dalvik指令,提取其中的OpCode,然后对安卓应用的OpCode进行分类和描述,同时改进N-Gram模型,为了获得一个比较好的N值,分别设置N=1,2,3,4,5,6,通过实验对比来选择最合适的N值,从而为后面的实验做好铺垫。(2)用OpCode序列的词频(TF)和词频逆文档频率(TF-IDF)分别作为特征的值来进行实验,从而选择一种较好的特征表示方法。本论文通过实验证明两者表示效果差别很小,最终选择TF方法,因为随着训练集合的扩大TF-IDF会带来额外的运算。(3)分别选择决策树、随机森林和神经网络作为检测模型的分类器,并且在实现算法的过程中对其进行改进。决策树:用信息增益比作为决策树的特征选择方法,并且将已生成的树进行简化,防止出现过拟合现象;随机森林:实现多个决策树,通过多轮实验的对比设置决策树的个数以及随机森林中各个决策树的高度;神经网络:基于Paddle框架,实现自动编码器(AutoEncode)来对特征进行重构,用尽可能少的信息来表示OpCode特征,建立多层网络,加快了模型训练的速度。最后结合三种分类器对于测试集合的判定结果,选取一个训练较好的模型来作为预测未知恶意代码的最终模型。