一种Android应用中恶意行为的动态检测方法

文档序号:8512711阅读:326来源:国知局
一种Android应用中恶意行为的动态检测方法
【技术领域】
[0001]本发明涉及一种针对终端操作系统的恶意软件的检测方法,属于移动互联网技术领域。
【背景技术】
[0002]近年来,伴随着移动互联网的飞速发展,具有移动操作系统的智能手机已经成为了目前移动终端发展的主流。智能手机不再是传统意义上的通信工具,而更像是掌上电脑,具有了自己独立的操作系统。在这其中,基于Linux内核的Android移动终端操作系统发展最为迅速。
[0003]Android系统最为显著的特性就是其开源性,任何用户都可以在不用越狱的情况下,在第三方软件市场中方便地下载并安装各种各样的软件应用,这其中,不乏存在许多恶意软件。这些恶意软件把用户的智能终端作为潜在的攻击目标,给用户带来许多损失。比如通过发送短信和拨打电话的形式产生恶意扣费;在应用中产生不必要的HTTP请求;在用户不知情的情况下安装了另外的软件等等。因此,如何检测出这些隐藏在Android应用中的恶意代码成为近些年来众多国内外研宄学者研宄的热点。
[0004]对于Android应用中恶意代码的检测,国内外研宄学者主要采取以下2种方法,第一种方法是基于签名(signature-based)的检测方法,这种方法通过文件是否拥有已知恶意软件的特征签名(如:一段特殊代码或字符串)来判断其是否为恶意软件。第二种方法是基于行为(behav1r-based)的检测方法,根据检测时机的不同,基于行为的检测方法可以分为动态(dynamic)和静态(static)两种。动态行为检测在程序运行的过程中执行,静态行为检测在程序执行之前进行。由于混淆和加密的方法不能够改变程序的行为模式,因此动态检测有效地防止此类攻击。
[0005]动态行为检测,是在程序运行的过程中执行的,与静态检测相比,由于在程序运行时执行,动态检测对实时性要求较高,必须确保在恶意程序对系统产生损害前检测出威胁,这将带来更大的能耗。但是,由于混淆和加密的方法不能够改变程序的行为模式,因此动态检测有效地防止此类攻击,这是静态分析所不能达到的。现有的动态行为检测方法主要是通过系统记录的日志和网络数据包日志来记录程序行为。该类方法存在如下缺陷:一方面,记录这些日志将消耗系统大量的资源,并且这些日志中包含了太多无用的信息。另一方面,动态执行只是运行了程序中的某几条路径,不能保证对所有敏感行为的覆盖。

【发明内容】

[0006]本发明的目的是为了解决上述Android应用中恶意软件的动态检测问题,并且能增加程序运行的覆盖率,以提高动态分析结果的准确性。为了解决上述问题,本发明提供了一种Android应用中恶意行为的动态检测方法,对Android应用程序进行检测,检测出Android应用软件中的恶意代码以及隐蔽的恶意行为,为Android用户避免不必要的损失,保护Android用户不受恶意软件的伤害。
[0007]本发明具体包括如下步骤:
[0008]1、将Android应用程序的APK包转换成为相应的Java代码:
[0009]获取需要分析的Android应用程序的APK文件并对其进行反编译,获得反编译后的Java代码,之后将获取的Java代码放入转换器,将其转换为中间表示形式,以便后面的插粧工作;
[0010]2、对Android应用中的Java代码进行插粧操作:
[0011]在需要提取信息的地方进行代码插粧,并将插粧完成的代码再放入编译器编译,形成新的APK文件;同时通过代码分析工具强制执行所有条件语句,用以扩大代码的覆盖率;O
[0012]3、运行上个步骤形成的新的APK文件,将因插粧获取的信息保存进数据库中,并提取需要的信息,再利用Java代码分析工具Soot工具产生该Android应用程序对应的调用流图(call graph)及其控制流图(control flow graph);对于数据库中的日志信息(含上述已提取信息的调用流图及控制流图)进行分析,通过分析其与用户行为是否匹配,来判断其是否属于恶意行为。
[0013]4、对于恶意行为进行进一步分析,分析其属于哪一类恶意行为。
[0014]进一步,使用soot工具对获取的java代码进行插粧的步骤具体为:
[0015]步骤2.1在eclipse中加入soot软件包;
[0016]步骤2.2将所获取的java代码通过soot工具转化为Jimple中间语言,方便之后的操作;
[0017]步骤2.3编写soot程序对获取的java程序进行插粧操作;
[0018]步骤2.3.1编写soot程序,遍历获取java包中的每一个类;
[0019]步骤2.3.2编写soot程序,遍历每一个类中的所有方法;
[0020]步骤2.3.3对于上述方法中的赋值语句,根据其中间表示方法格式的不同,插粧相应的代码;
[0021 ] 步骤2.3.4对于上述方法中的条件语句,根据其中间表示方法格式的不同,插粧相应的代码,并强制执行每个条件;
[0022]步骤2.3.5对于上述方法中的循环语句,根据其中间表示方法格式的不同,插粧相应的代码。
[0023]进一步,步骤3中分析数据库日志信息的过程具体为:
[0024]步骤3.1运行编写后的soot代码;
[0025]步骤3.2获取插粧后soot软件输出的信息;
[0026]步骤3.3通过插粧后获取的信息,使用soot软件,绘制出原java程序的调用关系图;
[0027]步骤3.4通过插粧后获取的信息,使用soot软件,绘制出原java程序的控制流图;
[0028]步骤3.5通过程序的调用关系图以及控制流图,与用户行为意图进行比较,以分析该程序是否存在恶意行为;
[0029]步骤3.6对于存在恶意行为的程序,分析出其包含恶意行为的程序段的位置。
[0030]进一步,步骤4对于存在的恶意行为进行进一步分析的过程具体为:
[0031]步骤4.1获取分析后定位得到的恶意行为的程序段;
[0032]步骤4.2通过调用关系图以及控制流图,找到与该程序段相关的语句;
[0033]步骤4.3将这些语句以谓词逻辑的形式表示为相对应的逻辑表达式;
[0034]步骤4.4将这些逻辑表达式放入求解器中求解,是否能得到以程序恶意行为所在程序段为结果的解的模型,若有解,则代表程序有路径可以运行到这一段代码。
[0035]进一步,对于插粧位置的选择,主要有发送短信或者有Http链接请求或者调用危险API的地方。
[0036]进一步,步骤I中将Android应用程序的APK包转换成为相应的Java代码的过程具体如下:
[0037]步骤1.1下载所需要分析Android应用的APK文件;
[0038]步骤1.2将APK文件后缀改为zip并解压,得到其中的classes, dex ;
[0039]步骤1.3 将 classes, dex 复制到 dex2 jar.bat 所在目录;
[0040]步骤1.4在命令行下定位到dex2jar.bat所在目录,运行dex2jar.bat classes,dex,生成 classes_dex2 jar.jar ;
[0041]步骤1.5进入jdgui文件夹中的jd-gu1.exe,打开上面生成的jar包classes_dex2jar.jar,查看源代码。
[0042]本发明通过使用动态检测的方法来进行恶意代码的检测,可以更有效地探测到App中的隐蔽行为;并根据目标行为与用户行为意图是否具有一致性来区分恶意行为以及良性行为;使用工具对于条件判断语句强制执行,尽量扩大语句的覆盖率;使用Soot工具对获取的代码进行插粧,分析等一系列操作,方便快捷;使用数理逻辑内容,获取程序运行到恶意行为段代码的模型,方便之后的测试等相关操作。本发明方法能够克服Android应用中恶意软件的动态检测覆盖率低的缺陷,有效提高了动态分析结果的准确性。
【附图说明】
[0043]图1是本发明方法的总流程图。
[0044]图2是本发明方法的将Android应用程序反编译为java代码流程图。
[0045]图3是本发明方法的编写soot插粧程序流程图。
【具体实施方式】
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1