当前位置: 首页 > 专利查询>南开大学专利>正文

一种基于回调函数建模自动生成Android应用回调序列的方法技术

技术编号:15691357 阅读:69 留言:0更新日期:2017-06-24 04:29
本发明专利技术公开了一种基于回调函数建模自动生成Android应用回调序列的方法,该方法考虑了生命周期回调函数,GUI回调函数和系统驱动回调函数,在预先设计并搭建好的Android回调信息库基础上,对源程序进行函数‑回调映射预处理从而获取到回调集,非回调集和函数‑回调映射列表等建模所需基础数据,对应用组件内部的生命周期回调关系、注册关系和组件间的跳转关系进行了统一抽象并生成回调序列模型。本发明专利技术的这种基于回调函数建模自动生成Android应用回调序列的方法,建模全面统一,执行速度快,经过实践证明是可信的。可用于Android平台上应用程序的静态分析和内部回调建模领域。

Method for automatically generating Android application callback sequence based on callback function modeling

The invention discloses a method for automatically generating Android application callback callback function based on sequence modeling, this method considers the life cycle of the callback function, GUI callback function and drive system of the callback function, in the pre design and a Android information database based on the completed callback function, pretreatment callback mapping of source program to get to the callback callback function set, non set and callback list mapping model is based on data, application component within the registration lifecycle callback relationship and relationship between components and the jump relationship of unity of abstract and generate callback sequence model. The method based on the callback function modeling automatically generates the callback sequence of Android application, and the modeling is comprehensive and uniform, and the execution speed is fast, and the practice proves that the method is reliable. Can be used for static analysis and internal callback modeling in applications on the Android platform.

【技术实现步骤摘要】
一种基于回调函数建模自动生成Android应用回调序列的方法
本专利技术属于Android平台上应用程序的静态分析和内部回调建模
,具体涉及一种基于回调函数建模自动生成Android应用回调序列的方法。
技术介绍
当前移动设备已经成为人们生活必不可少的一部分。为了满足人们日益增长的应用需求,移动设备上的应用层出不穷。其中基于Android平台的应用数量巨大并且仍在持续增长,大量的Android平台上的应用被证明具有功能或安全性方面的问题。因此,确保移动应用功能的正确性和使用的安全性越来越成为人们的关键需求。对Android应用进行安全检查,静态分析,需要将apk文件反编译成介于java代码和二进制码之间的smali代码,并对smali代码进行静态分析。区别于传统的桌面应用程序,Andorid系统具有事件驱动的特性,虽然这个特性为其带来诸多用户体验的优势,然而高度的交互性不可避免的增加了程序分析和测试的难度。因为Android平台的事件驱动特性,在对Android应用进行静态分析基础上创建相应模型的方法比直接对源码进行分析要更具优势。基于目前工作,能够总结以下两个结论:1)回调函数序列,作为Android系统的一项主要特性,在分析和测试移动应用的过程中占据关键地位。以此为基础的回调函数序列提取技术弥补了传统程序分析方法的不足。与传统方法不同,回调函数序列不再考虑程序的控制流或数据流,而是关注事件序列的发生和相关特征的更新处理。因此,回调函数序列能够解决由事件不确定性引起的逻辑问题,如事件异常,回调函数序列违法等,而这些问题利用传统的分析技术是难以解决的。2)现有的回调函数序列的处理工作仅仅是目标导向。即针对特殊问题构建特定的回调序列,所生成的序列往往是粗粒度、不可移植且不完备的。片面构建方法的缺陷主要表现在两方面:一是没有对生命周期回调,GUI(GraphicUserInterface)回调,系统驱动回调,组件间关系进行统一构建。其原因是难以找到一个统一的序列模式。例如,检测一些控件的变化状态必须要处理其在不同组件间的传递关系,控件的变化与组件间的传递动作二者难以统一,一个不完备的模型序列使得分析的结果易于出错。二是不同类型的逻辑缺陷往往存在于同一程序块中。当前的部分构建方法无法利用一种通用的方法加以处理,从而严重限制了其实用性。另外,部分构建也使得所构建的序列模型难以运用到其他场景。
技术实现思路
本专利技术旨在使用静态分析的方法,为Android平台上的应用建立一种统一的回调序列模型,即提供一种基于回调函数建模自动生成Android应用回调序列的方法。该方法考虑了生命周期回调函数,GUI回调函数和系统驱动回调函数,它不仅对生命周期回调关系、注册关系这两种主要的应用组件内部的回调关系进行统一抽象生成回调序列,更重要的是关注了不同类型组件之间的跳转回调关系,生成组件跳转回调序列,从而提供完备的细粒度回调信息,便于分析各类相关的时序属性,比如权限使用属性等。本专利技术提供的基于回调函数建模自动生成Android应用回调序列的方法包含以下步骤:步骤1、搭建Android回调信息库;步骤2、以Android应用的smali类型源码为输入,进行函数-回调映射预处理;步骤3、根据生命周期时序关系,生成生命周期回调序列;步骤4、识别注册或释放注册动作的关键连接点,生成由注册或释放注册引起的非生命周期回调序列;步骤5、识别Activity跳转及Service跳转动作的关键连接点,生成跳转链接;步骤6、生成由Activity跳转和Service跳转引起的非生命周期回调序列。本专利技术的具体设计实现如下:1.搭建Android回调信息库该库记录了该专利技术中用到的Android信息集合,待分析的Android应用中包含的相关集合均为该库中相应集合的子集。依据Android平台中回调函数库的基础信息,构建Android回调信息库中的以下集合:(1)白名单集:每个元素包含无用代码所在的Android本地库及其他依赖库文件的名称及其他相关属性。(2)注册关系集:每个元素包含注册关系的关键连接点及其他相关属性。(3)释放注册关系集:每个元素包含释放关系的关键连接点名称及其他相关属性。(4)组件间跳转函数集:每个元素包含Activity跳转或Service跳转的关键连接点名称及其他相关属性。(5)回调函数集:每个元素包含回调函数名,回调函数类型,所属类名及其他相关属性。该库可以根据需要扩充,其中每个集合可根据需要添加或删除元素,任一元素的属性也可以根据需要更改。2.函数-回调映射预处理在Android回调信息库的基础上,要对输入的Android应用的smali代码进行函数回调映射预处理,获取到回调函数集合callbackSet,非回调函数集合funSignedSet和反映每一对非回调函数与其相应的回调入口的映射关系的函数-回调映射列表。初始化回调函数集callbackSet和开发者自定义的非回调函数集funSignedSet为空集。过滤掉白名单下的所有无用代码,对整个应用的有效代码中的所有函数进行遍历。每遍历到一个函数定义,就标记这个函数的前驱函数和后继函数,并对该函数进行分类标记,分类标记方法是:查看该函数的名称是否出现在Android回调信息库中回调函数集中,如果出现,则为callbackSet添加新元素,包含函数名,所属类名,参数描述,前驱函数,后继函数,所属组件类型,回调函数类型七个属性。组件类型集合为{activity,service,receiver,other};回调函数类型集合为{lifecycle,GUI,System-driven}分别表示生命周期回调函数,用户界面交互回调和系统驱动回调。如果该函数名称未出现在Android回调信息库总的回调函数集中,则为funSignedSet添加新元素包含函数名,所属类名,参数描述,前驱函数,后继函数,所属组件类型六个属性。基于这两个集合,以每一个回调函数作为调用者,即前驱函数,依次搜索被调用者,即后继非回调函数,并且迭代搜索后继,直到没有后继的非回调函数,在遍历过程中,记录该初始回调函数整个搜索调用顺序来生成函数-回调映射列表中的一条记录,该列表反映每一对非回调函数与其相应的回调入口的映射关系;若该回调函数没有后继的非回调函数,则不生成记录。3.生成生命周期回调序列以组件类型及组件源码作为输入,生成生命周期回调序列,生成过程涉及四个步骤:(1)对一组件C,在Android回调信息库中找出组件类型与C的类型一样的全部生命周期回调函数,生成C的全生命周期回调集合C.lifecycle,为C.lifecycle添加三个并不是真实存在的辅助回调函数节点onActiveStart,onActiveEnd以及onTerminal,用于标识组件的如下状态:运行开始,运行结束和销毁结束,以此来显式限定组件的活动域以及跳转时机。(2)生成C的对应组件类型的完备生命周期序列图(ELG)。若C为activity,生成串行回调序列C.init->C.onCreate、C.onCreate->C.onStart、C.onStart->C.onResume、C.onPaus本文档来自技高网
...
一种基于回调函数建模自动生成Android应用回调序列的方法

【技术保护点】
一种基于回调函数建模自动生成Android应用回调序列的方法,其特征在于含有以下步骤:步骤1、搭建Android回调信息库;步骤2、以Android应用的smali类型源码为输入,进行函数‑回调映射预处理;步骤3、根据生命周期时序关系,生成生命周期回调序列;步骤4、识别注册或释放注册动作的关键连接点,生成由注册或释放注册引起的非生命周期回调序列;步骤5、识别Activity跳转及Service跳转动作的关键连接点,生成跳转链接;步骤6、生成由Activity跳转和Service跳转引起的非生命周期回调序列。

【技术特征摘要】
1.一种基于回调函数建模自动生成Android应用回调序列的方法,其特征在于含有以下步骤:步骤1、搭建Android回调信息库;步骤2、以Android应用的smali类型源码为输入,进行函数-回调映射预处理;步骤3、根据生命周期时序关系,生成生命周期回调序列;步骤4、识别注册或释放注册动作的关键连接点,生成由注册或释放注册引起的非生命周期回调序列;步骤5、识别Activity跳转及Service跳转动作的关键连接点,生成跳转链接;步骤6、生成由Activity跳转和Service跳转引起的非生命周期回调序列。2.根据权利要求1所述的基于回调函数建模自动生成Android应用回调序列的方法,其特征在于步骤1所述的Android回调信息库包含白名单集、注册关系集、释放注册关系集、组件间跳转函数集和回调函数集。3.根据权利要求1所述的基于回调函数建模自动生成Android应用回调序列的方法,其特征在于步骤2所述的进行函数-回调映射预处理的算法方法是,首先遍历由无用代码所构成的白名单之外的有效函数定义,标记每个函数的前驱与后继,识别搜索到的函数是否为回调函数,得到回调函数集合callbackSet以及被标记的开发者自定义的非回调函数集合funSignedSet;之后基于这两个集合,以每一个回调函数作为调用者,即前驱函数,依次搜索被调用者,即后继非回调函数,并且迭代搜索后继,直到没有后继的非回调函数,在遍历过程中,记录该初始回调函数和整个搜索调用顺序从而生成函数-回调映射列表的一条记录,该列表反映每一对非回调函数与其相应的回调入口的映射关系。4.根据权利要求3所述的基于回调函数建模自动生成Android应用回调序列的方法,其特征在于步骤3所述的生成生命周期回调序列,以组件类型及组件源码作为输入,其中组件类型集合为{activity,service,receiver,other},首先为每一个组件添加三个辅助节点onActiveStart,onActiveEnd以及onTerminal,用于标识组件的如下状态:运行开始,运行结束和销毁结束,以此来显式限定组件的活动域以及跳转时机;然后生成对应组件类型的完备生命周期图ELG;之后在步骤2得到的callbackSet集合中识别类型为生命周期回调函数的元素,这些元素再添加上onActiveStart,onActiveEnd以及onTerminal三个辅助节点构成被实现的生命周期回调函数节点(lifeNodes),以ELG中所有节点为全集,求lifeNodes的补集得到未被实现...

【专利技术属性】
技术研发人员:许静过辰楷刘奥朱静雯康介恢
申请(专利权)人:南开大学
类型:发明
国别省市:天津,12

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1