CN106055479B - 一种基于强制执行的Android应用软件测试方法 - Google Patents

一种基于强制执行的Android应用软件测试方法 Download PDF

Info

Publication number
CN106055479B
CN106055479B CN201610382056.7A CN201610382056A CN106055479B CN 106055479 B CN106055479 B CN 106055479B CN 201610382056 A CN201610382056 A CN 201610382056A CN 106055479 B CN106055479 B CN 106055479B
Authority
CN
China
Prior art keywords
application
code
execution
function
android
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN201610382056.7A
Other languages
English (en)
Other versions
CN106055479A (zh
Inventor
王蕊
林子敏
张道娟
操晓春
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Information Engineering of CAS
Original Assignee
Institute of Information Engineering of CAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Institute of Information Engineering of CAS filed Critical Institute of Information Engineering of CAS
Priority to CN201610382056.7A priority Critical patent/CN106055479B/zh
Publication of CN106055479A publication Critical patent/CN106055479A/zh
Application granted granted Critical
Publication of CN106055479B publication Critical patent/CN106055479B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明涉及一种基于强制执行的Android应用软件测试方法。该方法通过结合静态和动态分析方法克服当前Android应用测试过程中存在的不足。首先基于静态方法确定关键行为相关的执行路径;然后通过控制应用的执行过程,限制应用的执行过程,并且首次采用异常容忍的执行沙盒对Android应用执行过程中的异常进行容忍,保证关键行为一定被触发。因此,该方法能够提取一些静态方法无法提取的执行参数信息,同时也能克服动态方法无法有效触发应用行为的问题。通过对多种恶意软件样本进行分析,本发明的方法能够以高概率的对它们的执行参数如URL等信息进行提取。

Description

一种基于强制执行的Android应用软件测试方法
技术领域
本发明属于信息技术领域,具体涉及一种基于强制执行技术对Android应用软件进行测试的方法。
背景技术
当前,Android操作系统占据了80%以上的移动手机操作系统市场份额。巨大的经济利益促进了整个Android生态圈的发展。仅Google Play就有超过百万级应用。如此大量的应用,其中一些不乏存在相应的安全问题。特别是,Android不仅有Google官方的应用市场,还存在许多第三方的应用平台。不同厂商的管理、技术能力参差不齐,使得Android应用软件中存在的问题(如恶意软件、安全漏洞)更加严重。针对这些问题,研究相应的分析和测试技术是当前的一大热点。
当前关于Android应用的分析技术中,主要包括两类:静态分析方法和动态分析方法。静态分析方法直接对Android应用软件的原文件、反汇编代码、资源文件(如图片、配置)等进行分析,提取其中的特征或者定义模型对软件进行检测。一个典型的例子是针对恶意软件,静态分析方法可以从二进制文件中提取特征对其他怀疑的应用进行检测。这些可提取的特征多种多样,比如字符指纹、代码中使用的关键API、数据流等。一个静态方法主要的问题是提取的特征往往容易被改变,或者能够提取的仅仅是一些较为明显的行为特征。在一些复杂的情况下,静态方法能够提取到恶意软件行为特征与正常软件的特征是非常相似的,难以用于区分。比如正常软件和恶意软件都需要搜集终端系统的数据发送到服务器。区别恶意软件和正常软件的因素可能是数据最终被发送给了谁,根据服务器地址才能判断是否是恶意软件。而服务器的URL地址是一个字符串,很容易对它进行改变,比如加密。用静态方法对加密的字符进行解密是非常困难的。
直观的,只要执行Android应用,他们的行为和执行参数(如服务器URL)都能被提取。但是Android应用动态分析一个主要的困难在于如何自动有效的触发它的行为。当前主要的一些自动方法主要采用模糊测试技术动态执行Android应用软件。但是,模糊测试主要产生随机事件流触发Android应用的行为。如果恶意软件将它的行为隐藏起来,比如需要用户先登录后,才能触发。这样,模糊测试方法几乎无法生成如此复杂的输入,无法自动的触发恶意行为。
综上所述,提取单一的静态特征不足以对复杂的Android应用软件进行检测,同时也需要动态特征帮助检测。而当前的动态Android应用分析方法,主要采用手工方法或者随机的模糊测试执行软件,缺乏自动的且有针对性的测试方法。
发明内容
本发明的目的在于提供一种自动的且有效的Android应用测试方法,针对性的提取Android应用软件的重要执行参数,如加密的URL,这些执行参数可以用于软件的进一步检测,如进行威胁评估。
本方法的主要内容是:结合静态和动态Android应用软件分析方法,设计自动测试方法提取Android应用软件的重要执行参数,克服传统自动动态方法无法触发隐藏行为的问题。首先,本发明的方法基于静态分析技术选择一些通向部分关键函数调用的代码路径。然后,通过控制Android软件的执行,使这些路径之上的代码被强制进行执行,从而提取相关的重要参数。
本发明的一种基于强制执行的Android应用软件测试方法,其具体步骤如下:
1)应用软件代码转换:为了便于分析,Android应用软件代码首先被转化为中间代码语言。
2)应用代码图构造:基于静态分析技术,分析Android应用代码中的函数调用关系,构建函数调用图(Function Call Graph,FCG)。进一步,对Android应用代码中每个函数构造控制流程图(Control Flow Graph,CFG)。
3)执行路径选择:在FCG和CFG中,针对关键的函数调用行为,利用搜索算法搜索所有可能到达关键函数的执行路径。
4)应用执行控制:修改步骤3)选择的每条执行路径中的控制流条件,确保应用软件执行过程必然沿着选择的路径进行。
5)异常容忍的动态执行:当应用的执行过程被控制和一些执行条件被修改,在运行过程中,必然会存在许多的执行异常。如果这些异常不被处理,应用软件将立即停止执行。为了保证选定路径的代码能够执行完,Android执行环境的异常处理逻辑被修改,即使出现错误,也继续从下一条指令进行执行。
6)执行参数搜集:在应用执行过程中,对需要的参数进行搜集,用于进一步分析。
进一步地,步骤1)通常需要对Android软件的代码进行反编译,转换为更容易理解的中间语言,如Jimple格式、Smali格式的代码语言。
进一步地,步骤2)所述的函数调用图为:FCG中每个点代码一个函数,每条边代表函数之间的调用关系。一旦FCG被建立,函数之间的调用关系被描述。
进一步地,步骤2)所述的控制流程图为:CFG中,每个点代表一个连续代码块,每条边代表可能的分支执行路径关系,比如if、switch等控制指令导致的分支。
进一步地,步骤3)所述的执行路径选择的过程为:首先,根据一些选定的关键函数,通过搜索FCG上的路径,选出所有可能达到这些关键函数的调用序列;然后,针对每一条调用序列中函数的CFG,搜索所有触发关键函数相关的控制流条件,然后得到相应的路径。需要确保这些路径是无环的。
进一步地,步骤4)中应用执行控制的过程为:修改Android软件的入口函数,运行时直接调转到步骤3)选择的执行路径。然后,修改路径上所有的执行流条件,保证关键函数最终必然会被调用。这一过程可以采用代码插装技术完成。这样,每一条路径将产生一个新的应用。
进一步地,步骤5)中异常容忍的动态执行为:针对Java代码,通过修改Android源码,对Dalvik虚拟机执行环境中的异常处理过程进行修改,即使出现异常,也对其进行容忍,直接从下一条指令开始执行。针对C/C++代码,可以基于虚拟化技术利用类似的方法容忍异常或错误。
进一步地,步骤6)中执行参数搜集过程为:根据不同的需要搜集的执行参数,在应用软件被执行时,对数据进行输出。比如针对服务器的URL数据,可以对所有的字符串数据进行输出,进一步进行区分。
本发明还提供一种采用上述方法的实现了基于强制执行的Android应用软件测试系统,其包括:
应用软件代码转换模块:为了分析Android应用,该模块首先将Android应用的Java代码转换为中间代码格式;
静态代码分析模块:通过Soot构建应用代码的函数调用图和控制流程图,进一步基于这些图,利用深度优先搜索算法搜索可能到达关键函数的路径;
代码插装模块:根据静态分析过程搜索的路径,采用代码插装技术,修改Android应用执行过程中的控制流条件,生成新的Android应用;
异常容忍的沙盒执行模块:新生成的应用将在构造的沙盒中执行,该沙盒容忍所有执行过程中出现的异常,并提取应用程序的执行行为和参数。
本发明的优点和积极效果如下:
本发明通过结合静态和动态分析方法克服当前Android应用测试过程中存在的不足。首先,基于静态方法,关键行为相关的执行路径被确定。然后,通过控制应用的执行过程,限制应用的执行过程。并且,首次采用异常容忍的执行沙盒对Android应用执行过程中的异常进行容忍,保证关键行为一定被触发。这样,通过执行,能够提取一些静态方法无法提取的执行参数信息。同时,也克服动态方法无法有效触发应用行为的问题。通过对多种恶意软件样本进行分析,本发明的方法能够以高概率的对它们的执行参数如URL等信息进行提取。
附图说明
图1是本发明的基于强制执行的Android应用测试方法的步骤流程图。
图2是异常容忍执行沙盒处理应用异常的过程图。
具体实施方式
下面通过具体实施例和附图,对本发明做进一步说明。
图1描述了本发明整个方法的基本流程,下面基于此流程介绍具体实施的方法。
1)应用软件代码转换
为了更容易的静态分析Android应用,首先对Android应用代码进行反汇编,转换为中间语言。根据具体的分析工具,实现不同类型的代码转换。在本实施例的原型系统中,采用Java分析框架Soot将Android代码转化为Jimple中间代码和使用Apktool工具将Android代码转化为Smali代码格式。基于这些反编译的代码,进一步进行分析。
2)应用代码图构造
构造应用代码的控制流程图和函数调用图,能够对应用的执行逻辑进行分析。采用Soot分析框架,能够实现控制流和函数调用图的构造。
3)执行路径搜索
基于函数调用图,首先寻找可能触发某个关键函数的路径序列。进一步根据控制流程图,深度优先算法被用于具体的序列中函数调用触发的控制条件。这一部分,根据需要的逻辑,可以使用不同的语言实现相应的算法。该部分在原型系统中通过Java语言实现。
4)执行控制
针对一条路径,执行控制包括两部分。首先,在应用执行开始时,需要首先跳转到执行路径开始的函数。然后,在执行过程中,所有与执行路径相关的控制流条件需要被控制。这部分可以采用代码插装技术修改原始的应用代码,生成新的应用。本实施例使用Soot分析框架提供对控制流条件进行控制。并进一步基于Smali代码格式实现自己的插装过程,实现起始函数的跳转。
5)异常容忍的执行沙盒
图2是异常容忍执行沙盒具体的异常处理过程。这部分实现主要针对Android应用中Java执行代码进行,通过修改Dalvik虚拟机实现。当一个异常被抛出,整个异常处理过程包括两部分:一部分针对Android系统代码,另一部分针对目标函数的代码。对于Android系统应用代码或者系统库函数产生的异常,采用标准的异常处理方法进行处理。具体的,在函数中寻找离异常发生最近的异常catch语句,然后将Dalvik虚拟机的程序计数器设置为catch语句的代码块地址,再继续执行。如果一个异常出现在目标应用函数中,那采用异常容忍的方案对异常进行处理。在异常容忍过程中,不再寻找catch语句,而是直接将Dalvik虚拟机的程序计数器更新为异常出现位置的下一条指令。在更新指令之前,需要首先对指令中涉及的寄存器进行初始化,否则未初始化的寄存器可能造成极端错误。
以上实例针对Android应用软件中能够在Dalvik虚拟机中解释执行的Java代码,而整个强制执行方案也能应用于本地代码(native code)的测试,或者扩展到其他平台的应用软件代码测试。为了支持本地代码的强制执行,可以采用虚拟化技术模拟CPU对本地指令进行执行,容忍错误,对应用进行测试。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。

Claims (8)

1.一种基于强制执行的Android应用软件测试方法,其步骤包括:
1)采用反编译工具将Android应用代码转换为中间语言;
2)基于静态分析技术分析Android应用代码中的函数调用关系,构造函数调用图,并对每个函数中的代码执行过程构造函数控制流图;
3)在函数调用图和函数控制流图中,针对关键的函数调用行为,搜索和选择可能到达关键函数的执行路径;
4)根据步骤3)选择的每条执行路径修改应用软件中的控制流条件,确保应用必然沿着选择的路径进行执行;具体的执行流控制包括以下两部分:
4-1)修改应用入口函数,在应用开始时,首先跳转到被选择执行路径的开始函数;
4-2)修改所有与选定执行路径相关的控制流条件,保证应用按照选定的路径进行执行;
5)将执行流被控制的应用放入异常容忍的执行沙盒进行执行,即使出现异常,也继续从异常发生位置的下一条指令进行执行,保证选择的路径代码都被强制执行,保证关键行为一定被触发;
6)在应用执行过程中,对执行参数进行搜集。
2.如权利要求1所述的方法,其特征在于,步骤1)将Android应用代码转换为Jimple格式或Smali格式的代码语言。
3.如权利要求1所述的方法,其特征在于,步骤2)所述函数调用图是有向图,其中每个点代表一个函数,边代表函数之间的调用关系;所述函数控制流图代表单个函数内部的执行过程,每个点代表一个函数块,边代表可能的执行分支。
4.如权利要求1所述的方法,其特征在于,步骤3)所述执行路径的选择过程为:首先,根据一些选定的关键函数,通过搜索函数调用图上的路径,选出所有可能达到这些关键函数的调用序列;然后,针对每一条调用序列中函数的函数控制流图,搜索所有触发关键函数相关的控制流条件,然后得到相应的路径。
5.如权利要求1所述的方法,其特征在于,步骤4)根据每一条静态方法搜索出来的路径,采用代码插装技术修改被测试应用的执行流条件,生成新的应用;新生成的应用按照搜索的路径进行执行。
6.如权利要求1所述的方法,其特征在于,步骤5)构建异常容忍的执行沙盒运行生成的Android应用,确保被选择的路径上的指令能够都被执行,包括:
5-1:即使目标应用Java代码运行时发生异常,Dalvik虚拟机仍然会从当前指令的下一条指令开始执行,进行异常容忍;
5-2:异常容忍可能造成Dalvik虚拟机中的部分寄存器出现未初始化极端错误,在容忍异常时,也对寄存器进行初始化。
7.如权利要求1所述的方法,其特征在于,步骤6)针对执行过程中的行为和行为参数进行提取,用于应用程序的分析。
8.一种采用权利要求1所述方法实现的基于强制执行的Android应用软件测试系统,其特征在于,包括:
应用软件代码转换模块:将Android应用的代码转换为中间代码格式;
静态代码分析模块:构建应用代码的函数调用图和控制流程图,并利用优先搜索算法搜索可能到达关键行为的路径;
代码插装模块:根据选择的路径,采用代码插装技术,修改Android应用执行过程中的控制流条件,生成新的Android应用;
异常容忍的沙盒执行模块:用于执行Android应用,容忍所有执行过程中出现的异常,确保选中路径上代码被执行,并提取应用程序的执行行为和参数。
CN201610382056.7A 2016-06-01 2016-06-01 一种基于强制执行的Android应用软件测试方法 Expired - Fee Related CN106055479B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610382056.7A CN106055479B (zh) 2016-06-01 2016-06-01 一种基于强制执行的Android应用软件测试方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610382056.7A CN106055479B (zh) 2016-06-01 2016-06-01 一种基于强制执行的Android应用软件测试方法

Publications (2)

Publication Number Publication Date
CN106055479A CN106055479A (zh) 2016-10-26
CN106055479B true CN106055479B (zh) 2019-03-01

Family

ID=57173226

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610382056.7A Expired - Fee Related CN106055479B (zh) 2016-06-01 2016-06-01 一种基于强制执行的Android应用软件测试方法

Country Status (1)

Country Link
CN (1) CN106055479B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106570394B (zh) * 2016-11-10 2021-04-16 厦门安胜网络科技有限公司 一种检测恶意程序的方法
CN106778254B (zh) * 2016-11-24 2020-05-01 四川无声信息技术有限公司 隐私泄露检测方法及系统
CN107679402A (zh) * 2017-09-28 2018-02-09 四川长虹电器股份有限公司 恶意代码行为特征提取方法
CN110531965A (zh) * 2018-05-23 2019-12-03 阿里巴巴集团控股有限公司 一种数据处理方法、程序运行方法和设备
CN109101815B (zh) * 2018-07-27 2023-04-07 平安科技(深圳)有限公司 一种恶意软件检测方法及相关设备
CN110781081B (zh) * 2019-10-12 2024-04-09 南京信息职业技术学院 一种移动应用回调强制触发方法、系统及存储介质
CN112733145B (zh) * 2021-04-06 2021-06-08 北京邮电大学 Android应用检测分析方法、电子设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102360334A (zh) * 2011-10-17 2012-02-22 中国人民解放军信息工程大学 一种动静态结合的软件安全性测试方法
US8893087B2 (en) * 2011-08-08 2014-11-18 Ca, Inc. Automating functionality test cases
CN104933362A (zh) * 2015-06-15 2015-09-23 福州大学 Android应用软件API误用类漏洞自动化检测方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8893087B2 (en) * 2011-08-08 2014-11-18 Ca, Inc. Automating functionality test cases
CN102360334A (zh) * 2011-10-17 2012-02-22 中国人民解放军信息工程大学 一种动静态结合的软件安全性测试方法
CN104933362A (zh) * 2015-06-15 2015-09-23 福州大学 Android应用软件API误用类漏洞自动化检测方法

Also Published As

Publication number Publication date
CN106055479A (zh) 2016-10-26

Similar Documents

Publication Publication Date Title
CN106055479B (zh) 一种基于强制执行的Android应用软件测试方法
Walden et al. Predicting vulnerable components: Software metrics vs text mining
Yang et al. Appintent: Analyzing sensitive data transmission in android for privacy leakage detection
CN108846282A (zh) 基于静态污点分析的安卓应用程序权限泄露漏洞检测方法
CN110287693B (zh) 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法
CN102034050A (zh) 基于虚拟机和敏感Native API调用感知的恶意软件动态检测方法
Mercaldo et al. Hey malware, i can find you!
Bozic et al. Attack pattern-based combinatorial testing with constraints for web security testing
Ashawa et al. Analysis of android malware detection techniques: a systematic review
JPWO2020075335A1 (ja) 解析機能付与装置、解析機能付与方法及び解析機能付与プログラム
CN109902487B (zh) 基于应用行为的Android应用恶意性检测方法
Li et al. Large-scale third-party library detection in android markets
KR20210045122A (ko) 기호 실행을 사용하는 소프트웨어 테스트 입력 생성 장치 및 방법
Shahriar et al. Mobile application security using static and dynamic analysis
Jeon et al. Automated crash filtering using interprocedural static analysis for binary codes
Kang A review on javascript engine vulnerability mining
Liu et al. RealDroid: Large-Scale Evasive Malware Detection on" Real Devices"
CN111190813B (zh) 基于自动化测试的安卓应用网络行为信息提取系统及方法
Jurn et al. A survey of automated root cause analysis of software vulnerability
Lu et al. Kernel vulnerability analysis: A survey
Ali et al. Source Code Analysis for Mobile Applications for Privacy Leaks
Youssef et al. Quantitave dynamic taint analysis of privacy leakage in android arabic apps
Michaels et al. Mobile test suite generation via combinatorial sequences
Liu et al. Automated vulnerability detection in embedded devices
Hong et al. Defining and detecting environment discrimination in android apps

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20190301