一种识别APP程序中第三方库的方法技术

技术编号:19263142 阅读:26 留言:0更新日期:2018-10-27 02:12
本发明专利技术涉及信息安全技术领域,公开了一种识别APP程序中第三方库的方法。通过本发明专利技术创造,可提供一种基于函数调用关系的、在APP已混淆程序中能够识别是否使用第三方库的方法,考虑在APP程序中嵌入第三方库,是为了使用它的功能,常规的混淆并不改变函数之间的调用关系以及类之间的相对路径,因此将调用关系最复杂的函数作为特征函数,并为该特征函数计算防混淆的函数特征值,可以利用该函数特征值唯一表征第三方库,进而通过后续地函数特征值的对比,可以在APP已混淆程序中高精准地识别出是否使用已知的第三方库,便于实际应用和推广。

A method of identifying third party Library in APP program

The invention relates to the field of information security technology, and discloses a method for identifying third party libraries in APP programs. By the invention, a method based on function call relationship can be provided to identify whether to use a third-party library in an APP obfuscated program. Considering embedding a third-party library in an APP program is to use its functions, conventional obfuscation does not change the call relationship between functions and the relative path between classes. Therefore, the function with the most complex call relationship is taken as the characteristic function, and the anti-obfuscation function eigenvalue is calculated for the eigenvalue. The third-party library can be uniquely represented by the eigenvalue of the function. By comparing the eigenvalues of subsequent functions, it is possible to identify with high precision whether the known function is used in the obfuscated APP program. The third party library is convenient for practical application and promotion.

【技术实现步骤摘要】
一种识别APP程序中第三方库的方法
本专利技术属于信息安全
,具体涉及一种识别APP程序中第三方库的方法。
技术介绍
当前安卓APP程序中经常嵌有大量的第三方库(即第三方的软件包),但是有可能已被混淆,很难识别出安卓APP程序中具体使用了哪些第三方库。目前识别第三方库的方法主要有如下两种:(1)直接使用函数名匹配的方法,即首先提取第三方库中函数的函数名,再提取APP程序中的函数名,通过函数名匹配的方法确定在APP程序中是否使用了该第三方库,但是如果APP程序出现代码混淆的话,就行不通了;(2)对第三方库中的所有类计算特征值,再对APP程序中的所有类计算特征值,最终进行特征值匹配,如果第三方库有60%以上的类出现在了APP程序中,就认为在APP程序中使用了该第三方库,但是这样识别的准确率不够高,需要60%这个阈值。由此有必要提供一种可识别一个给定APP程序中使用了哪些第三方库的新方法。
技术实现思路
为了解决现有技术存在的上述问题,本专利技术目的在于提供一种识别APP程序中第三方库的方法。本专利技术所采用的技术方案为:一种识别APP程序中第三方库的方法,包括如下步骤:S101.收集已知的第三方库;S102.针对各个第三方库,通过预处理获取对应第三方库中的所有函数,并根据函数调用关系确定该第三方库的特征函数;S103.针对各个第三方库的特征函数,确定第一函数特征值;S104.针对目标APP程序,通过预处理获取目标APP程序中的所有函数;S105.针对目标APP程序中的各个函数,按照与步骤S103一致的方法,确定第二函数特征值;S106.遍历目标APP程序中各个函数的第二函数特征值,若与其中一个第三方库的第一函数特征值相同,则确定在目标APP程序中使用了该第三方库。具体的,在所述步骤S103中,按照如下步骤确定第一函数特征值:S201.获取特征函数的返回值类型,若该返回值类型为系统类型,则将该返回值类型作为第一特征字段,否则获取该返回值类型与参考类的相对路径,并将经匿名化处理的该相对路径作为第一特征字段;S202.获取特征函数的所有参数类型,并针对每个参数类型,若该参数类型为系统类型,则将该参数类型作为第二特征字段,否则获取该参数类型与参考类的相对路径,将经匿名化处理的该相对路径作为第二特征字段;S203.判断特征函数是否拥有直接调用的被调用函数,若有则将被调用函数视为特征函数,按照与步骤S103一致的方法,获取各个被调用函数的函数特征值,然后依次拼接第一特征字段、所有的第二特征字段和按字母顺序排序的所有被调用函数的函数特征值,得到特征函数的特征字符串;S204.对特征函数的特征字符串进行哈希算法处理,获取第一函数特征值。进一步具体的,在所述步骤S203中,若判断特征函数没有直接调用的被调用函数,则依次拼接第一特征字段和所有的第二特征字段,得到特征函数的特征字符串。进一步具体的,在所述步骤S204中,对特征字符串进行哈希算法处理的哈希算法为MD5算法。进一步具体的,在所述步骤S201和所述步骤S202中,对相对路径进行匿名化处理的方式为:将相对路径中的所有字符串替换为特定字符。具体的,在所述步骤S102中,具体包括如下步骤:S401.对第三方库进行预处理,获取Dalvik字节码;S402.根据Dalvik字节码获取第三方库中的所有函数,并按照如下方式生成表征函数调用关系的函数调用图:每个节点表示一个函数,每个单向箭头指向被调用函数;S403.针对函数调用图中的各个函数,以其为起点得到对应的函数调用子图;S404.按照函数调用子图中的节点个数进行排序,取节点个数最多的函数调用子图所在的起点函数为特征函数。具体的,所述目标APP程序为安卓程序。本专利技术的有益效果为:(1)本专利技术创造提供了一种基于函数调用关系的、在APP已混淆程序中能够识别是否使用第三方库的方法,考虑在APP程序中嵌入第三方库,是为了使用它的功能,常规的混淆并不改变函数之间的调用关系以及类之间的相对路径,因此将调用关系最复杂的函数作为特征函数,并为该特征函数计算防混淆的函数特征值,可以利用该函数特征值唯一表征第三方库,进而通过后续地函数特征值的对比,可以在APP已混淆程序中高精准地识别出是否使用已知的第三方库,便于实际应用和推广。附图说明为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本专利技术提供的识别APP程序中第三方库的方法流程示意图。图2是本专利技术提供的函数调用图的示例图。具体实施方式下面结合附图及具体实施例对本专利技术作进一步阐述。在此需要说明的是,对于这些实施例方式的说明用于帮助理解本专利技术,但并不构成对本专利技术的限定。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,单独存在B,同时存在A和B三种情况,本文中术语“/和”是描述另一种关联对象关系,表示可以存在两种关系,例如,A/和B,可以表示:单独存在A,单独存在A和B两种情况,另外,本文中字符“/”,一般表示前后关联对象是一种“或”关系。实施例一如图1和2所示,本实施例提供的所述识别APP程序中第三方库的方法,包括如下步骤。S101.收集已知的第三方库。S102.针对各个第三方库,通过预处理获取对应第三方库中的所有函数,并根据函数调用关系确定该第三方库的特征函数。在所述步骤S102中,所述预处理的方式可以但不限于包括反编译方式,具体包括如下步骤:S401.对第三方库进行预处理,获取Dalvik字节码;S402.根据Dalvik字节码获取第三方库中的所有函数,并按照如下方式生成表征函数调用关系的函数调用图:每个节点表示一个函数,每个单向箭头指向被调用函数;S403.针对函数调用图中的各个函数,以其为起点得到对应的函数调用子图;S404.按照函数调用子图中的节点个数进行排序,取节点个数最多的函数调用子图所在的起点函数为特征函数(也可以是取节点个数最多的两个或多个函数调用子图所在的起点函数为特征函数)。以下面经反编译预处理得到的第三方库部分代码为例,其包含有两个类:“User”和“Utils”,每个类中都有函数,从第14行代码可以看出“User”类的loadProfile函数(即附图2中的节点A)调用了“Utils”类的isNetworkAvailable函数(即附图2中的节点B),因此在函数调用图中添加一条从节点A指向节点B的单向箭头(即由loadProfile函数指向isNetworkAvailable函数)。构建完函数调用图后,对函数调用图中的任意节点,以其为起点可以得到一个函数调用子图。根据函数调用子图中的节点个数对这些子图进行排序,取最大(第一个)的子图所在的起点函数为特征函数,并将这个特征函数所在的类为参考类。S103.针对各个第三方库的特征函数,确定第一函数特征值。在所述步骤S103中,具体的,按照如下步骤确定第一函数特征值:S201.获取特征函数的返回值类型,若该返回值类型为系统类型,则将该返回值类型作为第本文档来自技高网...

【技术保护点】
1.一种识别APP程序中第三方库的方法,其特征在于,包括如下步骤:S101.收集已知的第三方库;S102.针对各个第三方库,通过预处理获取对应第三方库中的所有函数,并根据函数调用关系确定该第三方库的特征函数;S103.针对各个第三方库的特征函数,确定第一函数特征值;S104.针对目标APP程序,通过预处理获取目标APP程序中的所有函数;S105.针对目标APP程序中的各个函数,按照与步骤S103一致的方法,确定第二函数特征值;S106.遍历目标APP程序中各个函数的第二函数特征值,若与其中一个第三方库的第一函数特征值相同,则确定在目标APP程序中使用了该第三方库。

【技术特征摘要】
1.一种识别APP程序中第三方库的方法,其特征在于,包括如下步骤:S101.收集已知的第三方库;S102.针对各个第三方库,通过预处理获取对应第三方库中的所有函数,并根据函数调用关系确定该第三方库的特征函数;S103.针对各个第三方库的特征函数,确定第一函数特征值;S104.针对目标APP程序,通过预处理获取目标APP程序中的所有函数;S105.针对目标APP程序中的各个函数,按照与步骤S103一致的方法,确定第二函数特征值;S106.遍历目标APP程序中各个函数的第二函数特征值,若与其中一个第三方库的第一函数特征值相同,则确定在目标APP程序中使用了该第三方库。2.如权利要求1所述的一种识别APP程序中第三方库的方法,其特征在于,在所述步骤S103中,按照如下步骤确定第一函数特征值:S201.获取特征函数的返回值类型,若该返回值类型为系统类型,则将该返回值类型作为第一特征字段,否则获取该返回值类型与参考类的相对路径,并将经匿名化处理的该相对路径作为第一特征字段;S202.获取特征函数的所有参数类型,并针对每个参数类型,若该参数类型为系统类型,则将该参数类型作为第二特征字段,否则获取该参数类型与参考类的相对路径,将经匿名化处理的该相对路径作为第二特征字段;S203.判断特征函数是否拥有直接调用的被调用函数,若有则将被调用函数视为特征函数,按照与步骤S103一致的方法,获取各个被调用函数的函数特征值,然后依次拼接第一特征字段、所有的第二特征字段和...

【专利技术属性】
技术研发人员:闫晓艳刘亮张耀
申请(专利权)人:四川普思科创信息技术有限公司
类型:发明
国别省市:四川,51

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

1