一种第三方库检测方法及装置转让专利

申请号 : CN202111207132.8

文献号 : CN113641363B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 高飞文惠东秦素娟温巧燕李文敏

申请人 : 北京邮电大学

摘要 :

本说明书一个或多个实施例提供一种第三方库检测方法及装置,包括:对应用程序包进行反编译,识别混淆的待测第三方库;确定用于代表待测第三方库的核心逻辑类;从所述核心逻辑类中提取多个指令特征,形成特征文件;响应于所述特征文件与标准库的标准库文件达到预设的匹配条件,所述待测第三方库为所述标准库。本说明书能够降低计算量,提高匹配精度,提高检测效率。

权利要求 :

1.一种第三方库检测方法,其特征在于,包括:对应用程序包进行反编译,识别混淆的待测第三方库;

确定用于代表待测第三方库的核心逻辑类;其中,所述核心逻辑类的特征包括:位于顶层接口类和底层工具类之间的位置;连接所述待测第三方库中达到预定第一数量的类;调用所述待测第三方库中达到预定第二数量的自定义方法;以及包含达到预定第三数量的指令集操作码;

从所述核心逻辑类中提取多个指令特征,形成特征文件;

响应于所述特征文件与标准库的标准库文件达到预设的匹配条件,所述待测第三方库为所述标准库,包括:根据所述特征文件的内容和标准库文件的内容,对所述标准库进行筛选,得到筛选后的标准库;利用滑动窗口的特征匹配方法,将所述特征文件与筛选后的标准库的标准库文件进行匹配,得到与待测第三方库匹配的标准库。

2.根据权利要求1所述的方法,其特征在于,所述确定用于代表待测第三方库的核心逻辑类,包括:

根据反编译后获得的多个smali文件,确定各smali文件之间的依赖关系,并确定顶层接口类和底层工具类;

根据所述依赖关系构造转移矩阵和初始影响力矩阵;

将所述转移矩阵和初始影响力矩阵进行迭代相乘,直至达到收敛条件,得到最终影响力矩阵;

根据所述最终影响力矩阵,排除所述顶层接口类和底层工具类之后,选取影响力最大的类作为所述核心逻辑类。

3.根据权利要求2所述的方法,其特征在于,所述收敛条件为:当所述转移矩阵和初始影响力矩阵或迭代过程中生成的中间影响力矩阵单次相乘超过时间阈值时,停止迭代;和/或,本次相乘后,所述初始影响力矩阵中原本不为0的一项或几项变为0,停止迭代。

4.根据权利要求1所述的方法,其特征在于,从所述核心逻辑类中提取多个指令特征,形成特征文件,包括:

确定所述核心逻辑类所使用的所有方法,以及每个方法所使用的所有指令特征;

将所述指令特征处理为指令摘要特征;

以每个方法的所有指令摘要特征为一行,构造包括所有方法的所有指令摘要特征的特征文件。

5.根据权利要求1所述的方法,其特征在于,所述根据所述特征文件的内容和标准库文件的内容,对所述标准库进行筛选,得到筛选后的标准库,包括:根据所述特征文件中的方法数量与标准库文件中的方法数量,所述特征文件中的指令摘要特征数量和标准库文件中的指令摘要特征数量,按照预设的初筛条件,进行第一次筛选,得到初步筛选后的标准库;

根据所述特征文件中每行的指令摘要特征数量与初步筛选后的标准库的标准库文件中每行的指令摘要特征数量,按照预设的二次筛选条件,进行第二次筛选,得到二次筛选后的标准库。

6.根据权利要求5所述的方法,其特征在于,所述利用滑动窗口的特征匹配方法,将所述特征文件与筛选后的标准库的标准库文件进行匹配,得到与待测第三方库匹配的标准库,包括:

根据所述特征文件中的每行指令摘要特征与所述二次筛选后的标准库的标准库文件的每行指令摘要特征,利用滑动窗口进行特征匹配,得到特征匹配结果;

根据所述特征匹配结果,确定符合匹配条件的标准库;

计算所述符合匹配条件的标准库的匹配分数,选取匹配分数最高的标准库作为与待测第三方库匹配的标准库。

7.根据权利要求6所述的方法,其特征在于,计算所述匹配分数的方法为:根据所述标准库文件中指令摘要特征的总数、滑动窗口匹配过程中的异步滑动总次数、匹配成功的方法数、方法总数、所述指令摘要特征所占权重,以及方法所占权重,计算所述匹配分数。

8.一种第三方库检测装置,其特征在于,包括:识别模块,用于对应用程序包进行反编译,识别混淆的待测第三方库;

确定模块,用于确定用于代表待测第三方库的核心逻辑类;其中,所述核心逻辑类的特征包括:位于顶层接口类和底层工具类之间的位置;连接所述待测第三方库中达到预定第一数量的类;调用所述待测第三方库中达到预定第二数量的自定义方法;以及包含达到预定第三数量的指令集操作码;

提取模块,用于从所述核心逻辑类中提取多个指令特征,形成特征文件;

匹配模块,用于响应于所述特征文件与标准库的标准库文件达到预设的匹配条件,所述待测第三方库为所述标准库,包括:根据所述特征文件的内容和标准库文件的内容,对所述标准库进行筛选,得到筛选后的标准库;利用滑动窗口的特征匹配方法,将所述特征文件与筛选后的标准库的标准库文件进行匹配,得到与待测第三方库匹配的标准库。

说明书 :

一种第三方库检测方法及装置

技术领域

[0001] 本说明书一个或多个实施例涉及软件技术领域,尤其涉及一种第三方库检测方法及装置。

背景技术

[0002] 第三方库广泛用于构建新功能或整合外部服务,同时存在攻击宿主应用程序的安全性问题。一般的应用程序为防止反编译获取源代码,会对源代码进行混淆,所调用的第三
方库名称被改变,不利于检测出第三方库及其安全性。
[0003] 目前的第三方库检测方法,例如,基于白名单的检测、基于聚类的检测和基于特征匹配的检测等,需要对第三方库整体进行特征提取与匹配,计算量大,特征量大影响匹配精
度,检测效率不高。

发明内容

[0004] 有鉴于此,本说明书一个或多个实施例的目的在于提出一种第三方库检测方法及装置,以解决第三方库的检测问题。
[0005] 基于上述目的,本说明书一个或多个实施例提供了一种第三方库检测方法,包括:
[0006] 对应用程序包进行反编译,识别混淆的待测第三方库;
[0007] 确定用于代表待测第三方库的核心逻辑类;
[0008] 从所述核心逻辑类中提取多个指令特征,形成特征文件;
[0009] 响应于所述特征文件与标准库的标准库文件达到预设的匹配条件,所述待测第三方库为所述标准库。
[0010] 可选的,所述核心逻辑类的特征包括:
[0011] 位于顶层接口类和底层工具类之间的位置;连接所述待测第三方库中达到预定第一数量的类;调用所述待测第三方库中达到预定第二数量的自定义方法;以及包含达到预
定第三数量的指令集操作码。
[0012] 可选的,所述确定用于代表待测第三方库的核心逻辑类,包括:
[0013] 根据反编译后获得的多个smali文件,确定各smali文件之间的依赖关系,并确定顶层接口类和底层工具类;
[0014] 根据所述依赖关系构造转移矩阵和初始影响力矩阵;
[0015] 将所述转移矩阵和初始影响力矩阵进行迭代相乘,直至达到收敛条件,得到最终影响力矩阵;
[0016] 根据所述最终影响力矩阵,排除所述顶层接口类和底层工具类之后,选取影响力最大的类作为所述核心逻辑类。
[0017] 可选的,所述收敛条件为:
[0018] 当所述转移矩阵和初始影响力矩阵或迭代过程中生成的中间影响力矩阵单次相乘超过时间阈值时,停止迭代;和/或,
[0019] 本次相乘后,所述初始影响力矩阵中原本不为0的一项或几项变为0,停止迭代。
[0020] 可选的,所述从核心逻辑类中提取多个指令特征,形成特征文件,包括:
[0021] 确定所述核心逻辑类所使用的所有方法,以及每个方法所使用的所有指令特征;
[0022] 将所述指令特征处理为指令摘要特征;
[0023] 以每个方法的所有指令摘要特征为一行,构造包括所有方法的所有指令摘要特征的特征文件。
[0024] 可选的,所述响应于所述特征文件与标准库的标准库文件达到预设的匹配条件,待测第三方库为所述标准库,包括:
[0025] 根据所述特征文件的内容和标准库文件的内容,对所述标准库进行筛选,得到筛选后的标准库;
[0026] 利用滑动窗口的特征匹配方法,将所述特征文件与筛选后的标准库的标准库文件进行匹配,得到与待测第三方库匹配的标准库。
[0027] 可选的,所述根据所述特征文件的内容和标准库文件的内容,对所述标准库进行筛选,得到筛选后的标准库,包括:
[0028] 根据所述特征文件中的方法数量与标准库文件中的方法数量,所述特征文件中的指令摘要特征数量和标准库文件中的指令摘要特征数量,按照预设的初筛条件,进行第一
次筛选,得到初步筛选后的标准库;
[0029] 根据所述特征文件中每行的指令摘要特征数量与初步筛选后的标准库的标准库文件中每行的指令指令摘要特征数量,按照预设的二次筛选条件,进行第二次筛选,得到二
次筛选后的标准库。
[0030] 可选的,所述利用滑动窗口的特征匹配方法,将所述特征文件与筛选后的标准库的标准库文件进行匹配,得到与待测第三方库匹配的标准库,包括:
[0031] 根据所述特征文件中的每行指令摘要特征与所述二次筛选后的标准库的标准库文件的每行指令摘要特征,利用滑动窗口进行特征匹配,得到特征匹配结果;
[0032] 根据所述特征匹配结果,确定符合匹配条件的标准库;
[0033] 计算所述符合匹配条件的标准库的匹配分数,选取匹配分数最高的标准库作为与待测第三方库匹配的标准库。
[0034] 可选的,所述计算匹配分数的方法为:
[0035] 根据所述标准库文件中指令摘要特征的总数、滑动窗口匹配过程中的异步滑动总次数、匹配成功的方法数、方法总数、所述指令摘要特征所占权重,以及方法所占权重,计算
所述匹配分数。
[0036] 本说明书实施例提供一种第三方库检测装置,包括:
[0037] 识别模块,用于对应用程序包进行反编译,识别混淆的待测第三方库;
[0038] 确定模块,用于确定用于代表待测第三方库的核心逻辑类;
[0039] 提取模块,用于从所述核心逻辑类中提取多个指令特征,形成特征文件;
[0040] 匹配模块,用于响应于所述特征文件与标准库的标准库文件达到预设的匹配条件,所述待测第三方库为所述标准库。
[0041] 从上面所述可以看出,本说明书一个或多个实施例提供的第三方库检测方法及装置,通过对应用程序包进行反编译,识别混淆的待测第三方库,确定用于代表待测第三方库
的核心逻辑类,从核心逻辑类中提取多个指令特征,形成特征文件,当特征文件与标准库的
标准库文件达到预设的匹配条件,待测第三方库为标准库。本说明书能够降低计算量,提高
匹配精度,提高检测效率。

附图说明

[0042] 为了更清楚地说明本说明书一个或多个实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的
附图仅仅是本说明书一个或多个实施例,对于本领域普通技术人员来讲,在不付出创造性
劳动的前提下,还可以根据这些附图获得其他的附图。
[0043] 图1为本说明书一个或多个实施例的方法流程示意图;
[0044] 图2为本说明书一个或多个实施例的确定核心逻辑类的方法流程示意图;
[0045] 图3为本说明书一个或多个实施例的部分smali文件的内容示意图;
[0046] 图4为本说明书一个或多个实施例的类之间的链接关系示意图;
[0047] 图5为本说明书一个或多个实施例的转移矩阵的示意图;
[0048] 图6为本说明书一个或多个实施例的初始影响力矩阵的示意图;
[0049] 图7为本说明书另一个实施例的类之间的链接关系示意图;
[0050] 图8为本说明书一个或多个实施例的最终影响力矩阵的示意图;
[0051] 图9为本说明书一个或多个实施例的特征文件的内容示意图;
[0052] 图10为本说明书一个或多个实施例的滑动窗口匹配的示意图;
[0053] 图11为本说明书一个或多个实施例的装置结构示意图;
[0054] 图12为本说明书一个或多个实施例的电子设备结构示意图。

具体实施方式

[0055] 为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
[0056] 需要说明的是,除非另外定义,本说明书一个或多个实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本说明书一个
或多个实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要
性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面
的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或
者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包
括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关
系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
[0057] 如背景技术部分所述,基于白名单的第三方库检测方法,需要构建第三方库的白名单,然后从应用程序中提取出所有的第三方库,将所有第三方库与白名单进行特征匹配;
基于聚类的第三方库检测方法,通常是设计一个相似度度量或使用基于特征的散列算法,
以其为核心设计特征提取和匹配机制,按照设计的特征提取和匹配规则对应用程序中的所
有第三方库进行处理;基于特征匹配的检测方,根据非名称特征和混淆的特点生成签名,根
据签名匹配规则计算第三方库和检测库中个体之间的匹配度。由此可见,一般的第三方库
检测方法均需对应用程序中的所有第三方库进行整体的特征提取与匹配处理,计算量大,
特征量大导致影响匹配精度,检测效率不高。
[0058] 有鉴于此,本说明书实施例提供一种第三方库检测方法,从应用程序中识别出混淆的待测第三方库,从待测第三方库中提取核心逻辑类,将核心逻辑类作为待测第三方库
的代表,基于核心逻辑类进行特征提取与匹配,从而确定出待测第三方库所属真实库,由于
仅对核心逻辑类进行特征提取与匹配处理,能够降低计算量,提高匹配精度,提高检测效
率。
[0059] 以下,通过具体的实施例进一步详细说明本公开的技术方案。
[0060] 如图1所示,本说明书实施例提供一种第三方库检测方法,包括:
[0061] S101:对应用程序包进行反编译,识别混淆的待测第三方库;
[0062] 本实施例中,利用反编译工具对应用程序进行反编译,获得组成应用程序的文件,基于组成应用程序的文件,识别出重命名混淆的第三方库。
[0063] 一些应用场景中,对于安卓系统的apk应用程序包,利用apktool工具对apk进行反编译,生成按照程序结构组织的smali文件,通过分析程序结构,第三方库主要存在于com文
件夹和org文件夹中,对这两个文件夹进行分析,按照包的组织结构记录第三方库的名称。
在所记录的所有第三方库的名称中,存在未混淆的名称和被混淆的名称,对于未混淆的名
称,可直接保存于第三方库日志文件中,对于被混淆的名称,一方面可保存于第三方库日志
文件中,另一方面对被混淆的名称进行标记,将标记的第三方库作为待测第三方库进行后
续处理,若标记的第三方库有多个,则形成待测第三方库列表,后续对该列表中的每个待测
第三方库进行处理。
[0064] 一些方式中,按照预设的混淆规则库对第三方库的名称进行匹配,将符合特定混合规则的名称识别为被混淆的名称。其中,混淆规则库由若干混合规则构成,混合规则包括
通用的混合规则,自定义的混合规则,以及通过分析被混淆的名称确定出的混合规则等,本
实施例不对具体的混合规则进行限定。
[0065] 举例来说,混合规则可以是:1)名称为单个字符,例如:/a,/b;2)名称由几个相同的字符组成,例如:/aa,/bbb;3)名称是字符和特殊数字的组合,例如:/a1,/bb123;4)名称
为几个字符,例如:a/b/c等。
[0066] S102:确定用于代表待测第三方库的核心逻辑类;
[0067] 本实施例中,从待测第三方库中提取出核心逻辑类,后续通过对核心逻辑类进行分析,而不再对待测第三方库进行整体分析。其中,核心逻辑类的特征包括:位于顶层接口
和底层工具之间的位置,连接待测第三方库中达到预定第一数量的类,调用待测第三方库
中达到预定第二数量的自定义方法,包含达到预定第三数量的指令集操作码。其中,第一数
量、第二数量和第三数量可根据待测第三方库中所包含的类总数、自定义方法总数及指令
集操作码总数进行配置,具体不做限定。
[0068] 举例来说,对于Fastjson库,用于将 Java 对象转换为 JSON 格式,或是将 JSON 字符串转换为 Java 对象。Fastjson库共包含JSONAware类、SerialLizerFeature类、JSON
类、Feature类、JSONArray类、JSONCreator类、JSONField类、JSONStreamAware类、JSONType
类。其中,JSONAware类、JSONArray类、JSONField类、JSONType类、JSONStreamAware类为顶
层接口类,SerialLizerFeature类、Feature类为底层工具类,中间类为JSON类,
JSONCreator类与其他各类均无关联关系。通过分析,JSON类为Fastjson库的核心逻辑类,
其具有以下几个特征:1)位于顶层接口类和底层工具类之间的位置; 2) 与Fastjson库中
的预定第一数量的类有着直接或间接关联;3)包含有预定第二数量的本库自定义方法,而
不是Java或Android提供的接口;4)由该类产生的smali文件中包含有预定第三数量的可供
分析的指令集操作码,即该类中的代码语句应较为丰富。
[0069] S103:从核心逻辑类中提取多个指令特征,形成特征文件;
[0070] 本实施例中,基于代表待测第三方库的核心逻辑类,从中提取出多个指令特征,并保存于特征文件中。其中,指令特征是应用程序的指令集中的特定操作指令,考虑到操作指
令易于识别,使用数量多,且偏向底层寄存器,能够更好地反映应用程序的结构,所以选取
指令集中的操作指令作为可提取的指令特征,不仅便于识别提取,而且特征数量大且具有
代表性,能够保证匹配精度。可选的,指令集为Dalvik指令集。
[0071] S104:响应于特征文件与标准库的标准库文件达到预设的匹配条件,待测第三方库为标准库。
[0072] 本实施例中,从核心逻辑类中提取出全部指令特征后,将包含全部指令特征的特征文件与标准库的标准库文件进行匹配,当特征文件与标准库文件匹配成功时,可确定待
测第三方库为标准库或者是该标准库的变种库,该标准库的名称即为待测第三方库的名
称。
[0073] 本实施例提供的第三方库检测方法,包括对应用程序包进行反编译,识别混淆的待测第三方库,确定待测第三方库的核心逻辑类,从核心逻辑类中提取多个指令特征,形成
特征文件,当特征文件与标准库文件达到预设的匹配条件时,待测第三方库为标准库。由于
将核心逻辑类作为代表待测第三方库的类进行特征提取和匹配处理,能够有效降低计算
量,同时保证匹配精度,提高检测效率。
[0074] 一些实施例中,确定待测第三方库的核心逻辑类为基于PageRank算法确定核心逻辑类。如图2所示,基于PageRank算法确定核心逻辑类的方法,包括:
[0075] S201:根据反编译后获得的多个smali文件,确定各smali文件之间的依赖关系,确定顶层接口类和底层工具类;
[0076] 本实施例中,对反编译生成的各smali文件进行分析,确定各smali文件之间的依赖关系,并确定出顶层接口类和底层工具类。其中,顶层接口类、底层工具类与本库的其他
类均为单向关系。具体的,顶层接口类只会引用本库的其他类,只存在入链而不会有出链;
底层工具类只会被本库的其他类所引用,只存在出链而不会有入链;利用顶层接口类和底
层工具类的上述特征,通过对smali文件进行分析,确定出顶层接口类和底层工具类,并可
生成包括顶层接口类和底层工具类的排除列表,用于后续筛选核心逻辑类使用。
[0077] 结合图3所示,举例来说,在JSON类的smali文件中,方框内代码为该类的上一层类,由于顶层接口类不存在上一层类,所以通过这部分可以判断该类是否为顶层接口类;划
线部分代码为该类引用了本库中的类,由于底层工具类不会引用本库中的类,只会引用
Java或Android提供的接口,所以通过这部分可以判断该类是否为底层工具类。
[0078] S202:根据依赖关系构造转移矩阵和初始影响力矩阵;
[0079] 本实施例中,确定各smali文件之间的依赖关系之后,根据依赖关系构造转移矩阵和影响力矩阵。其中,smali文件之间的依赖关系为当前类与其他类之间的关联关系,根据
当前类与其他类之间的关联关系,构造转移矩阵和初始影响力矩阵,转移矩阵的每一列表
示一个类,该列的数值表示该类的上层类的分布和数量;初始影响力矩阵根据库中所有存
在关联关系的类的数量,将1进行均分得到。
[0080] 结合图4、5、6所示,Fastjson库具有九个类,通过对smali文件进行分析,确定出各类之间的关联关系,由于其中一个类与其他八个类均没有关联关系,所以不考虑该类。对于
其他八个类,类0与其上层类2、3、4具有关联关系,则,对应于类0的第一列中,第二、三、四行
的值均为将1进行三等分得到的0.33;按照上述方法,构造得到包括八个类之间的关联关系
的转移矩阵。对于初始影响力矩阵,将1进行八等分得到一列八行的影响力矩阵,每个元素
取值为0.125。
[0081] S203:将转移矩阵和初始影响力矩阵进行迭代相乘,直至达到收敛条件,得到最终影响力矩阵;
[0082] 本实施例中,为了解决等级沉没问题,确定收敛条件为:当转移矩阵和初始影响力矩阵或迭代过程中生成的中间影响力矩阵单次相乘超过时间阈值时,停止迭代;其中,时间
阈值可根据设备的处理性能设定;和/或,本次相乘后,初始影响力矩阵中原本不为0的一项
或几项变为0,停止迭代;停止迭代后,得到最终影响力矩阵。
[0083] 同时,为了解决等级泄露问题,根据已确定出的顶层接口类,如果有n个类指向顶层接口类,在构造转移矩阵时,由顶层接口类指出n条边到每一个引用了该顶层接口类的类
(如图7中的虚线箭头),但是被指的类并不计算入链,避免计算多余的入链影响最终结果。
需要注意的是:位于顶层的一些类并不是标准的顶层接口类(标准的顶层接口类是指只包
括接口的类,其内部没有方法和方法体),但是也应按此方法进行处理。
[0084] S204:根据最终影响力矩阵,排除顶层接口类和底层工具类之后,选取影响力最大的类作为核心逻辑类。
[0085] 本实施例中,得到最终影响力矩阵之后,根据已经确定出的顶层接口类和底层工具类,将最终影响力矩阵中对应顶层接口类和底层工具类的影响力分数结果排除,从剩余
的影响力分数中选取出分数最高的类作为核心逻辑类。
[0086] 结合图8所示示例,计算得到最终影响力矩阵之后,先将除第四行外的顶层接口类和底层工具类的分数结果排除,之后,从中选取出分数最高的类作为核心逻辑类,即选取出
第四行,其所对应的类即为核心逻辑类。
[0087] 一些实施例中,从核心逻辑类中提取多个指令特征,形成特征文件,包括:
[0088] 确定核心逻辑类所使用的所有方法,以及每个方法所使用的所有指令特征;
[0089] 将指令特征处理为指令摘要特征;
[0090] 以每个方法的所有指令摘要特征为一行,构造包括所有方法的所有指令摘要特征的特征文件。
[0091] 本实施例中,在确定待测第三方库的核心逻辑类之后,基于反编译后获取的核心逻辑类的smali文件,从中提取出核心逻辑类所使用的所有方法,以及每个方法所使用的指
令特征。为进一步降低计算量、提高处理效率,以指令摘要特征代替指令特征,将每个方法
所对应的指令摘要特征保存于特征文件中,用于后续特征匹配。其中,指令摘要特征是能够
表示指令特征的缩略形式,一般情况下,指令摘要特征包括两个字母,首字母为大写字母,
第二个字母为小写字母。例如,对于指令特征move,其指令摘要特征为Mv;对于指令特征
mul,其指令摘要特征为Mu;对于指令特征monitor,其指令摘要特征为Mo;这样,指令摘要特
征不仅能够有效辨识指令特征,而且能够减少资源使用。
[0092] 一些实施方式中,特征文件的组织形式为:每一行对应一个方法,每一行包括一个方法的所有指令摘要特征。如图9所示,通过分析某个类的smali文件,该类包括十二个方
法,则特征文件共包含十二行,每一行包括一个方法的所有指令摘要特征。
[0093] 与特征文件相对应的,标准库的标准库文件的组织形式与特征文件相同。根据已知的标准库构造相应的标准库文件,从标准库中提取所有方法以及每个方法所使用的指令
特征,并将指令特征处理为指令摘要特征,以一个方法的所有指令摘要特征为一行,构造包
括所有方法的所有指令摘要特征的标准库文件。这样,特征文件和标准库文件中仅为不会
产生名称混淆的指令摘要特征,在将特征文件与标准库文件进行匹配的时候,通过对比每
行的指令摘要特征在数量、类型等方面的差异,实现每个方法的匹配,进而实现待测第三方
库与标准库的高效、精确匹配。
[0094] 一些实施例中,在提取出核心逻辑类的指令特征之后,将形成的特征文件与不同标准库的标准库文件进行匹配,通过特征匹配查找待测第三方库所对应的真实第三方库。
则,响应于特征文件与标准库文件达到预设的匹配条件,待测第三方库为标准库,包括:
[0095] 根据特征文件的内容和标准库文件的内容,对标准库进行筛选,得到筛选后的标准库;
[0096] 利用滑动窗口的特征匹配方法,将特征文件与筛选后的标准库的标准库文件进行匹配,得到与待测第三方库匹配的标准库。
[0097] 本实施例中,由于标准的第三方库数量很多,为提高处理效率,先对标准库进行筛选,筛选出标准库文件与特征文件的内容相匹配的标准库;之后,对于筛选出的标准库,利
用滑动窗口的特征匹配方法,将特征文件与标准库文件进行特征匹配,确定出特征匹配的
标准库。
[0098] 一些实施例中,根据特征文件的内容和标准库文件的内容,对标准库进行筛选,得到筛选后的标准库,包括:
[0099] 根据特征文件中的方法数量与标准库文件中的方法数量,特征文件中的指令摘要特征数量和标准库文件中的指令摘要特征数量,按照预设的初筛条件,进行第一次筛选,得
到初步筛选后的标准库;
[0100] 根据特征文件中每行的指令摘要特征数量与初步筛选后的标准库的标准库文件中每行的指令指令摘要特征数量,按照预设的二次筛选条件,进行第二次筛选,得到二次筛
选后的标准库。
[0101] 本实施例中,由于标准库数量大,如果将特征文件与每个标准库进行匹配,处理效率不高,由此,先对标准库进行筛选,与筛选后的标准库进行进一步的特征匹配。
[0102] 具体的筛选过程是:先进行第一次筛选,将方法数量与特征文件中的方法数量不同的标准库筛选掉,将指令摘要特征数量与特征文件中的指令摘要特征数量之间的差值大
于预设数量差阈值的标准库筛选掉,得到第一次筛选后的标准库。一些方式中,通过数据统
计与分析,如果核心逻辑类的代码发生变化,在保持核心逻辑类的功能的前提下,指令特征
的改动量在30%之内,由此,可以确定第一次筛选的初筛条件是,特征文件中的方法数量与
标准库文件中的方法数量相同,特征文件中的指令摘要特征数量与标准库文件中的指令摘
要特征数量之间的差值小于30%,将符合初筛条件的标准库保留,将不符合初筛条件的标准
库筛选掉,得到初步筛选后的标准库。
[0103] 之后,基于初步筛选后的标准库,进行第二次筛选,进一步缩小标准库的范围。第二次筛选时,将每行的指令摘要特征数量与初步筛选后的标准库的标准库文件中每行的指
令指令摘要特征数量之间的差值大于数量差阈值的标准库筛选掉,得到第二次筛选后的标
准库。即,二次筛选条件是,特征文件中的每行的指令摘要特征数量与初步筛选后的标准库
文件中的每行的指令摘要特征数量之间的差值小于数量差阈值,将符合二次筛选条件的标
准库保留,将不符合二次筛选条件的标准库筛选掉,得到二次筛选后的标准库。这样,通过
初步筛选和二次筛选,能够大幅减少标准库的数量,提高检测效率。
[0104] 一些实施例中,利用滑动窗口的特征匹配方法,将特征文件与筛选后的标准库的标准库文件进行匹配,得到与待测第三方库匹配的标准库,包括:
[0105] 根据特征文件中的每行指令摘要特征与二次筛选后的标准库的标准库文件的每行指令摘要特征,利用滑动窗口进行特征匹配,得到特征匹配结果;
[0106] 根据特征匹配结果,确定符合匹配条件的标准库;
[0107] 计算符合匹配条件的标准库的匹配分数,选取匹配分数最高的标准库作为与待测第三方库匹配的标准库。
[0108] 本实施例中,基于筛选后的标准库,将特征文件与标准库文件进行特征匹配,从而得到匹配的特征库。具体的,利用滑动窗口特征匹配方法,将特征文件中的每行指令摘要特
征与标准库文件中的每行指令摘要特征进行匹配,得到每行指令摘要特征的特征匹配结
果,即得到特征文件与标准库文件中方法的匹配结果;根据每行指令摘要特征的特征匹配
结果,统计特征文件与标准库文件匹配的行数,进一步统计匹配的行数占总行数的比例,即
统计匹配的方法数占方法总数的比例;从二次筛选后的标准库中选取出该比例达到预定比
例值的标准库,作为符合匹配条件的标准库;对于进一步筛选出来的符合匹配条件的标准
库,计算标准库的匹配分数,选取出匹配分数最高的标准库作为最终得到的与待测第三方
库匹配的标准库。
[0109] 一些实施方式中,利用滑动窗口进行特征匹配的基本原理为:设特征文件的某一行的指令摘要特征为待匹配字符串S1,S1的长度为L1,滑动窗口K1设于S1首部,窗口K1大小
为1,窗口K1内字符串为C1,窗口K1的滑动次数为T1;标准库文件的某一行的指令摘要特征
对应的字符串S2,S2的长度为L2,滑动窗口K2设于S2首部,窗口K2大小为1,窗口K2内字符串
为C2,窗口K2的滑动次数为T2。当窗口K1、K2同时滑动时,称为同步滑动,当其中一个窗口滑
动,另一个窗口不滑动,称为异步滑动。如果字符串C1与字符串C2的字符数相等,则窗口K1、
K2同步向后滑动一个字符单位(本例中为由一个大写字母和一个小写字母构成的指令摘要
特征所对应的双字符,同步滑动一个字符单位也即每次比较一个指令摘要特征);如果字符
串C1与字符串C2的字符数不相等,则比较(L1‑T1)与(L2‑T2)的大小,若(L1‑T1)大于(L2‑
T2),则窗口K1向后滑动一个字符单位,窗口K2不滑动,若(L1‑T1)小于(L2‑T2),则窗口K2向
后滑动一个字符单位,窗口K1不滑动;当窗口K1滑动至S1末端,窗口K2滑动至S2末端,特征
文件的当前行与标准库文件的当前行匹配结束,统计滑动窗口匹配过程中的异步滑动总次
数T3。
[0110] 对于特征匹配结果,当特征文件的窗口K1滑动至待匹配字符串S1末端、标准库文件的窗口K2滑动至字符串S2末端,而且异步滑动总次数T3小于预设次数阈值时,认为标准
库文件的当前行的指令摘要特征与特征文件的当前行的指令摘要特征匹配成功。即,特征
文件的当前行所对应的方法与标准库文件的当前行所对应的方法匹配成功。一些方式中,
考虑到特征文件与标准库文件的每行中存在指令摘要特征的数量差异,将次数阈值设置为
S1与S2中长度较短者的长度的30%,如果异步滑动次数达到或超过次数阈值,则该行匹配失
败。
[0111] 按照上述的滑动窗口特征匹配方法,将特征文件中的每行指令摘要特征与标准库文件中的每行指令摘要特征进行匹配,得到标准库文件与特征文件匹配成功的行数,计算
匹配成功的行数与总行数的比例,考虑到每行中存在指令摘要特征的数量差异,可将该比
例设置为85%,当标准库文件与特征文件匹配成功的比例达到85%及以上时,确定该标准库
文件对应的标准库为符合匹配条件的标准库。
[0112] 如图10所示,在字符串S1与S2的匹配过程中,S1与S2在第一次滑动后出现了不匹配的情况,在判断S2剩余长度大于S1剩余长度后,S2异步滑动一次,继续进行窗口K1和窗口
K2的比较,两个窗口内的字符串相同后,S1与S2进行同步滑动,最后两个字符串同时达到末
端,完成匹配。
[0113] 一些方式中,计算匹配分数的方法是:
[0114]                     (1)
[0115] 其中,L表示标准库文件中指令摘要特征的总数,T表示特征文件与标准库文件之间的异步滑动总次数,Fs表示标准库文件与特征文件匹配成功的方法数(行数),F表示方法
总数(总行数),A为指令摘要特征所占权重,B为方法所占权重。可选的,当A=30%,B=70%时,
能够达到较好的匹配效果。
[0116] 需要说明的是,本说明书一个或多个实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合
来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本说明书一个
或多个实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述
的方法。
[0117] 需要说明的是,上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施
例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求
示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并
行处理也是可以的或者可能是有利的。
[0118] 如图11所示,本说明书还提供一种第三方库检测装置,包括:
[0119] 识别模块,用于对应用程序包进行反编译,识别混淆的待测第三方库;
[0120] 确定模块,用于确定用于代表待测第三方库的核心逻辑类;
[0121] 提取模块,用于从核心逻辑类中提取多个指令特征,形成特征文件;
[0122] 匹配模块,用于响应于特征文件与标准库的标准库文件达到预设的匹配条件,待测第三方库为所述标准库。
[0123] 为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
[0124] 上述实施例的装置用于实现前述实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
[0125] 图12示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图, 该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线 1050。其
中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之
间在设备内部的通信连接。
[0126] 处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个
或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方
案。
[0127] 存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储
操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案
时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
[0128] 输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/ 模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中
输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、
扬声器、振动器、指示灯等。
[0129] 通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式 
(例如移动网络、WIFI、蓝牙等)实现通信。
[0130] 总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
[0131] 需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运
行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实
现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
[0132] 上述实施例的电子设备用于实现前述实施例中相应的方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
[0133] 本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或
其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器
(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器
(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读
存储器(CD‑ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或
其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
[0134] 所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例
或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如
上所述的本说明书一个或多个实施例的不同方面的许多其它变化,为了简明它们没有在细
节中提供。
[0135] 另外,为简化说明和讨论,并且为了不会使本说明书一个或多个实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/
接地连接。此外,可以以框图的形式示出装置,以便避免使本说明书一个或多个实施例难以
理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将
要实施本说明书一个或多个实施例的平台的(即,这些细节应当完全处于本领域技术人员
的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,
对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细
节有变化的情况下实施本说明书一个或多个实施例。因此,这些描述应被认为是说明性的
而不是限制性的。
[0136] 尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例
如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
[0137] 本说明书一个或多个实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本说明书一个或多个实施例的精神和原则之内,所做
的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。