CN106055479B - 一种基于强制执行的Android应用软件测试方法 - Google Patents
一种基于强制执行的Android应用软件测试方法 Download PDFInfo
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 66
- 238000013522 software testing Methods 0.000 title claims abstract description 7
- 230000003068 static effect Effects 0.000 claims abstract description 22
- 239000000284 extract Substances 0.000 claims abstract description 12
- 244000035744 Hura crepitans Species 0.000 claims abstract description 10
- 230000001960 triggered effect Effects 0.000 claims abstract description 5
- 230000006870 function Effects 0.000 claims description 44
- 238000004458 analytical method Methods 0.000 claims description 19
- 238000005516 engineering process Methods 0.000 claims description 14
- 230000002159 abnormal effect Effects 0.000 claims description 13
- 238000012986 modification Methods 0.000 claims description 6
- 230000004048 modification Effects 0.000 claims description 6
- 238000006243 chemical reaction Methods 0.000 claims description 5
- 230000003542 behavioural effect Effects 0.000 claims description 4
- 238000010845 search algorithm Methods 0.000 claims 1
- 238000012360 testing method Methods 0.000 abstract description 10
- 238000013459 approach Methods 0.000 abstract description 2
- 230000007812 deficiency Effects 0.000 abstract 1
- 239000004071 soot Substances 0.000 description 4
- 238000010276 construction Methods 0.000 description 2
- 238000010998 test method Methods 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 125000002015 acyclic group Chemical group 0.000 description 1
- 238000007630 basic procedure Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 230000008092 positive effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring 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/53—Monitoring 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操作***占据了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应用,容忍所有执行过程中出现的异常,确保选中路径上代码被执行,并提取应用程序的执行行为和参数。
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)
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)
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误用类漏洞自动化检测方法 |
-
2016
- 2016-06-01 CN CN201610382056.7A patent/CN106055479B/zh not_active Expired - Fee Related
Patent Citations (3)
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 | |
CN105069355B (zh) | webshell变形的静态检测方法和装置 | |
CN108846282A (zh) | 基于静态污点分析的安卓应用程序权限泄露漏洞检测方法 | |
CN110287693B (zh) | 基于符号执行路径剪枝的缓冲区溢出漏洞自动检测方法 | |
CN102034050A (zh) | 基于虚拟机和敏感Native API调用感知的恶意软件动态检测方法 | |
JP7517585B2 (ja) | 解析機能付与装置、解析機能付与プログラム及び解析機能付与方法 | |
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 | |
Michaels et al. | Mobile test suite generation via combinatorial sequences | |
Liu et al. | Automated vulnerability detection in embedded devices |
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 |