技术领域
[0001] 本
发明涉及一种基于程序流程图的Android
恶意软件检测方法,属于移动平台恶意软件检测等技术领域。
背景技术
[0002] 随着移动互联网的快速发展,智能移动终端已经成为人们生活和工作中必不可少的工具。目前,Android已经成为移动终端的主流
操作系统。移动互联网规模的发展与Android市场份额的增长相互促进,共同改变着人们的移动生活。但是伴随着移动互联网和Android的高速发展,各种各样的恶意软件也层出不穷,这严重损害了移动终端用户的切身利益以及Android应用市场的良性发展。因此,对于Android平台恶意软件的研究与检测具有重要的理论价值和现实意义。在恶意软件静态检测领域,传统的利用文件签名方案实现恶意软件检测的技术,可以有效地检测出已知的恶意样本。但是这种方案很难防范恶意软件的变种以及具有同种恶意行为的不同样本程序。例如,对恶意程序
修改部分代码之后,基于文件签名的方案就很难生效。针对这种情况,一种新的基于程序流程图的恶意软件检测方法可以很好地解决这个问题。
发明内容
[0003] 发明目的:针对目前Android市场的恶意软件和现有的基于文件签名的方案存在的不足,本发明提出了一种基于程序流程图的Android恶意软件检测方法。本发明首先需要从恶意样本中提炼出代表其恶意行为的特征图,然后对于待检测的样本程序,需要生成Android应用程序中每个类的流程图,并通过子图同构的理论来实现恶意软件的检测。
[0004] 技术方案:一种基于程序流程图的Android恶意软件检测方法,包括如下步骤:
[0005] 1)建立恶意行为特征库;
[0006] 2)检测APK应用程序,包括:
[0007] a,对于待检测的APK应用程序提取其dex代码文件并对其反编译生成smali文件;
[0008] b,利用深度优先遍历
算法遍历每个smali文件,对于每一个smali文件根据词法特征得到代码的基本
块,并生成每个smali文件的程序流程图;
[0009] c,在步骤b中生成的流程图中,删除不含invoke指令的结点,并连接剩余的结点,得到新的只包含API调用关系的程序流程图;
[0010] d,对于步骤c中生成的新的只包含API调用关系的程序流程图,利用子图同构理论与步骤1)中建立的恶意行为特征库中的每条恶意行为记录进行匹配,若匹配成功,则检测为恶意样本。
[0011] 所述步骤1)中恶意行为特征库包含每种恶意行为的一条记录,每条记录由Android(Java)的API函数的全路径哈希编码以及其连接关系组成;
[0012] 所述步骤c还包括,在步骤b得到的程序流程图中标记不同的不包含invoke指令的结点组成的环,最后删除不同的不包含invoke指令的结点组成的环,并重新连接程序流程图。
[0013] 有益效果:基于程序流程图的Android恶意软件检测方法建立了一种新的病毒特征库中恶意行为记录的定义方式。随着恶意软件变种的流行,以及一些新的恶意软件的出现,采用签名方案需要生成每个样本的恶意代码签名,并将其存入特征库中,这必然会导致特征库的急剧增大。对于恶意软件的变种以及有相同恶意行为的样本,本发明只需要定义一条记录描述这种恶意行为即可。因此,相对于传统的签名方案,本发明提出的行为特征库可以大大减小特征库的大小。相对于传统的利用文件签名方案进行恶意软件检测的系统,本发明可以有效识别出恶意软件的变种,并能有效抵抗恶意代码篡改等签名方案无法检测的病毒类型。
附图说明
[0014] 图1为本发明的流程图;
[0015] 图2为本发明中控制流程图的生成规则;
[0016] 图3为本发明删除流程图中不同的不包含invoke结点的环;
[0017] 图4为本发明提取的zsone的恶意行为特征;
[0018] 图5为本发明提取的恶意子图的邻接矩阵表示。
具体实施方式
[0019] 下面结合具体
实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本
申请所附
权利要求所限定的范围。
[0020] 一种基于程序流程图的Android恶意软件检测方法,其具体实施流程图如图1所示。下面结合zsone恶意软件介绍本发明的实施步骤:
[0021] 1)恶意行为特征库的建立
[0022] 步骤1、提取该APK(SHA1:9458cfb51c90130938abcef7173c3f6d44a02720)应用程序的dex代码文件;
[0023] 步骤2、对于步骤1提取的dex文件利用反编译工具dex2jar生成dex的jar文件,并用jd-gui打开。人工分析其恶意行为并确定恶意代码所在的类文件为com\mj\utils\MJReceiver.class;
[0024] 步骤3、利用baksmali反编译dex生成smali格式的文件。对于反编译出的smali格式的恶意类MJReceiver.smali,根据其词法特征得到代码的基本块,并生成MJReceiver.smali的流程图,其中每个基本块是流程图中的一个结点;
[0025] 步骤4、在步骤3中生成的流程图中,根据以下三条规则删除流程图中不含invoke指令的结点,并连接剩余结点得到新的流程图,具体过程如图2所示;
[0026] (1)若某基本块包含invoke指令,且invoke的API全路径是Android(Java)里的路径,则此基本块中只保留该invoke的API全路径;
[0027] (2)若某基本块中invoke的API全路径不是Android(Java)里的路径,则检查此类的的父类,得到Android(Java)里的全路径。最后连接剩余的结点,得到新的流程图。
[0028] (3)若某基本块中不包含invoke指令,则删除此基本块,此过程中需要标记并删除不同的不包含invoke的结点组成的环,如图3所示;
[0029] 步骤5、对于步骤4生成的流程图中,提取产生恶意行为的关键Android(Java)的API组成的子图,并对这些API进行全路径哈希编码。其中API的编码算法采用FNV-1
哈希算法。例如Android里取消广播消息abortBroadcast的全路径为android/content/BroadcastReceiver;->abortBroadcast(),采用FNV-1编码,则其编码值为8B19210F。对于zsone恶意软件,本发明提取的恶意软子图如图4所示,其中的API全路径进行编码如表1所示。
[0030] 表1
[0031]API全路径 FNV-1
android/telephony/gsm/SmsMessage;->createFromPdu() CBC6E174
android/telephony/gsm/SmsMessage;->getDisplayOriginatingAddress() 94642FEEjava/lang/String;->equals() D1562846
android/content/BroadcastReceiver;->abortBroadcast() 8B19210F
[0032] 步骤6、对于步骤5得到的每个API的编码值,其连接关系采用
有向图的邻接矩阵表示,进一步,我们可以将矩阵的每一行连接起来构成一个字符串,称为图指纹,如图5所示。将API全路径哈希编码值与其连接关系组成的图指纹作为一条恶意行为特征存入恶意行为特征库中。
[0033] 例如得到的zsone恶意行为特征为:
[0034] CBC6E17494642FEED15628468B19210F:0100001011011100
[0035] 2)应用程序的检测过程
[0036] 步骤7、采用步骤1提取dex文件,采用步骤2反编译dex文件得到所有的smali类文件;
[0037] 步骤8、利用深度优先遍历算法遍历每个smali文件,并采用步骤3、4的过程生成每个smali文件的流程图;
[0038] 步骤9、对于步骤8中生成的流程图,利用子图同构理论与建立的行为特征库中的每条记录进行匹配,若匹配成功,则检测出恶意样本。