一种第三方库检测方法及装置转让专利
申请号 : CN202111207132.8
文献号 : CN113641363B
文献日 : 2022-02-11
发明人 : 高飞 , 文惠东 , 秦素娟 , 温巧燕 , 李文敏
申请人 : 北京邮电大学
摘要 :
权利要求 :
1.一种第三方库检测方法,其特征在于,包括:对应用程序包进行反编译,识别混淆的待测第三方库;
确定用于代表待测第三方库的核心逻辑类;其中,所述核心逻辑类的特征包括:位于顶层接口类和底层工具类之间的位置;连接所述待测第三方库中达到预定第一数量的类;调用所述待测第三方库中达到预定第二数量的自定义方法;以及包含达到预定第三数量的指令集操作码;
从所述核心逻辑类中提取多个指令特征,形成特征文件;
响应于所述特征文件与标准库的标准库文件达到预设的匹配条件,所述待测第三方库为所述标准库,包括:根据所述特征文件的内容和标准库文件的内容,对所述标准库进行筛选,得到筛选后的标准库;利用滑动窗口的特征匹配方法,将所述特征文件与筛选后的标准库的标准库文件进行匹配,得到与待测第三方库匹配的标准库。
2.根据权利要求1所述的方法,其特征在于,所述确定用于代表待测第三方库的核心逻辑类,包括:
根据反编译后获得的多个smali文件,确定各smali文件之间的依赖关系,并确定顶层接口类和底层工具类;
根据所述依赖关系构造转移矩阵和初始影响力矩阵;
将所述转移矩阵和初始影响力矩阵进行迭代相乘,直至达到收敛条件,得到最终影响力矩阵;
根据所述最终影响力矩阵,排除所述顶层接口类和底层工具类之后,选取影响力最大的类作为所述核心逻辑类。
3.根据权利要求2所述的方法,其特征在于,所述收敛条件为:当所述转移矩阵和初始影响力矩阵或迭代过程中生成的中间影响力矩阵单次相乘超过时间阈值时,停止迭代;和/或,本次相乘后,所述初始影响力矩阵中原本不为0的一项或几项变为0,停止迭代。
4.根据权利要求1所述的方法,其特征在于,从所述核心逻辑类中提取多个指令特征,形成特征文件,包括:
确定所述核心逻辑类所使用的所有方法,以及每个方法所使用的所有指令特征;
将所述指令特征处理为指令摘要特征;
以每个方法的所有指令摘要特征为一行,构造包括所有方法的所有指令摘要特征的特征文件。
5.根据权利要求1所述的方法,其特征在于,所述根据所述特征文件的内容和标准库文件的内容,对所述标准库进行筛选,得到筛选后的标准库,包括:根据所述特征文件中的方法数量与标准库文件中的方法数量,所述特征文件中的指令摘要特征数量和标准库文件中的指令摘要特征数量,按照预设的初筛条件,进行第一次筛选,得到初步筛选后的标准库;
根据所述特征文件中每行的指令摘要特征数量与初步筛选后的标准库的标准库文件中每行的指令摘要特征数量,按照预设的二次筛选条件,进行第二次筛选,得到二次筛选后的标准库。
6.根据权利要求5所述的方法,其特征在于,所述利用滑动窗口的特征匹配方法,将所述特征文件与筛选后的标准库的标准库文件进行匹配,得到与待测第三方库匹配的标准库,包括:
根据所述特征文件中的每行指令摘要特征与所述二次筛选后的标准库的标准库文件的每行指令摘要特征,利用滑动窗口进行特征匹配,得到特征匹配结果;
根据所述特征匹配结果,确定符合匹配条件的标准库;
计算所述符合匹配条件的标准库的匹配分数,选取匹配分数最高的标准库作为与待测第三方库匹配的标准库。
7.根据权利要求6所述的方法,其特征在于,计算所述匹配分数的方法为:根据所述标准库文件中指令摘要特征的总数、滑动窗口匹配过程中的异步滑动总次数、匹配成功的方法数、方法总数、所述指令摘要特征所占权重,以及方法所占权重,计算所述匹配分数。
8.一种第三方库检测装置,其特征在于,包括:识别模块,用于对应用程序包进行反编译,识别混淆的待测第三方库;
确定模块,用于确定用于代表待测第三方库的核心逻辑类;其中,所述核心逻辑类的特征包括:位于顶层接口类和底层工具类之间的位置;连接所述待测第三方库中达到预定第一数量的类;调用所述待测第三方库中达到预定第二数量的自定义方法;以及包含达到预定第三数量的指令集操作码;
提取模块,用于从所述核心逻辑类中提取多个指令特征,形成特征文件;
匹配模块,用于响应于所述特征文件与标准库的标准库文件达到预设的匹配条件,所述待测第三方库为所述标准库,包括:根据所述特征文件的内容和标准库文件的内容,对所述标准库进行筛选,得到筛选后的标准库;利用滑动窗口的特征匹配方法,将所述特征文件与筛选后的标准库的标准库文件进行匹配,得到与待测第三方库匹配的标准库。
说明书 :
一种第三方库检测方法及装置
技术领域
背景技术
方库名称被改变,不利于检测出第三方库及其安全性。
度,检测效率不高。
发明内容
定第三数量的指令集操作码。
次筛选,得到初步筛选后的标准库;
次筛选后的标准库。
所述匹配分数。
的核心逻辑类,从核心逻辑类中提取多个指令特征,形成特征文件,当特征文件与标准库的
标准库文件达到预设的匹配条件,待测第三方库为标准库。本说明书能够降低计算量,提高
匹配精度,提高检测效率。
附图说明
附图仅仅是本说明书一个或多个实施例,对于本领域普通技术人员来讲,在不付出创造性
劳动的前提下,还可以根据这些附图获得其他的附图。
具体实施方式
或多个实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要
性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面
的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或
者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包
括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关
系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
基于聚类的第三方库检测方法,通常是设计一个相似度度量或使用基于特征的散列算法,
以其为核心设计特征提取和匹配机制,按照设计的特征提取和匹配规则对应用程序中的所
有第三方库进行处理;基于特征匹配的检测方,根据非名称特征和混淆的特点生成签名,根
据签名匹配规则计算第三方库和检测库中个体之间的匹配度。由此可见,一般的第三方库
检测方法均需对应用程序中的所有第三方库进行整体的特征提取与匹配处理,计算量大,
特征量大导致影响匹配精度,检测效率不高。
的代表,基于核心逻辑类进行特征提取与匹配,从而确定出待测第三方库所属真实库,由于
仅对核心逻辑类进行特征提取与匹配处理,能够降低计算量,提高匹配精度,提高检测效
率。
件夹和org文件夹中,对这两个文件夹进行分析,按照包的组织结构记录第三方库的名称。
在所记录的所有第三方库的名称中,存在未混淆的名称和被混淆的名称,对于未混淆的名
称,可直接保存于第三方库日志文件中,对于被混淆的名称,一方面可保存于第三方库日志
文件中,另一方面对被混淆的名称进行标记,将标记的第三方库作为待测第三方库进行后
续处理,若标记的第三方库有多个,则形成待测第三方库列表,后续对该列表中的每个待测
第三方库进行处理。
通用的混合规则,自定义的混合规则,以及通过分析被混淆的名称确定出的混合规则等,本
实施例不对具体的混合规则进行限定。
为几个字符,例如:a/b/c等。
和底层工具之间的位置,连接待测第三方库中达到预定第一数量的类,调用待测第三方库
中达到预定第二数量的自定义方法,包含达到预定第三数量的指令集操作码。其中,第一数
量、第二数量和第三数量可根据待测第三方库中所包含的类总数、自定义方法总数及指令
集操作码总数进行配置,具体不做限定。
类、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文件中包含有预定第三数量的可供
分析的指令集操作码,即该类中的代码语句应较为丰富。
令易于识别,使用数量多,且偏向底层寄存器,能够更好地反映应用程序的结构,所以选取
指令集中的操作指令作为可提取的指令特征,不仅便于识别提取,而且特征数量大且具有
代表性,能够保证匹配精度。可选的,指令集为Dalvik指令集。
测第三方库为标准库或者是该标准库的变种库,该标准库的名称即为待测第三方库的名
称。
特征文件,当特征文件与标准库文件达到预设的匹配条件时,待测第三方库为标准库。由于
将核心逻辑类作为代表待测第三方库的类进行特征提取和匹配处理,能够有效降低计算
量,同时保证匹配精度,提高检测效率。
类均为单向关系。具体的,顶层接口类只会引用本库的其他类,只存在入链而不会有出链;
底层工具类只会被本库的其他类所引用,只存在出链而不会有入链;利用顶层接口类和底
层工具类的上述特征,通过对smali文件进行分析,确定出顶层接口类和底层工具类,并可
生成包括顶层接口类和底层工具类的排除列表,用于后续筛选核心逻辑类使用。
线部分代码为该类引用了本库中的类,由于底层工具类不会引用本库中的类,只会引用
Java或Android提供的接口,所以通过这部分可以判断该类是否为底层工具类。
当前类与其他类之间的关联关系,构造转移矩阵和初始影响力矩阵,转移矩阵的每一列表
示一个类,该列的数值表示该类的上层类的分布和数量;初始影响力矩阵根据库中所有存
在关联关系的类的数量,将1进行均分得到。
其他八个类,类0与其上层类2、3、4具有关联关系,则,对应于类0的第一列中,第二、三、四行
的值均为将1进行三等分得到的0.33;按照上述方法,构造得到包括八个类之间的关联关系
的转移矩阵。对于初始影响力矩阵,将1进行八等分得到一列八行的影响力矩阵,每个元素
取值为0.125。
阈值可根据设备的处理性能设定;和/或,本次相乘后,初始影响力矩阵中原本不为0的一项
或几项变为0,停止迭代;停止迭代后,得到最终影响力矩阵。
(如图7中的虚线箭头),但是被指的类并不计算入链,避免计算多余的入链影响最终结果。
需要注意的是:位于顶层的一些类并不是标准的顶层接口类(标准的顶层接口类是指只包
括接口的类,其内部没有方法和方法体),但是也应按此方法进行处理。
的影响力分数中选取出分数最高的类作为核心逻辑类。
第四行,其所对应的类即为核心逻辑类。
令特征。为进一步降低计算量、提高处理效率,以指令摘要特征代替指令特征,将每个方法
所对应的指令摘要特征保存于特征文件中,用于后续特征匹配。其中,指令摘要特征是能够
表示指令特征的缩略形式,一般情况下,指令摘要特征包括两个字母,首字母为大写字母,
第二个字母为小写字母。例如,对于指令特征move,其指令摘要特征为Mv;对于指令特征
mul,其指令摘要特征为Mu;对于指令特征monitor,其指令摘要特征为Mo;这样,指令摘要特
征不仅能够有效辨识指令特征,而且能够减少资源使用。
法,则特征文件共包含十二行,每一行包括一个方法的所有指令摘要特征。
特征,并将指令特征处理为指令摘要特征,以一个方法的所有指令摘要特征为一行,构造包
括所有方法的所有指令摘要特征的标准库文件。这样,特征文件和标准库文件中仅为不会
产生名称混淆的指令摘要特征,在将特征文件与标准库文件进行匹配的时候,通过对比每
行的指令摘要特征在数量、类型等方面的差异,实现每个方法的匹配,进而实现待测第三方
库与标准库的高效、精确匹配。
则,响应于特征文件与标准库文件达到预设的匹配条件,待测第三方库为标准库,包括:
用滑动窗口的特征匹配方法,将特征文件与标准库文件进行特征匹配,确定出特征匹配的
标准库。
到初步筛选后的标准库;
选后的标准库。
于预设数量差阈值的标准库筛选掉,得到第一次筛选后的标准库。一些方式中,通过数据统
计与分析,如果核心逻辑类的代码发生变化,在保持核心逻辑类的功能的前提下,指令特征
的改动量在30%之内,由此,可以确定第一次筛选的初筛条件是,特征文件中的方法数量与
标准库文件中的方法数量相同,特征文件中的指令摘要特征数量与标准库文件中的指令摘
要特征数量之间的差值小于30%,将符合初筛条件的标准库保留,将不符合初筛条件的标准
库筛选掉,得到初步筛选后的标准库。
令指令摘要特征数量之间的差值大于数量差阈值的标准库筛选掉,得到第二次筛选后的标
准库。即,二次筛选条件是,特征文件中的每行的指令摘要特征数量与初步筛选后的标准库
文件中的每行的指令摘要特征数量之间的差值小于数量差阈值,将符合二次筛选条件的标
准库保留,将不符合二次筛选条件的标准库筛选掉,得到二次筛选后的标准库。这样,通过
初步筛选和二次筛选,能够大幅减少标准库的数量,提高检测效率。
征与标准库文件中的每行指令摘要特征进行匹配,得到每行指令摘要特征的特征匹配结
果,即得到特征文件与标准库文件中方法的匹配结果;根据每行指令摘要特征的特征匹配
结果,统计特征文件与标准库文件匹配的行数,进一步统计匹配的行数占总行数的比例,即
统计匹配的方法数占方法总数的比例;从二次筛选后的标准库中选取出该比例达到预定比
例值的标准库,作为符合匹配条件的标准库;对于进一步筛选出来的符合匹配条件的标准
库,计算标准库的匹配分数,选取出匹配分数最高的标准库作为最终得到的与待测第三方
库匹配的标准库。
为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。
库文件的当前行的指令摘要特征与特征文件的当前行的指令摘要特征匹配成功。即,特征
文件的当前行所对应的方法与标准库文件的当前行所对应的方法匹配成功。一些方式中,
考虑到特征文件与标准库文件的每行中存在指令摘要特征的数量差异,将次数阈值设置为
S1与S2中长度较短者的长度的30%,如果异步滑动次数达到或超过次数阈值,则该行匹配失
败。
匹配成功的行数与总行数的比例,考虑到每行中存在指令摘要特征的数量差异,可将该比
例设置为85%,当标准库文件与特征文件匹配成功的比例达到85%及以上时,确定该标准库
文件对应的标准库为符合匹配条件的标准库。
K2的比较,两个窗口内的字符串相同后,S1与S2进行同步滑动,最后两个字符串同时达到末
端,完成匹配。
总数(总行数),A为指令摘要特征所占权重,B为方法所占权重。可选的,当A=30%,B=70%时,
能够达到较好的匹配效果。
来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本说明书一个
或多个实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述
的方法。
例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求
示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并
行处理也是可以的或者可能是有利的。
中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之
间在设备内部的通信连接。
或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方
案。
操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案
时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、
扬声器、振动器、指示灯等。
(例如移动网络、WIFI、蓝牙等)实现通信。
行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实
现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器
(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器
(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读
存储器(CD‑ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或
其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如
上所述的本说明书一个或多个实施例的不同方面的许多其它变化,为了简明它们没有在细
节中提供。
接地连接。此外,可以以框图的形式示出装置,以便避免使本说明书一个或多个实施例难以
理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将
要实施本说明书一个或多个实施例的平台的(即,这些细节应当完全处于本领域技术人员
的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,
对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细
节有变化的情况下实施本说明书一个或多个实施例。因此,这些描述应被认为是说明性的
而不是限制性的。
如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。