CN104978527B - 一种计算程序切片的方法及装置 - Google Patents

一种计算程序切片的方法及装置 Download PDF

Info

Publication number
CN104978527B
CN104978527B CN201510460355.3A CN201510460355A CN104978527B CN 104978527 B CN104978527 B CN 104978527B CN 201510460355 A CN201510460355 A CN 201510460355A CN 104978527 B CN104978527 B CN 104978527B
Authority
CN
China
Prior art keywords
goal approach
smali
call parameters
bytecodes
program slice
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
CN201510460355.3A
Other languages
English (en)
Other versions
CN104978527A (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.)
SHENZHEN DIGITAL TV NATIONAL ENGINEERING LABORATORIES Inc
Original Assignee
SHENZHEN DIGITAL TV NATIONAL ENGINEERING LABORATORIES Inc
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 SHENZHEN DIGITAL TV NATIONAL ENGINEERING LABORATORIES Inc filed Critical SHENZHEN DIGITAL TV NATIONAL ENGINEERING LABORATORIES Inc
Priority to CN201510460355.3A priority Critical patent/CN104978527B/zh
Publication of CN104978527A publication Critical patent/CN104978527A/zh
Application granted granted Critical
Publication of CN104978527B publication Critical patent/CN104978527B/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
    • 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/565Static detection by checking file integrity

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Virology (AREA)
  • General Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Telephonic Communication Services (AREA)
  • Telephone Function (AREA)

Abstract

本发明实施例公开了一种计算程序切片的方法及装置,能够提高终端应用安全性的检测结果的准确度。本发明实施例方法包括:在获取终端应用的smali字节码后,接收目标方法,从终端应用的smali字节码中获取用于调用目标方法的目标smali字节码,并确定目标smali字节码在终端应用的smali字节码中的目标位置;在目标位置处通过预配置的回溯算法获取目标方法的调用参数对应的第一程序切片;若确定通过回溯算法未回溯到目标方法的调用参数的初始化,则根据预配置的函数调用图CG,获取调用目标方法的上层调用者方法;通过回溯算法递归处理上层调用者方法,得到目标方法的调用参数对应的第二程序切片;根据第一程序切片和第二程序切片,获取目标方法的调用参数值。

Description

一种计算程序切片的方法及装置
技术领域
本发明涉及信息安全领域,尤其涉及一种计算程序切片的方法及装置。
背景技术
随着安卓(Android)系统越来越广泛地被搭载在智能手机、平板电脑和数字电视中,Android终端应用的安全问题日益突出。恶意应用入侵系统后,可以获得用户账户、登陆口令、聊天记录等隐私信息,也可以进行非法订阅服务、发送短信等恶意操作,损害了用户的利益。如何有效准确的检测Android系统终端应用的安全性已经成为了一个至关重要的问题。
目前对于Android系统终端应用的分析有两种方法:静态分析法和动态分析。在分析非开源的Android终端应用时,通常都是分析反汇编后得到的smali字节码来获取调用参数值。
但是,无论是静态分析法,还是动态分析法,由于在获取smali字节码的过程中存在信息损失,所以都不能准确获得目标方法的调用参数值,使得终端应用对目标方法的行为的刻画粒度较粗,分析终端应用安全性的结果准确度不高。
发明内容
本发明实施例提供了一种计算程序切片的方法及装置,能够准确获得目标方法的调用参数值,使得终端应用对目标方法的行为的刻画粒度较细,提高了终端应用安全性的检测结果的准确度。
有鉴于此,本发明第一方面提供了一种计算程序切片的方法,包括:
在获取终端应用的smali字节码后,接收目标方法,从所述终端应用的smali字节码中获取用于调用所述目标方法的目标smali字节码,并确定所述目标smali字节码在所述终端应用的smali字节码中的目标位置;
在所述目标位置处通过预配置的回溯算法获取所述目标方法的调用参数对应的第一程序切片;
若确定通过所述回溯算法未回溯到所述目标方法的调用参数的初始化,则根据预配置的函数调用图CG,获取调用所述目标方法的上层调用者方法;
通过所述回溯算法递归处理所述上层调用者方法,得到所述目标方法的调用参数对应的第二程序切片;
根据所述第一程序切片和所述第二程序切片,获取所述目标方法的调用参数值。
结合本发明第一方面,本发明第一方面的第一实施方式中,可包括:
根据所述smali字节码构建原始CG;
将所述原始CG转换为所述预配置的CG;
所述将所述原始CG转换为所述预配置的CG包括:
在所述原始CG中将函数回调机制中的类方法与所述类方法对应的回调方法进行连接,并在所述原始CG中将反射机制中的调用反射的方法与所述调用反射的方法对应的被反射调用的方法进行连接,使得所述原始CG转换为所述预配置的CG。
结合本发明第一方面,本发明第一方面的第二实施方式中,可包括:
在所述目标位置处通过预配置的回溯算法进行回溯,获取对所述目标方法的调用参数值有影响的smali字节码,将对所述目标方法的调用参数值有影响的smali字节码组成所述第一程序切片。
结合本发明第一方面,本发明第一方面的第三实施方式中,可包括:
配置二元组,所述二元组包括所述目标方法和所述目标方法的调用参数值的集合;
所述接收目标方法包括:
接收所述二元组。
结合本发明第一方面,本发明第一方面的第一实施方式,本发明第一方面的第二实施方式,本发明第一方面的第三实施方式,本发明第一方面的第四实施方式中,可包括:
根据所述第一程序切片和所述第二程序切片,获取所述目标方法的调用参数的类型,分别计算不同类型的所述调用参数的调用参数值,以得到所述目标方法的调用参数值。
有鉴于此,本发明第二方面提供了一种计算程序切片的装置,包括:
第一获取单元,用于获取终端应用的smali字节码;
所述接收单元,用于接收目标方法;
第二获取单元,用于从所述终端应用的smali字节码中获取用于调用所述目标方法的目标smali字节码;
第一确定单元,用于确定所述目标smali字节码在所述终端应用的smali字节码中的目标位置;
第三获取单元,用于在所述目标位置处通过预配置的回溯算法获取所述目标方法的调用参数对应的第一程序切片;
第二确定单元,用于确定通过所述回溯算法未回溯到所述目标方法的调用参数的初始化;
第四获取单元,用于根据预配置的函数调用图CG,获取调用所述目标方法的上层调用者方法;
处理单元,用于通过所述回溯算法递归处理所述上层调用者方法,得到所述目标方法的调用参数对应的第二程序切片;
第五获取单元,用于根据所述第一程序切片和所述第二程序切片,获取所述目标方法的调用参数值。
结合本发明第二方面,本发明第二方面的第一实施方式中,可包括:
构建单元,用于根据所述smali字节码构建原始CG;
转换单元,用于将所述原始CG转换为所述预配置的CG;
连接单元,用于在所述原始CG中将函数回调机制中的类方法与所述类方法对应的回调方法进行连接,并在所述原始CG中将反射机制中的调用反射的方法与所述调用反射的方法对应的被反射调用的方法进行连接,使得所述原始CG转换为所述预配置的CG。
结合本发明第二方面,本发明第二方面的第二实施方式中,可包括:
回溯单元,用于在所述目标位置处通过预配置的回溯算法进行回溯;
所述第三获取单元具体用于获取对所述目标方法的调用参数值有影响的smali字节码;
组成单元,用于将对所述目标方法的调用参数值有影响的smali字节码组成所述第一程序切片。
结合本发明第二方面,本发明第二方面的第三实施方式中,可包括:
配置单元,用于配置二元组,所述二元组包括所述目标方法和所述目标方法的调用参数值的集合;
所述接收单元具体用于接收所述二元组。
结合本发明第二方面,本发明第二方面的第一实施方式,本发明第二方面的第二实施方式,本发明第二方面的第三实施方式,本发明第二方面的第四实施方式中,可包括:
所述第五获取单元具体用于根据所述第一程序切片和所述第二程序切片,获取所述目标方法的调用参数的类型;
所述装置还包括:
计算单元,用于分别计算不同类型的所述调用参数的调用参数值,以得到所述目标方法的调用参数值。
从以上技术方案可以看出,本发明实施例具有以下优点:通过回溯算法计算目标方法的调用参数对应的第一程序切片,基于预配置的函数调用图(Call Graph,CG),获取调用目标方法的上层调用者方法,通过回溯算法递归处理该上层调用者方法。得到目标方法的调用参数对应的第二程序切片。由于预配置的CG比原始CG准确,提高了第二程序切片的准确性,根据第一程序切片和第二程序切片获取目标方法的调用参数值也就更为准确。所以本发明能够准确获得目标方法的调用参数值,使得终端应用对目标方法的行为的刻画粒度较细,提高了终端应用安全性的检测结果的准确度。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例系统架构示意图;
图2为本发明实施例方法流程示意图;
图3为本发明实施例CG中的一条可行的方法调用路径;
图4为本发明实施例装置结构示意图;
图5为本发明实施例装置结构示意图。
具体实施方式
本发明实施例提供了一种计算程序切片的方法及装置,能够准确获得目标方法的调用参数值,使得终端应用对目标方法的行为的刻画粒度较细,提高了分析终端应用安全性的结果的准确度。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为了方便理解本发明实施例,下面介绍本发明实施例中的系统架构。
请参阅图1,该系统架构包括预处理模块、输入模块、CG模块、过程内切片模块、过程间切片模块以及输出模块。
其中预处理模块用于对输入的终端应用.apk文件进行预处理,主要完成程序解包和获取smali字节码;
输入模块中配置了二元组<f,v>,其中f为目标方法,v为目标方法的调用参数值的集合。可定义多个二元组实现对任意目标方法的调用参数值的获取;
CG模块用于分析smali字节码,构建原始CG,再处理安卓系统终端应用中的函数回调机制断点和反射机制断点,完成CG的准确构建;
过程内切片模块用于计算目标方法的调用参数值的过程内切片;
过程间切片模块用于基于已构建的CG,计算目标方法的调用参数值的过程间切片;
输出模块用于根据计算得到的过程内切片和过程间切片,整理得到目标方法的调用参数值,并将结果返回给用户。
在上述系统架构的基础上,对计算程序切片的方法通过以下实施例进行说明:
请参阅图2,本发明实施例中计算程序切片的方法包括:
101、在获取终端应用的smali字节码后,接收目标方法,从所述终端应用的smali字节码中获取用于调用所述目标方法的目标smali字节码,并确定所述目标smali字节码在所述终端应用的smali字节码中的目标位置;
本实施例中,获取终端应用的smali字节码的具体步骤可以如下:对终端应用进行解包,获得class.dex文件,解析class.dex文件获得smali字节码。另外,由于终端应用的.apk归档格式与.zip相似,所以可以采用与解压缩.zip文件相似的方法解包终端应用,来获得class.dex文件等重要资源文件。
目标方法指的是:任何用户要分析的类方法称为目标方法,目标方法的调用指的是终端应用对目标方法的具体使用,可以对应一种具体行为。
在接收到目标方法后,遍历smali字节码,从smali字节码中获取用于调用目标方法的目标smali字节码,同时确定目标smali字节码在终端应用的smali字节码中的位置。
可选的,在本发明的一些实施例中,还可以通过配置二元组的方法,进而接收目标方法,具体为:
配置二元组,该二元组包括目标方法和目标方法的调用参数值的集合;
接收上述二元组。
可以理解的是,通过配置二元组实现对目标方法的调用参数值的获取,例如二元组<f,v>,其中f为目标方法,v为目标方法的调用参数值的集合。在实际应用中,可以配置多个二元组实现对任意目标方法的调用参数值的获取。例如,二元组还可以为{<f1,v1><f2,v2>},其中f1可以为System类的loadLibrary()方法,loadLibrary()方法用于终端应用在运行时动态加载库,调用参数为被加载库的名称,v1是该loadLibrary()方法的调用参数。<f2,v2>为其他的用户指定类方法和调用参数。
102、在所述目标位置处通过预配置的回溯算法获取所述目标方法的调用参数对应的第一程序切片;
在目标位置处,通过预配置的回溯算法从该目标位置处回溯该目标位置之前的每一条smali字节码,获取目标方法的调用参数对应的第一程序切片。
需要说明的是,该预配置的回溯算法可以为sliceCompute()函数,还可以采用其他函数,此处不作限定。
可选的,在本发明的一些实施例中,步骤102可以采用如下方法实现:
在目标位置处通过预配置的回溯算法进行回溯,获取对目标方法的调用参数值有影响的smali字节码,将对目标方法的调用参数值有影响的smali字节码组成第一程序切片。
103、若确定通过所述回溯算法未回溯到所述目标方法的调用参数的初始化,则根据预配置的函数调用图CG,获取调用所述目标方法的上层调用者方法;
当回溯算法回溯完毕后。通过回溯算法判断是否回溯到目标方法的调用参数的初始化,若确定未回溯到目标方法的调用参数的初始化,则根据预配置的CG,获取调用该目标方法的上层调用者方法。
需要说明的是,若确定回溯到目标方法的调用参数的初始化,则终止回溯算法,输出第一程序切片,根据第一程序切片获取目标方法的调用参数值。
可选的,在本发明的一些实施例中,介绍了上述预配置的CG,如下:
根据smali字节码构建原始CG;
将原始CG转换为预配置的CG。
其中上述将原始CG转换为预配置的CG具体为:在原始CG中将函数回调机制中的类方法与类方法对应的回调方法进行连接,并在原始CG中将反射机制中的调用反射的方法与调用反射的方法对应的被反射调用的方法进行连接,使得原始CG转换为预配置的CG。
需要说明的是,原始CG主要用于描述终端应用各个类、方法间的调用关系,是一种已有的软件分析手段。CG中的节点是类方法,通过逐一分析每一个类方法,每次遍历所有的smali字节码,当从smali字节码中找到对类方法的调用时,在CG中将相应的类方法节点连接起来,来建立CG。但是,目前的这种建立CG方法并不能直接应用于Android系统终端应用的分析,这是由于Android系统具有一些本身的特点,比如函数回调机制和反射机制。在函数回调机制和反射机制下,上述方法生成的CG中存在本应该被连接的节点而没有被连接的情况。
为此,在原始CG的基础上,要对函数回调机制和反射机制进行处理,得到较为准确的CG,作为本发明进一步分析的基础。
需要说明的是,上述上层调用者方法指的是:以图3为例,图3为CG中的一条可行的方法调用路径,在CG中,目标方法位于箭头后面的类方法中,对应的箭头前面的类方法为调用箭头后面的类方法的上层调用者方法。也就是找到目标方法在箭头后面的类方法中的位置后,相应的找到箭头前面的类方法,也就是上层调用者方法。
以上通过图3来举例是为了对上层调用者方法进行直观性的说明,不应将图3理解为对本发明实施例的唯一性的限定。
104、通过所述回溯算法递归处理所述上层调用者方法,得到所述目标方法的调用参数对应的第二程序切片;
在获取该上层调用者方法后,通过回溯算法,一次递归或者多次递归处理该上层调用者方法,得到该目标方法的调用参数对应的第二程序切片。
需要说明的是,若通过回溯算法进行一次递归就回溯到了该目标方法的调用参数的初始化,则不用进行下一次递归处理,否者需要进行下一次递归处理。
105、根据所述第一程序切片和所述第二程序切片,获取所述目标方法的调用参数值。
根据第一程序切片和第二程序切片,从程序切片的源点(调用参数的初始化),到程序切片的锚点(目标方法的调用),整理得到目标方法的调用参数值。
可以理解的是,若存在多个二元组,则需要判断是否处理完了所有的二元组,若没有,则按照上述步骤执行未处理完的二元组。
可选的,在本发明的一些实施例中,可以采用如下方法来获取目标方法的调用参数值:
根据第一程序切片和第二程序切片,获取目标方法的调用参数的类型,分别计算不同类型的调用参数的调用参数值,以得到目标方法的调用参数值。
上述调用参数的类型包括:常量、数组以及类成员变量等。
本实施例中,通过回溯算法计算目标方法的调用参数对应的第一程序切片,基于预配置的CG,获取调用目标方法的上层调用者方法,通过回溯算法递归处理该上层调用者方法。得到目标方法的调用参数对应的第二程序切片。由于预配置的CG比原始CG准确,提高了第二程序切片的准确性,根据第一程序切片和第二程序切片获取目标方法的调用参数值也就更为准确。所以本发明能够准确获得目标方法的调用参数值,使得终端应用对目标方法的行为的刻画粒度较细,提高了终端应用安全性的检测结果的准确度。
其次,通过配置CG,补全处理了原始CG中存在的断点,提高了获取目标方法的调用参数值的准确性。
再次,通过配置多个二元组,实现了对任意目标方法的调用参数值的获取。
最后,按照目标方法的调用参数的类型进行分别计算,进一步提高了获取目标方法的调用参数值的准确性。
为便于理解,下面以一个具体应用场景对本发明中计算程序切片的方法进行详细描述,具体的:
假设终端应用为helloworld.apk,需要分析该终端应用的shell命令行的调用情况,可以通过分析runtime类的exec()方法的调用情况,exec()方法的调用参数为被调用的shell命令行。首先,对helloworld.apk进行解包,得到class.dex文件,反汇编class.dex文件,获取smali字节码。根据smali字节码构建原始CG,在原始CG中将函数回调机制中的类方法与类方法对应的回调方法进行连接,并在原始CG中将反射机制中的调用反射的方法与调用反射的方法对应的被反射调用的方法进行连接,使得原始CG转换为预配置的CG。配置二元组<f,v>,其中f为exec()方法,v为要获取的调用参数值的集合。接收二元组<f,v>,通过function()函数开始遍历smali字节码,从smali字节码中获取用于调用exec()方法的目标smali字节码,并确定该目标smali字节码在smali字节码中的目标位置i,通过sliceCompute()函数开始由目标位置i进行回溯,获取exec()方法的调用参数对应的第一程序切片。在确定未回溯到exec()方法的调用参数的初始化后,通过预配置的CG,获取调用exec()方法的上层调用者方法,通过sliceCompute()函数递归处理该上层调用者方法,得到exec()方法的调用参数对应的第二程序切片。第一程序切片和第二程序切片包含了所有影响exec()方法的调用参数值的smali字节码,整理得到目标方法的调用参数值。
上面描述了本发明实施例中的计算程序切片的方法,下面对本发明实施例中的计算程序切片的装置进行描述。
请参阅图4,本发明实施例中计算程序切片的装置包括:
第一获取单元201,用于获取终端应用的smali字节码;
接收单元202,用于接收目标方法;
第二获取单元203,用于从所述终端应用的smali字节码中获取用于调用所述目标方法的目标smali字节码;
第一确定单元204,用于确定所述目标smali字节码在所述终端应用的smali字节码中的目标位置;
第三获取单元205,用于在所述目标位置处通过预配置的回溯算法获取所述目标方法的调用参数对应的第一程序切片;
第二确定单元206,用于确定通过所述回溯算法未回溯到所述目标方法的调用参数的初始化;
第四获取单元207,用于根据预配置的函数调用图CG,获取调用所述目标方法的上层调用者方法;
处理单元208,用于通过所述回溯算法递归处理所述上层调用者方法,得到所述目标方法的调用参数对应的第二程序切片;
第五获取单元209,用于根据所述第一程序切片和所述第二程序切片,获取所述目标方法的调用参数值。
可选的,如图5所示,在本发明的一些实施例中,该装置还可以包括:
构建单元210,用于根据所述smali字节码构建原始CG;
转换单元211,用于将所述原始CG转换为所述预配置的CG;
连接单元212,用于在所述原始CG中将函数回调机制中的类方法与所述类方法对应的回调方法进行连接,并在所述原始CG中将反射机制中的调用反射的方法与所述调用反射的方法对应的被反射调用的方法进行连接,使得所述原始CG转换为所述预配置的CG。
可选的,如图5所示,在本发明的一些实施例中,该装置还可以包括:
回溯单元213,用于在所述目标位置处通过预配置的回溯算法进行回溯;
第三获取单元205具体用于获取对所述目标方法的调用参数值有影响的smali字节码;
组成单元214,用于将对所述目标方法的调用参数值有影响的smali字节码组成所述第一程序切片。
可选的,如图5所示,在本发明的一些实施例中,该装置还可以包括:
配置单元215,用于配置二元组,所述二元组包括所述目标方法和所述目标方法的调用参数值的集合;
所述接收单元202具体用于接收所述二元组。
进一步的,该装置还可以包括:
第五获取单元209具体用于根据所述第一程序切片和所述第二程序切片,获取所述目标方法的调用参数的类型;
计算单元216,用于分别计算不同类型的所述调用参数的调用参数值,以得到所述目标方法的调用参数值。
本实施例中,通过回溯算法计算目标方法的调用参数对应的第一程序切片,基于预配置的CG,获取调用目标方法的上层调用者方法,通过回溯算法递归处理该上层调用者方法。得到目标方法的调用参数对应的第二程序切片。由于预配置的CG比原始CG准确,提高了第二程序切片的准确性,根据第一程序切片和第二程序切片获取目标方法的调用参数值也就更为准确。所以本发明能够准确获得目标方法的调用参数值,使得终端应用对目标方法的行为的刻画粒度较细,提高了终端应用安全性的检测结果的准确度。
其次,通过配置CG,补全处理了原始CG中存在的断点,提高了获取目标方法的调用参数值的准确性。
再次,通过配置多个二元组,实现了对任意目标方法的调用参数值的获取。
最后,按照目标方法的调用参数的类型进行分别计算,进一步提高了获取目标方法的调用参数值的准确性。
为便于理解,下面以一个具体应用场景对本发明实施例中的计算程序切片的装置各单元间的交互进行描述:
假设终端应用为helloworld.apk,需要分析该终端应用的shell命令行的调用情况,可以通过分析runtime类的exec()方法的调用情况,exec()方法的调用参数为被调用的shell命令行。首先,对helloworld.apk进行解包,得到class.dex文件,反汇编class.dex文件,第一获取单元201获取smali字节码。构建单元210根据smali字节码构建原始CG,连接单元212在原始CG中将函数回调机制中的类方法与类方法对应的回调方法进行连接,并在原始CG中将反射机制中的调用反射的方法与调用反射的方法对应的被反射调用的方法进行连接,使得转换单元211将原始CG转换为预配置的CG。配置单元215配置二元组<f,v>,其中f为exec()方法,v为要获取的调用参数值的集合。接收单元202接收二元组<f,v>,通过function()函数开始遍历smali字节码,第二获取单元203从smali字节码中获取用于调用exec()方法的目标smali字节码,第一确定单元204确定该目标smali字节码在smali字节码中的目标位置i,回溯单元213通过sliceCompute()函数开始由目标位置i进行回溯,第三获取单元205获取exec()方法的调用参数对应的第一程序切片。在第二确定单元206确定未回溯到exec()方法的调用参数的初始化后,通过预配置的CG,第四获取单元207获取调用exec()方法的上层调用者方法,处理单元208通过sliceCompute()函数递归处理该上层调用者方法,得到exec()方法的调用参数对应的第二程序切片。第一程序切片和第二程序切片包含了所有影响exec()方法的调用参数值的smali字节码,第五获取单元209整理得到目标方法的调用参数值。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种计算程序切片的方法,其特征在于,包括:
在获取终端应用的smali字节码后,接收目标方法,从所述终端应用的smali字节码中获取用于调用所述目标方法的目标smali字节码,并确定所述目标smali字节码在所述终端应用的smali字节码中的目标位置;
在所述目标位置处通过预配置的回溯算法获取所述目标方法的调用参数对应的第一程序切片;
若确定通过所述回溯算法未回溯到所述目标方法的调用参数的初始化,则根据预配置的函数调用图CG,获取调用所述目标方法的上层调用者方法;
通过所述回溯算法递归处理所述上层调用者方法,得到所述目标方法的调用参数对应的第二程序切片;
根据所述第一程序切片和所述第二程序切片,获取所述目标方法的调用参数值。
2.根据权利要求1所述的方法,其特征在于,所述获取终端应用的smali字节码之后,所述方法还包括:
根据所述smali字节码构建原始CG;
将所述原始CG转换为所述预配置的CG;
所述将所述原始CG转换为所述预配置的CG包括:
在所述原始CG中将函数回调机制中的类方法与所述类方法对应的回调方法进行连接,并在所述原始CG中将反射机制中的调用反射的方法与所述调用反射的方法对应的被反射调用的方法进行连接,使得所述原始CG转换为所述预配置的CG。
3.根据权利要求1所述的方法,其特征在于,所述在所述目标位置处通过预配置的回溯算法获取所述目标方法的调用参数对应的第一程序切片包括:
在所述目标位置处通过预配置的回溯算法进行回溯,获取对所述目标方法的调用参数值有影响的smali字节码,将对所述目标方法的调用参数值有影响的smali字节码组成所述第一程序切片。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
配置二元组,所述二元组包括所述目标方法和所述目标方法的调用参数值的集合;
所述接收目标方法包括:
接收所述二元组。
5.根据权利要求1至4任意一项所述的方法,其特征在于,所述根据所述第一程序切片和所述第二程序切片,获取所述目标方法的调用参数值包括:
根据所述第一程序切片和所述第二程序切片,获取所述目标方法的调用参数的类型,分别计算不同类型的所述调用参数的调用参数值,以得到所述目标方法的调用参数值。
6.一种计算程序切片的装置,其特征在于,包括:
第一获取单元,用于获取终端应用的smali字节码;
接收单元,用于接收目标方法;
第二获取单元,用于从所述终端应用的smali字节码中获取用于调用所述目标方法的目标smali字节码;
第一确定单元,用于确定所述目标smali字节码在所述终端应用的smali字节码中的目标位置;
第三获取单元,用于在所述目标位置处通过预配置的回溯算法获取所述目标方法的调用参数对应的第一程序切片;
第二确定单元,用于确定通过所述回溯算法未回溯到所述目标方法的调用参数的初始化;
第四获取单元,用于根据预配置的函数调用图CG,获取调用所述目标方法的上层调用者方法;
处理单元,用于通过所述回溯算法递归处理所述上层调用者方法,得到所述目标方法的调用参数对应的第二程序切片;
第五获取单元,用于根据所述第一程序切片和所述第二程序切片,获取所述目标方法的调用参数值。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
构建单元,用于根据所述smali字节码构建原始CG;
转换单元,用于将所述原始CG转换为所述预配置的CG;
连接单元,用于在所述原始CG中将函数回调机制中的类方法与所述类方法对应的回调方法进行连接,并在所述原始CG中将反射机制中的调用反射的方法与所述调用反射的方法对应的被反射调用的方法进行连接,使得所述原始CG转换为所述预配置的CG。
8.根据权利要求6所述的装置,其特征在于,所述装置还包括:
回溯单元,用于在所述目标位置处通过预配置的回溯算法进行回溯;
所述第三获取单元具体用于获取对所述目标方法的调用参数值有影响的smali字节码;
组成单元,用于将对所述目标方法的调用参数值有影响的smali字节码组成所述第一程序切片。
9.根据权利要求6所述的装置,其特征在于,所述装置还包括:
配置单元,用于配置二元组,所述二元组包括所述目标方法和所述目标方法的调用参数值的集合;
所述接收单元具体用于接收所述二元组。
10.根据权利要求6至9任意一项所述的装置,其特征在于,所述第五获取单元具体用于根据所述第一程序切片和所述第二程序切片,获取所述目标方法的调用参数的类型;
所述装置还包括:
计算单元,用于分别计算不同类型的所述调用参数的调用参数值,以得到所述目标方法的调用参数值。
CN201510460355.3A 2015-07-30 2015-07-30 一种计算程序切片的方法及装置 Active CN104978527B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510460355.3A CN104978527B (zh) 2015-07-30 2015-07-30 一种计算程序切片的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510460355.3A CN104978527B (zh) 2015-07-30 2015-07-30 一种计算程序切片的方法及装置

Publications (2)

Publication Number Publication Date
CN104978527A CN104978527A (zh) 2015-10-14
CN104978527B true CN104978527B (zh) 2017-12-08

Family

ID=54275021

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510460355.3A Active CN104978527B (zh) 2015-07-30 2015-07-30 一种计算程序切片的方法及装置

Country Status (1)

Country Link
CN (1) CN104978527B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102945347A (zh) * 2012-09-29 2013-02-27 中兴通讯股份有限公司 一种检测Android恶意软件的方法、系统及设备
US8589893B1 (en) * 2011-03-22 2013-11-19 Amazon Technologies, Inc. Usage-based program slicing
CN104021084A (zh) * 2014-06-19 2014-09-03 国家电网公司 一种Java源代码缺陷检测方法及装置
CN104794401A (zh) * 2015-04-15 2015-07-22 南京大学 一种静态分析辅助的符号执行漏洞检测方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7620946B2 (en) * 2003-05-05 2009-11-17 Jeffry Thomas Russell Program slicing for codesign of embedded systems
US8984495B2 (en) * 2013-01-03 2015-03-17 International Business Machines Corporation Enhanced string analysis that improves accuracy of static analysis

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8589893B1 (en) * 2011-03-22 2013-11-19 Amazon Technologies, Inc. Usage-based program slicing
CN102945347A (zh) * 2012-09-29 2013-02-27 中兴通讯股份有限公司 一种检测Android恶意软件的方法、系统及设备
CN104021084A (zh) * 2014-06-19 2014-09-03 国家电网公司 一种Java源代码缺陷检测方法及装置
CN104794401A (zh) * 2015-04-15 2015-07-22 南京大学 一种静态分析辅助的符号执行漏洞检测方法

Also Published As

Publication number Publication date
CN104978527A (zh) 2015-10-14

Similar Documents

Publication Publication Date Title
WO2017101606A1 (zh) 一种数据采集分析系统和方法
CN105376335B (zh) 一种采集数据上传方法和装置
US20090089128A1 (en) Service-oriented pipeline based architecture
CN109684052B (zh) 事务分析方法、装置、设备及存储介质
CN111552633A (zh) 接口的异常调用测试方法、装置、计算机设备及存储介质
CN108959319B (zh) 信息推送方法和装置
CN110442502A (zh) 一种埋点的方法、装置、设备及存储介质
CN114531477B (zh) 功能组件的配置方法、装置、计算机设备和存储介质
CN109684008A (zh) 卡片渲染方法、装置、终端及计算机可读存储介质
CN111464513A (zh) 数据检测方法、装置、服务器及存储介质
CN105553770B (zh) 一种数据采集控制方法和装置
WO2023273218A1 (zh) Json报文的核对方法和json报文的核对装置
CN110008173A (zh) 一种数据存储的方法及装置
CN109635993A (zh) 基于预测模型的操作行为监控方法及装置
CN108897592A (zh) 一种软件展示方法及相关设备
CN110443044A (zh) 区块链客户端漏洞挖掘方法、装置、设备及存储介质
CN117931576A (zh) 前端数据收集方法、装置及电子设备
CN106372992A (zh) 访问控制方法及访问控制装置
CN109168138A (zh) 网内换号的识别方法、装置及设备
CN104978527B (zh) 一种计算程序切片的方法及装置
CN105094810B (zh) 基于通用网关接口插件的数据处理方法和装置
CN107734006A (zh) 一种统计日志发送方法、装置及电子设备
CN114390015B (zh) 一种基于物模型的数据推送系统、方法、设备及存储介质
CN110020166B (zh) 一种数据分析方法及相关设备
WO2022262725A1 (zh) 一种事件分析的方法及其装置

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