CN106874764B - 一种基于回调函数建模自动生成Android应用回调序列的方法 - Google Patents

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

Info

Publication number
CN106874764B
CN106874764B CN201710029661.0A CN201710029661A CN106874764B CN 106874764 B CN106874764 B CN 106874764B CN 201710029661 A CN201710029661 A CN 201710029661A CN 106874764 B CN106874764 B CN 106874764B
Authority
CN
China
Prior art keywords
function
readjustment
sequence
call back
life cycle
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
Application number
CN201710029661.0A
Other languages
English (en)
Other versions
CN106874764A (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.)
Tiankai Hongtu (Tianjin) Technology Co.,Ltd.
Original Assignee
Nankai University
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 Nankai University filed Critical Nankai University
Priority to CN201710029661.0A priority Critical patent/CN106874764B/zh
Publication of CN106874764A publication Critical patent/CN106874764A/zh
Application granted granted Critical
Publication of CN106874764B publication Critical patent/CN106874764B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • 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
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Quality & Reliability (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Mobile Radio Communication Systems (AREA)
  • Stored Programmes (AREA)

Abstract

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

Description

一种基于回调函数建模自动生成Android应用回调序列的 方法
【技术领域】
本发明属于Android平台上应用程序的静态分析和内部回调建模技术领域,具体涉及一种基于回调函数建模自动生成Android应用回调序列的方法。
【背景技术】
当前移动设备已经成为人们生活必不可少的一部分。为了满足人们日益增长的应用需求,移动设备上的应用层出不穷。其中基于Android平台的应用数量巨大并且仍在持续增长,大量的Android平台上的应用被证明具有功能或安全性方面的问题。因此,确保移动应用功能的正确性和使用的安全性越来越成为人们的关键需求。
对Android应用进行安全检查,静态分析,需要将apk文件反编译成介于java代码和二进制码之间的smali代码,并对smali代码进行静态分析。区别于传统的桌面应用程序,Andorid系统具有事件驱动的特性,虽然这个特性为其带来诸多用户体验的优势,然而高度的交互性不可避免的增加了程序分析和测试的难度。因为Android平台的事件驱动特性,在对Android应用进行静态分析基础上创建相应模型的方法比直接对源码进行分析要更具优势。
基于目前工作,能够总结以下两个结论:
1)回调函数序列,作为Android系统的一项主要特性,在分析和测试移动应用的过程中占据关键地位。以此为基础的回调函数序列提取技术弥补了传统程序分析方法的不足。与传统方法不同,回调函数序列不再考虑程序的控制流或数据流,而是关注事件序列的发生和相关特征的更新处理。因此,回调函数序列能够解决由事件不确定性引起的逻辑问题,如事件异常,回调函数序列违法等,而这些问题利用传统的分析技术是难以解决的。
2)现有的回调函数序列的处理工作仅仅是目标导向。即针对特殊问题构建特定的回调序列,所生成的序列往往是粗粒度、不可移植且不完备的。片面构建方法的缺陷主要表现在两方面:一是没有对生命周期回调,GUI(Graphic User Interface)回调,系统驱动回调,组件间关系进行统一构建。其原因是难以找到一个统一的序列模式。例如,检测一些控件的变化状态必须要处理其在不同组件间的传递关系,控件的变化与组件间的传递动作二者难以统一,一个不完备的模型序列使得分析的结果易于出错。二是不同类型的逻辑缺陷往往存在于同一程序块中。当前的部分构建方法无法利用一种通用的方法加以处理,从而严重限制了其实用性。另外,部分构建也使得所构建的序列模型难以运用到其他场景。
【发明内容】
本发明旨在使用静态分析的方法,为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.onPause->C.onResume、C.onPause->C.onStop、C.onStop->C.onDestroy、C.onStop->C.onCreate、C.onStop->C.onRestart、C.onRestart->C.onStart、C.onPause->C.onCreate、C.onResume->C.onActiveStart、C.onActiveEnd->C.onPause、C.onDestroy->C.onTerminal。若C为service且以onBind开始,那么生成串行回调序列C.init->C.onCreate、C.onCreate->C.onBind、C.onBind->C.onActiveStart、C.onActiveEnd->C.onUnbind,C.onUnbind->C.onDestroy,C.onDestroy->C.onTerminal。若C为service且不以onBind开始,那么生成串行回调序列C.init->C.onCreate、C.onCreate->C.onStartCommand、C.onStartCommand->C.onActiveStart、C.onActiveEnd->C.onDestroy、C.onDestroy->C.onTerminal。若C为receiver,生成串行回调序列C.onReceive->C.onActiveStart、C.onActiveEnd->C.onTerminal。
(3)初始化被实现的生命周期回调集合lifeNodes为空,在函数-回调映射预处理得到的callbackSet集合中识别回调类型为生命周期回调函数的元素,每出现一个生命周期回调函数,就为lifeNodes添加一个新元素,最终添加上onActiveStart,onActiveEnd和onTerminal三个辅助节点得到组件C被实现的生命周期回调lifeNodes,以ELG中所有节点为全集,求lifeNodes的补集得到未被实现的生命周期回调函数隐藏节点集合hiddenNodes。
(4)对每一个hiddenNodes集合中的元素hiddenNode,找到其父亲节点hiddenNode.f和子节点hiddenNode.s,并生成串行序列hiddenNode.f->hiddenNode.s,将以hiddenNode作为出发节点和终止节点的所有序列删除。最终得到组件C的生命周期串行回调序列。
在对Android应用分析建模过程中,需要对其所有组件均做以上四步操作。
4.生成由注册或释放注册引起的非生命周期回调序列
生成由注册或释放注册引起的非生命周期回调序列的生成过程涉及以下四个步骤:
(1)识别注册或释放注册动作的关键连接点,关键连接点为关键连接函数的调用语句。过滤掉白名单的无用代码后,扫描Android应用的smali源码,对每一行源码匹配Android回调信息库注册关系集中元素的关键连接点名,若匹配成功,则找到一个注册或释放注册动作的关键连接点。关键连接点名如:setOnClickListener,unregisterListener等。
(2)对每一个关键连接点R,找到它的前驱回调函数invoker,并记录其类型,方法为:记录关键连接点R被调用的函数即R的前驱函数R.p,若其为一个回调函数,则invoker=R.p,停止;否则,R=R.p,利用函数-回调映射表,搜索R的前驱函数。
(3)对每一个关键连接点R,找到它的后继回调函数节点集invokees,方法为:识别关键连接函数的参数,搜素参数的内部类实现源码,找到内部类中定义的非生命周期回调函数即为invokees。
(4)对invokees中每个元素invokee,若invoker类型为生命周期回调lifecycle,那么生成串行回调序列onActiveStart->invokee->onActiveEnd,若invoker类型为非生命周期回调,那么生成串行回调序列invoker->invokee->onActiveEnd。
5.生成跳转链接
生成跳转链接的生成过程涉及以下三个步骤:
(1)识别Activity跳转动作和Service跳转动作的关键连接点。过滤掉白名单的无用代码后,扫描Android应用的smali源码(本次扫描与识别注册或释放注册动作的关键连接点的扫描为同一次),对每一行源码匹配Android回调信息库组件间跳转函数集中元素的关键连接点名,若匹配成功,则找到一个Activity跳转动作或Service跳转动作的关键连接点。关键连接点名如:startActivity,startService,stopService等。
(2)对每一个关键连接点,搜索关键连接点的前驱回调invoker,并搜索关键连接点的后继组件。搜索后继组件方法为:将关键连接点的前驱回调invoker的函数实现作为关键代码段,对关键代码段的每行代码,若存在“const-class”关键字,则“L”字符及之后的字符串构成后继组件名;若存在“const-string”和“setClassName”关键字,则后继组件名为“””字符之后到倒数第二个字符所构成的字符串。以上匹配是为了识别使用intent实现组件跳转的不同方式。比如下面这行源码:
Const-class v2,Lcom/example/ury/OtherActivity
解析出的后继组件名为“Lcom/example/ury/OtherActivity”。
之后通过后继组件名来获取整个后继组件B。
(3)为“startActivity”关键连接点生成connection_activity类型链接,为“startService”关键连接点生成connection_service类型链接,为“stopService”关键连接点生成connection_stop_service类型链接。每个链接包含关键连接点名、链接类型、关键连接点前驱回调invoker、连接点所在组件(前驱组件A)及类型、转到的目的组件(后继组件B)及类型七个属性,其中链接类型集合为{connection_activity,connection_service,connection_stop_service}。
6.生成由Activity跳转和Service跳转引起的非生命周期回调序列
以跳转链接为基础,为connection_activity类型的跳转链接生成A.onActiveEnd->B.init和B.onTerminal->A.onActiveStart的串行回调序列。因为在Android平台上,组件activicy跳转到另一个activity,那么后面的Activity会完全覆盖前一个,所以Activity间的跳转只能生成串行回调序列,而组件activicy跳转到另一个service,两个组件是同时运行的,service运行在后台,因而为connection_service类型链接生成A.invoker->B.init的并行回调序列;为connection_stop_service类型链接生成B.onTerminal->A.的并行回调序列。
本发明的优点和积极效果:
本发明方法考虑了生命周期回调函数,GUI回调函数和系统驱动回调函数,它不仅对生命周期回调关系、注册关系这两种主要的应用组件内部的回调关系进行统一抽象生成回调序列,还关注了不同类型组件之间的跳转回调关系,生成组件跳转回调序列,从而为Android平台上的应用建立了一种统一的回调序列模型,提供完备的细粒度回调信息。在该统一的回调序列模型的基础上,能够发展出很多应用,比如进行漏洞检测,发现回调陷阱,use-after-free逻辑缺陷等。
【附图说明】
图1为一个activity组件的java事例源码。
图2为生成的activity组件的完备生命周期回调序列图。
图3为生成的减去未实现生命周期回调函数的生命周期回调序列图。
图4为生成注册关系引起的非生命周期回调序列后的模型图。
图5为生成activity跳转关系引起的非生命周期回调序列后的模型图。
图6为基于回调函数建模自动生成Android应用回调序列方法的总体流程图。
【具体实施方式】
根据本发明方法,实现对图1的java源码自动生成统一回调序列。
本发明首先搭建出Android回调信息库,构建白名单集,注册关系集,释放注册关系集,组件间跳转函数集,回调函数集。
对图1所示源码进行函数-回调映射预处理。初始化回调函数集callbackSet和开发者自定义的非回调函数集funSignedSet为空集。对图1的源码进行扫描,每扫描到一个函数定义,就标记这个函数的前驱函数和后继函数,并对该函数进行分类标记,分类标记方法是:查看该函数的名称是否出现在Android回调信息库中回调函数集中,如果出现,则为callbackSet添加新元素,包含函数名,所属类名,参数描述,前驱函数,后继函数,所属组件类型,回调函数类型七个属性。如果该函数名称未出现在Android回调信息库中的回调函数集中,则为funSignedSet添加新元素包含函数名,所属类名,参数描述,前驱函数,后继函数,所属组件类型六个属性。基于这两个集合,以每一个回调函数作为调用者,依次搜索被调用后继非回调函数,并且迭代搜索后继,直到没有后继的非回调函数,在遍历过程中,记录该初始回调函数整个搜索调用顺序来生成函数-回调映射列表中的一条记录;若该回调函数没有后继的非回调函数,则不生成记录。由于仅有回调函数ShareMyPosition.onResume存在非回调后继ShareMyPosition.performLocation并且ShareMyPosition.performLocation没有非回调后继函数,因而函数-回调映射列表仅存在一条记录。最终获取到的回调函数集callbackSet、非回调函数集funSignedSet及函数-回调映射列表分别如表1、表2、表3所示。
表1回调函数集callbackSet
表2非回调函数集funSignedSet
表3函数-回调映射表
回调函数入口 后继非回调序列
ShareMyPosition.onResume ShareMyPosition.performLocation->null
之后生成完备的生命周期序列图,如图2。初始化被实现的生命周期回调集合lifeNodes为空,在函数-回调映射预处理得到的callbackSet集合中识别回调类型为“lifecycle”的元素,每出现一个生命周期回调函数,就为lifeNodes添加一个新元素,最终添加上onActiveStart,onActiveEnd和onTerminal三个辅助节点得到组件C被实现的生命周期回调lifeNodes,在callbackSet中匹配回调函数类型为“lifecycle”的元素,得到实现的生命周期回调集合lifeNodes为{ShareMyPosition.init,ShareMyPosition.onCreate,ShareMyPosition.onResume,ShareMyPosition.onPause,ShareMyPosition.onActiveStart,ShareMyPosition.onActiveEnd,ShareMyPosition.onTerminal}。初始化hiddenNodes集合为ELG中全部节点集合,对hiddenNodes的每个元素hiddenNode,若该元素在lifeNodes集合中,则在hiddenNodes集合中删除该元素,最终得到未被实现的生命周期回调函数隐藏节点集合hiddenNodes为{ShareMyPosition.onStart,ShareMyPosition.onRestart,ShareMyPosition.onStop,ShareMyPosition.onDestory}。对一个hiddenNode节点ShareMyPosition.onStart,找到其父亲节点为ShareMyPosition.onCreate和子节点ShareMyPosition.onResume,并生成串行序列ShareMyPosition.onCreate->ShareMyPosition.onResume,并将序列ShareMyPosition.onCreate->ShareMyPosition.onStart和ShareMyPosition.onStart->ShareMyPosition.onResume删除。同样对hiddenNodes中的其他元素做类似操作,得到如图3的序列图。
然后识别注册或释放注册动作的关键连接点,生成由注册或释放注册引起的非生命周期回调序列。扫描源码寻找与Android回调信息库中注册关系集和释放注册关系集的元素相匹配的语句,若匹配,则为一个注册或释放注册动作的关键连接点。找到的四个注册动作的关键连接点为{locationManager.requestLocationUpdates,AlertDialog.setNeutralButton,AlertDialog.setPositiveButton,AlertDialog.setNegativeButton},没有找到释放注册动作的关键连接点。以连接点locationManager.requestLocationUpdates为例,该连接点被函数ShareMyPosition.performLocation函数调用,即该连接点的前驱函数为ShareMyPosition.performLocation,由于ShareMyPosition.performLocation为非回调函数,那么通过函数-回调映射列表找到它的前驱函数为ShareMyPosition.onResume,该函数为一个回调函数,停止搜索。那么locationManager.requestLocationUpdates的前驱回调为ShareMyPosition.onResume。寻找其后继回调为ShareMyPosition.onLocationChanged。因为该前驱回调是一个生命周期回调,所以该注册关系为lifecycle->non-lifecycle,对应生成ShareMyPosition.onActiveStart->ShareMyPosition.onLocationChanged->ShareMyPosition.onActiveEnd串行序列。对其他三个注册动作关键连接点做类似操作,得到如图4的序列图。
识别Activity跳转及Service跳转动作的关键连接点,生成跳转链接。扫描源码寻找与Android回调信息库中组件间跳转函数集的元素相匹配的语句,若匹配,则为一个组件间跳转动作的关键连接点。找到的两个跳转动作关键连接点为{startActivity(option),startActivity(share)}。对关键连接点生成跳转链接如表4。
表4跳转链接表
关键连接点名 startActivity(option) startActivity(share)
链接类型 connection_activity connection_activity
invoker onClick(NeutralButton) onClick(PositiveButton)
所在组件A ShareMyPosition ShareMyPosition
A的类型 activity activity
目的组件B option share
B的类型 activity activity
最后为每个跳转链接生成由Activity跳转引起的非生命周期回调序列。对链接startActivity(option),由于该链接类型为connection_activity,因此生成串行回调序列ShareMyPosition.onActiveEnd->option.init和option.onTerminal->ShareMyPosition.onActiveStart。同理对另一链接生成类似序列,最终完整的回调序列模型图如图5,整个算法结束。

Claims (4)

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

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710029661.0A CN106874764B (zh) 2017-01-16 2017-01-16 一种基于回调函数建模自动生成Android应用回调序列的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710029661.0A CN106874764B (zh) 2017-01-16 2017-01-16 一种基于回调函数建模自动生成Android应用回调序列的方法

Publications (2)

Publication Number Publication Date
CN106874764A CN106874764A (zh) 2017-06-20
CN106874764B true CN106874764B (zh) 2019-10-29

Family

ID=59157567

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710029661.0A Active CN106874764B (zh) 2017-01-16 2017-01-16 一种基于回调函数建模自动生成Android应用回调序列的方法

Country Status (1)

Country Link
CN (1) CN106874764B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107798245B (zh) * 2017-11-02 2020-08-11 北京理工大学 一种基于组件依赖图的软件安全漏洞预测方法
CN110083355B (zh) * 2019-04-26 2023-07-25 北京奇艺世纪科技有限公司 一种app页面的处理方法及装置
CN110536173B (zh) * 2019-08-27 2021-04-20 海信集团有限公司 数据流链路中的元件连接的方法及装置
CN111026659B (zh) * 2019-12-05 2023-04-21 南开大学 一种基于嵌入表示的移动应用回调分析研究方法
CN112906000B (zh) * 2021-03-03 2024-02-23 深信服科技股份有限公司 一种程序访问方法、装置、设备及可读存储介质
CN113946830B (zh) * 2021-10-09 2024-05-07 暨南大学 基于多模态检测的Android APP漏洞细粒度检测方法
CN114936051B (zh) * 2022-05-31 2023-06-09 金陵科技学院 一种基于Android系统多模态生物识别终端进行增值应用的方法
CN116775172B (zh) * 2023-08-25 2023-11-03 成都太阳高科技有限责任公司 一种通过反射实现Android获取数据的方法及系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105159828A (zh) * 2015-08-25 2015-12-16 中国人民解放军信息工程大学 源代码级的上下文敏感性检测方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7216337B2 (en) * 2003-04-14 2007-05-08 Microsoft Corporation Automatic determination of invalid call sequences in software components

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105159828A (zh) * 2015-08-25 2015-12-16 中国人民解放军信息工程大学 源代码级的上下文敏感性检测方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于信息流的Android应用污点分析技术的研究;冀风宇;《中国优秀硕士学位论文全文数据库》;20160215(第2期);第17-56页 *

Also Published As

Publication number Publication date
CN106874764A (zh) 2017-06-20

Similar Documents

Publication Publication Date Title
CN106874764B (zh) 一种基于回调函数建模自动生成Android应用回调序列的方法
CN109697162B (zh) 一种基于开源代码库的软件缺陷自动检测方法
CN107273751B (zh) 基于多模式匹配的安全漏洞在线发现方法
JP5042315B2 (ja) ソースコード内のセキュリティ脆弱性の検出
CN106940773B (zh) 基于静态污点数据分析的隐私泄漏漏洞检测确认方法
Nguyen et al. Recommending API usages for mobile apps with hidden markov model
Meurice et al. Static analysis of dynamic database usage in java systems
CN113139192B (zh) 基于知识图谱的第三方库安全风险分析方法及系统
US20230273776A1 (en) Code Processing Method and Apparatus, Device, and Medium
CN115033894B (zh) 一种基于知识图谱的软件组件供应链安全检测方法及装置
CN104866764B (zh) 一种基于对象引用图的Android手机恶意软件检测方法
CN113468525B (zh) 针对二进制程序的相似漏洞检测方法及装置
Ganz et al. Explaining graph neural networks for vulnerability discovery
CN108090360A (zh) 一种基于行为特征的安卓恶意应用分类方法及系统
Stephan et al. Using mutation analysis for a model-clone detector comparison framework
D’Souza et al. Collective intelligence for smarter API recommendations in python
Pashakhanloo et al. Codetrek: Flexible modeling of code using an extensible relational representation
Shomrat et al. Detecting refactored clones
CN116541887B (zh) 一种大数据平台数据安全保护方法
CN116541022A (zh) 一种基于语义状态图的php二阶漏洞的自动化挖掘方法
US9489451B2 (en) Visual data definition for identifying data items in loosely-structured data
CN115033266A (zh) 一种基于龙芯指令集的ide开发系统
CN115438341A (zh) 提取代码循环计数器的方法、装置、存储介质和电子设备
Alsudais Drove: Tracking Execution Results of Workflows on Large Data.
JP6955162B2 (ja) 解析装置、解析方法および解析プログラム

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
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20231108

Address after: Building 2, No. 3 Hong Kong Street, Jinnan Economic Development Zone (West Zone), Jinnan District, Tianjin, 300000, 306-57

Patentee after: Tianjin Chaitu Data Technology Co.,Ltd.

Address before: 300071 Tianjin City, Nankai District Wei Jin Road No. 94

Patentee before: NANKAI University

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20231208

Address after: 300000 Tianjin Nankai District Science and Technology West Road Tianjin Science and Technology Square 6-1209 (Tiankai Park)

Patentee after: Tiankai Hongtu (Tianjin) Technology Co.,Ltd.

Address before: Building 2, No. 3 Hong Kong Street, Jinnan Economic Development Zone (West Zone), Jinnan District, Tianjin, 300000, 306-57

Patentee before: Tianjin Chaitu Data Technology Co.,Ltd.