CN111124901B - 一种基于Android资源表的资源泄露检测方法 - Google Patents
一种基于Android资源表的资源泄露检测方法 Download PDFInfo
- Publication number
- CN111124901B CN111124901B CN201911288539.0A CN201911288539A CN111124901B CN 111124901 B CN111124901 B CN 111124901B CN 201911288539 A CN201911288539 A CN 201911288539A CN 111124901 B CN111124901 B CN 111124901B
- Authority
- CN
- China
- Prior art keywords
- resource
- android
- function call
- detection method
- application program
- 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.)
- Active
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 42
- 238000000034 method Methods 0.000 claims abstract description 37
- 230000008569 process Effects 0.000 claims description 9
- 230000007704 transition Effects 0.000 claims description 3
- 239000008186 active pharmaceutical agent Substances 0.000 claims 1
- 239000003550 marker Substances 0.000 claims 1
- 230000006870 function Effects 0.000 description 21
- 230000002123 temporal effect Effects 0.000 description 4
- 238000012360 testing method Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 230000009897 systematic effect Effects 0.000 description 2
- 230000008439 repair process Effects 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/362—Software debugging
- G06F11/366—Software debugging using diagnostics
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种基于Android资源表的资源泄露检测方法,具体方法包括:获取待检测APK的特征信息,构建CG,然后根据整理的Android资源表标记资源操作,最后通过模型检测方法进行分析输出Android应用的资源泄露报告。本发明通过整理Android资源表,检测分析了大量的资源类,同时使用模型检测方法,实现了检测自动化,在时间和人力上能节省很多。
Description
技术领域
本发明涉及Android应用检测领域,尤其涉及到一种基于Android资源表的资源泄露检测方法。
背景技术
随着科技的发展,智能手机的普及率越来越高。手机已经成为了人们日常生活中必不可少的工具,移动应用程序也越来越多。根据国外的Strategy Analytics数据显示,截至2019年第三季度Android智能手机的市场占有率达到87.6%。
为了优化用户体验,Android智能手机中嵌入了大量的资源,如媒体播放器、相机、GPS、内存等。这些资源在手机上消耗能源,使用它们时会高速消耗手机的电量。此外,无论哪种资源,在使用时都需要正确的管理,即需要正确请求和释放它们。错误的资源释放操作可能会造成内存浪费、能量消耗甚至程序崩溃等,这类缺陷被称为资源泄露。
由于Android应用程序的快速发展,导致许多应用程序在发布前没有经过全面的测试,使应用程序的质量成为软件工程中的一个重要问题。面对大量的智能手机应用程序,正确管理APP的资源对开发人员来说是一项巨大的挑战。多年来,研究人员提出了各种技术来帮助开发人员正确管理应用程序的资源使用,包括应用程序分析器和测试技术。但是,测试有效性取决于测试套件的故障检测能力,且这些工作几乎都集中在内存泄漏,隐私泄漏,上下文泄露或能源缺陷上,而不是资源泄漏。因此,很少有人关注资源泄漏这类Android应用程序中常见的错误,且开发人员通常没有足够的时间来检测和修复它们。
发明内容
本发明所要解决的技术问题是:为了克服现有技术中的不足,本发明提供一种基于Android资源表的资源泄露检测方法,使用模型检测方法、基于Android应用资源表的资源泄露检测方法。
本发明解决其技术问题所要采用的技术方案是:一种基于Android资源表的资源泄露检测方法,包括以下步骤:
S1:参考Android官网的Android API官方文档,收集整理与请求和释放资源方法有关的资源表,主要查找需要手动释放的与资源相关的应用程序接口(ApplicationProgram Interface,API),其中,资源表包含资源包名、类名和相关的请求释放操作;
S2:对待检测的Android应用程序安装包AndroidPackage,简称APK,进行反编译获取Dex文件;
S3:对Dex文件进行分析,构建函数调用图Call Graph,简称CG;
S4:分析函数调用关系,系统地遍历应用程序的函数调用图CG,与资源表进行对比,对资源请求和释放操作进行标记;
S5:使用模型检测方法来对标记进行验证,判断是否存在资源泄露,并生成资源泄露报告。
进一步的所述步骤S1是为了收集Android应用程序中可能存在的资源泄露类,并为后续的标记操作提供对比参照。
进一步的所述步骤S2包括解析配置文件和代码反编译分析,具体过程如下:
S2.1:将APK解压后获取其中的配置文件manifest.xml并通过使用反编译工具dex2jar提取内容;
S2.2:对APK文件进行反编译,获取应用程序的Dex文件,然后提取应用组件中的相关操作指令和运行时数据。
进一步的所述步骤S3中,构建函数调用图CG的具体过程如下:
首先,解析manifest.xml文件获取入口节点,然后分析应用程序的信息,包括类与类之间的交叉调用关系,从入口节点开始按顺序遍历Dex文件以获得所有的函数调用方法,构建完整的函数调用图CG。
进一步的所述步骤S4中资源操作标记的具体过程为:在步骤S3构建的CG基础上,遍历所有方法,与资源表对比,若找到与资源相关的操作方法,则把CG上对应的方法标记为资源请求或资源释放操作。
进一步的所述步骤S5中,模型检测的具体过程为:
首先,将函数调用图CG转换为Kripke结构模型M=(S,S0,R,L),逐个遍历函数调用图CG中的每个节点和资源表,其中,S表示有限的状态集合,S0表示初始状态集合,R表示状态转移关系,即对L表示S上的标记函数。然后使用模型检测算法验证模型是否满足给定的计算树逻辑(CTL)公式,最后生成资源泄露报告。
时态逻辑模型检测算法包括线性时态逻辑(LTL)和计算树逻辑(CTL)。由于LTL不能表示全称和存在路径量词双重性质的属性,因此我们选择CTL模型检测。CTL将时间看成是一种分支结构,从Kripke结构出发,我们可以得到一个系统的树状表示。CTL公式是由原子命题、布尔运算符、时态算子和路径量词构成,时态算子包括G(Global,所有状态)、F(Future,未来某一状态)、U(Until,直至某一状态)和X(neXt-time,下一个状态),路径量词包括A(Always,适用于所有的路径)和E(Exists,存在至少一条以上的路径),加在时态算子前。
假设资源表中有m个资源,对于第i个资源,我们定义ri,ai分别表示请求和释放第i个资源的调用指令。然后我们使用CTL公式来描述资源泄露行为。对于给定的模型M和第i个资源,如果我们确定有关于第i个资源的资源泄露,必须保证满足以下条件:如果有一个请求第i个资源的状态s,那么一定不存在另一个状态,它在状态s的任意路径中释放第i个资源。因此,为所有资源设置完整CTL公式F。
设n表示函数调用图CG的一个节点,其中M中的对应状态用s表示,转换规则为:若n是与资源i相关的节点,则将相应的标记加入L。然后使用模型检测方法来确定M是否满足公式(F),最后生成资源泄露报告。
本发明与现有技术相比,优点如下:
本发明提出了一种根据函数控制流图进行模型检测的方法,利用该方法,人们可以检测应用程序存在的资源泄露情况。本发明整理统计了更多更全面的资源操作表,使用模型检测方法实现了测试自动化,无需在手机上进行检测,根据资源表与应用程序的CG对比,自动检测出资源泄露情况,在人力上节约很多,且本发明进行自动化生成文件在时间上可以节省很多。
附图说明
下面结合附图和实施例对本发明作进一步说明。
图1为本发明基于Android资源表的资源泄露检测系统框架图。
图2为本发明基于Android资源表的资源泄露检测方法的整体流程图。
图3为本发明基于Android资源表的资源泄露检测方法示例的检测结果图。
图4为本发明基于Android资源表的资源泄露检测方法示例的资源类泄露数量。
具体实施方式
现在结合附图对本发明作详细的说明。此图为简化的示意图,仅以示意方式说明本发明的基本结构,因此其仅显示与本发明有关的构成。
参见图1和2所示,本实施例所述的一种基于Android资源表的资源泄露检测方法,包括以下步骤:
S1:参考Android官网的Android API官方文档,收集整理与请求和释放资源方法有关的资源表,主要查找需要手动释放的与资源相关的应用程序接口(ApplicationProgram Interface,API),其中包含资源包名、类名和相关的请求释放操作;
S2:对待检测的Android应用程序安装包(AndroidPackage,简称APK)进行反编译获取Dex文件信息;
S2.1:将APK解压后获取其中的manifest.xml配置文件并通过使用反编译工具dex2jar提取内容;
S2.2:对APK文件进行反编译,获取应用程序的Dex文件,然后提取应用组件中的相关资源操作指令和运行时数据。
S3:对DEX文件进行分析,构建函数调用图Call Graph,简称CG;
其中,构建CG的具体过程如下:
首先解析manifest.xml文件获取入口节点,然后分析应用程序的信息,包括类与类之间的交叉调用关系,从入口节点开始按顺序遍历Dex文件以获得所有的函数调用方法,构建完整的CG。
S4:分析函数调用关系,系统地遍历应用程序的函数调用图CG,与资源表进行对比,对资源请求和释放操作进行标记;
标记资源操作的具体过程如下:
首先从CG的入口节点开始逐一遍历,然后判断CG的每个节点的方法是否与资源操作有关,若有关则与资源表进行对比,并判断它是请求操作还是释放操作,最后对该方法进行标记;否则,判断下一个节点。
S5:使用模型检测方法来对标记进行验证,判断是否存在资源泄露,并生成资源泄露报告;
模型检测的具体过程如下:
首先,将函数调用图CG转换为Kripke结构模型M=(S,S0,R,L),逐个遍历函数调用图CG中的每个节点和资源表,其中,S表示有限的状态集合,S0表示初始状态集合,R表示状态转移关系,即对L表示S上的标记函数。然后使用模型检测算法验证模型是否满足给定的公式,最后生成资源泄露报告。
时态逻辑模型检测算法包括线性时态逻辑(LTL)和计算树逻辑(CTL)。由于LTL不能表示全称和存在路径量词双重性质的属性,因此我们选择CTL模型检测。CTL将时间看成是一种分支结构,从Kripke结构出发,我们可以得到一个系统的树状表示。CTL公式是由原子命题、布尔运算符、时态算子和路径量词构成,时态算子包括G(Global,所有状态)、F(Future,未来某一状态)、U(Until,直至某一状态)和X(neXt-time,下一个状态),路径量词包括A(Always,适用于所有的路径)和E(Exists,存在至少一条以上的路径),加在时态算子前。
假设资源表中有m个资源,对于第i个资源,我们定义ri,ai分别表示请求和释放第i个资源的调用指令。然后我们使用CTL公式来描述资源泄露行为。对于给定的模型M和第i个资源,如果我们确定有关于第i个资源的资源泄露,必须保证满足以下条件:如果有一个请求第i个资源的状态s,那么一定不存在另一个状态,它在状态s的任意路径中释放第i个资源。因此,为所有资源设置完整CTL公式F。
设n表示函数调用图CG的一个节点,其中M中的对应状态用s表示,转换规则为:若n是与资源i相关的节点,则将相应的标记加入L。然后使用模型检测方法来确定M是否满足公式(F),最后生成资源泄露报告。
示例为本发明对36个随机开源Android应用程序的检测结果图,图3所示为检测结果#REP和真实泄露数量#TP的对比图,图4为各资源类的泄露数量。可以看到,本发明检测类别涵盖40种不同的资源类别,检测精度达到70.4%。
综上所述,本发明提供一种基于Android资源表的资源泄露检测方法,本申请首先获取待检测APK的特征信息,其次构建CG,然后根据整理的Android资源表标记资源操作,最后通过模型检测方法进行分析输出Android应用的资源泄露报告,使CG中的调用方法更简洁明了,自动化程度更高,并检测了更多样化的资源泄露类。
以上述依据本发明的理想实施例为启示,通过上述的说明内容,相关的工作人员完全可以在不偏离本发明的范围内,进行多样的变更以及修改。本项发明的技术范围并不局限于说明书上的内容,必须要根据权利要求范围来确定其技术性范围。
Claims (3)
1.一种基于Android资源表的资源泄露检测方法,其特征在于:包括以下步骤:
S1:收集整理与请求和释放资源方法有关的资源表;
S2:对待检测的Android应用程序安装包AndroidPackage,简称APK,进行反编译获取Dex文件;
步骤S2包括解析配置文件和代码反编译分析两个部分,具体过程如下:
S2.1:将APK解压后获取其中的配置文件manifest.xml并通过使用反编译工具dex2jar提取内容;
S2.2:对APK文件进行反编译,获取应用程序的Dex文件,然后提取应用组件中的操作指令和运行时数据;
S3:对Dex文件进行分析,构建函数调用图Call Graph,简称CG;
步骤S3中,构建函数调用图CG的具体过程如下:
首先,解析manifest.xml文件获取入口节点,然后分析应用程序的信息,包括类与类之间的交叉调用关系,从入口节点开始按顺序遍历Dex文件以获得所有的函数调用方法,构建完整的函数调用图CG;
S4:分析函数调用关系,系统地遍历应用程序的函数调用图CG,与资源表进行对比,对资源请求和释放操作进行标记;
S5:使用模型检测方法来对标记进行验证,判断是否存在资源泄露,并生成资源泄露报告;
步骤S5中,模型检测的具体过程为:
首先,将函数调用图CG转换为Kripke结构模型M=(S,S0,R,L),逐个遍历函数调用图CG中的每个节点和资源表,其中,S表示有限的状态集合,S0表示初始状态集合,R表示状态转移关系,即对L表示S上的标记函数;然后使用模型检测算法验证模型是否满足给定的计算树逻辑CTL公式,最后生成资源泄露报告;
所述CTL公式为:
其中,ri,ai分别表示请求和释放第i个资源的调用操作,F表示对于给定的模型M和第i个资源,如果确定有关于第i个资源的资源泄露,必须保证满足以下条件:如果有一个请求第i个资源的状态s,那么一定不存在另一个状态,它在状态s的任意路径中释放第i个资源。
2.如权利要求1所述的基于Android资源表的资源泄露检测方法,其特征在于:步骤S1中参考Android官网上的Android API官方文档,收集整理与请求和释放资源方法有关的资源表,查找需要手动释放的与资源相关的应用程序接口,其中,资源表包含资源包名、类名和相关的请求释放操作。
3.如权利要求1所述的基于Android资源表的资源泄露检测方法,其特征在于:步骤S4中资源操作标记的具体过程为:在步骤S3构建的函数调用图CG基础上,遍历所有方法,与资源表对比,若找到与资源相关的操作方法,则把函数调用图CG上对应的方法标记为资源请求或资源释放操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911288539.0A CN111124901B (zh) | 2019-12-12 | 2019-12-12 | 一种基于Android资源表的资源泄露检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911288539.0A CN111124901B (zh) | 2019-12-12 | 2019-12-12 | 一种基于Android资源表的资源泄露检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111124901A CN111124901A (zh) | 2020-05-08 |
CN111124901B true CN111124901B (zh) | 2024-03-15 |
Family
ID=70498836
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911288539.0A Active CN111124901B (zh) | 2019-12-12 | 2019-12-12 | 一种基于Android资源表的资源泄露检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111124901B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833504A (zh) * | 2010-04-19 | 2010-09-15 | 张翀斌 | 一种基于模型检验的时序软件质量缺陷检测方法及系统 |
CN102073825A (zh) * | 2011-01-28 | 2011-05-25 | 李清宝 | 基于路径驱动的可执行程序安全性检测方法及系统 |
CN104462984A (zh) * | 2014-11-27 | 2015-03-25 | 北京航空航天大学 | 基于逆向符号执行的应用权限泄漏检测方法及系统 |
CN109145603A (zh) * | 2018-07-09 | 2019-01-04 | 四川大学 | 一种基于信息流的Android隐私泄露行为检测方法和技术 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9021409B2 (en) * | 2011-07-11 | 2015-04-28 | The Board Of Trustees Of The University Of Illinois | Integration of data mining and static analysis for hardware design verification |
RU2012127580A (ru) * | 2012-07-02 | 2014-01-10 | ЭлЭсАй Корпорейшн | Подход многоэтапного планирования на уровне исходных кодов для разработки и тестирования программного обеспечения для многопроцессорных сред |
-
2019
- 2019-12-12 CN CN201911288539.0A patent/CN111124901B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833504A (zh) * | 2010-04-19 | 2010-09-15 | 张翀斌 | 一种基于模型检验的时序软件质量缺陷检测方法及系统 |
CN102073825A (zh) * | 2011-01-28 | 2011-05-25 | 李清宝 | 基于路径驱动的可执行程序安全性检测方法及系统 |
CN104462984A (zh) * | 2014-11-27 | 2015-03-25 | 北京航空航天大学 | 基于逆向符号执行的应用权限泄漏检测方法及系统 |
CN109145603A (zh) * | 2018-07-09 | 2019-01-04 | 四川大学 | 一种基于信息流的Android隐私泄露行为检测方法和技术 |
Also Published As
Publication number | Publication date |
---|---|
CN111124901A (zh) | 2020-05-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103577324B (zh) | 移动应用中隐私信息泄露的静态检测方法 | |
CN104077140B (zh) | 用于持续集成的自动化编译方法和编译装置 | |
CN108427646B (zh) | 基于Appium的安卓App自动化测试框架构建方法和装置 | |
CN103036730B (zh) | 一种对协议实现进行安全测试的方法及装置 | |
CN108845940B (zh) | 一种企业级信息系统自动化功能测试方法和系统 | |
Bento et al. | Automated analysis of distributed tracing: Challenges and research directions | |
CN102624574B (zh) | 一种对协议实现进行安全测试的方法及装置 | |
CN110389896A (zh) | 代码自动化分析和测试方法、装置及计算机可读存储介质 | |
KR20130051116A (ko) | 애플리케이션 보안성 점검 자동화 장치 및 방법 | |
CN112035359A (zh) | 程序测试方法、装置、电子设备及存储介质 | |
CN101924656A (zh) | 一种基于动态配置的网络设备cli实现方法和装置 | |
CN113706110B (zh) | 一种fpga测试工具一体化测试管理平台 | |
CN103186463B (zh) | 确定软件的测试范围的方法和系统 | |
CN106529304B (zh) | 一种安卓应用并发漏洞检测系统 | |
Goaër | Enforcing green code with Android lint | |
CN102306119A (zh) | 捕获全局异常的系统及方法 | |
CN113590454A (zh) | 测试方法、装置、计算机设备和存储介质 | |
CN112506757A (zh) | 自动测试方法、系统、计算机设备及其介质 | |
CN114091028B (zh) | 一种基于数据流的Android应用信息泄露检测方法 | |
Grambow et al. | Using application benchmark call graphs to quantify and improve the practical relevance of microbenchmark suites | |
CN111258562B (zh) | Java代码质量检查方法、装置、设备和存储介质 | |
CN111124901B (zh) | 一种基于Android资源表的资源泄露检测方法 | |
Lu et al. | Model-based static source code analysis of java programs with applications to android security | |
CN106155880A (zh) | 一种基于策略的自动化程序分析系统和方法 | |
CN113282504A (zh) | 一种增量代码覆盖率检测方法及业务开发方法、装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |