Page 318 - 《软件学报》2024年第6期
P. 318
2894 软件学报 2024 年第 35 卷第 6 期
{C i1 ,...,C ik ,...,C im } , 子包相似性可以根据公式 (12) 计算, 其中 sim c_to_c () 由公式 (2) 计算, C 表示 lrp 中与子包
′
′ ′ lsp 中, 如公式
asp 中类 C im 相似性最大的类, I (C ) 是一个指示函数用于表明类 C 是否在子包 j (13) 所示.
i
∑ m
′
I (C )× sim c_to_c (C im ,C )×weight(C im )
′
sim asp_to_lsp (asp ,lsp ) = i=1 (12)
i
j
m
{
1, C ∈ lsp
′
I (C ) = j (13)
′
0, C < lsp
′
j
3 实 验
3.1 实验数据集
在第三方库检测领域, 评价检测方法性能的基准数据集通常以一对多的映射关系存在, 形如 < apk ,{lrp ,...,
i 1
lrp ,...,lrp } > , 表示应用 apk 中使用的第三方库, 且每个 lrp 记录了第三方库的名称以及版本, 不仅可用于第三
j n i j
方库检测, 而且还可用于版本识别. 遗憾的是, 目前尚没有一个得到广泛认可的基准数据集, 主要有以下几个原因:
1) 构建基准数据集的方法存在缺陷, 导致评价能力有限, 比如基准中不包含混淆的 TPL; 2) 数据集的规模比较小,
比如 LibD 中使用的基准数据集规模为 1 000 个应用, 包含 2 613 个 TPL, 而 LibID 仅使用 69 个不同 TPL, 包含
1 444 个版本.
为了提升第三方库检测的评价能力, 更好地验证方法有效性, 本文提出了 3 种不同的策略以构建基准数据集,
从而满足不同验证场景的需求.
• 人工构造策略, 即以纯净的 Android 应用为基应用, 通过将一定数量的 TPL 注入到基应用中产生一个新应
用, 从而精准地获取该新应用对应的第三方库清单. 具体地, 先选取 10 000 个 Android 应用, 对它们进行反编译生
成一组 smali 文件, 通过删除目录中的 smali 文件构造一个基应用, 确保基应用中原有的第三方库被清空. 其次, 为
每个应用随机分配一个第三方库注入清单, 包含随机的 8 个到 10 个第三方库. 为了使构建的数据集更贴近真实情
况, 在注入前对第三方库进行不同程度的修改. 最后, 根据注入清单将第三方库原型反编译成 smali 文件, 注入到
相应的基应用中, 并将 smali 重新打包成一个 Type-3)、扁平化
文件. 采用上述人工构造策略建立了一个包含
个应用的
APK
10 000
基准数据集, 共计 95 434 个 < apk,lrp > 基准对, 将其命名为 GTB-1.
• 开源项目策略, 即从开源的 Android 应用项目发布平台获取项目文件, 进而从项目文件中提取该应用的第三
方库清单和主模块. 具体地, 依托开源平台 F-Droid 获取 Android 应用对应的项目文件, 分析第三方库依赖文件获
取应用引入的第三方库清单和主模块信息. 基于上述策略分析了 1 000 个开源项目, 共计得到 14 233 个 < apk,lrp >
基准对, 将其命名为 GTB-2.
• 变异策略, 即采用多种主流混淆器提供的混淆功能对注入的第三方库进行变异, 获取混淆后的应用及其第三
方库清单. 具体地, 从开源平台 F-Droid 获取 Android 应用项目文件, 为每个应用分别配置 3 种不同的混淆器, 分别
为 ProGuard、Allatori 和 DashO; 同时考虑 4 种不同的混淆能力或处理方法, 分别为符号混淆 (包、类、方法等标
识符名称转化为无意义字符串, 记为 Type-1)、优化 (使用控制流分析、数据流分析等技术优化程序, 记为 Type-2)、
压缩 (把未使用的类、方法等移除, 记为 (把混淆后的类移动到指定的包中, 进行类重组, 记为
Type-4). 设计不同混淆器和混淆功能的组合构成混淆配置应用于每个 Android 应用项目产生对应的混淆版本. 基
于上述策略分析了 1 000 个开源项目, 仅部分项目顺利完成混淆操作, 得到的结果如表 3 所示, 将其命名为 GTB-3.
表 3 应用不同混淆配置后得到的数据集
Obfuscation types
Obfuscator Number of APPs Number of RPs Number of APP-TPL pairs
1 2 3 4
ProGuard 200 1 889 914 √ √ √ √
Allatori 241 1 493 1 309 √ √ √ ×
DashO 215 1 041 1 001 √ √ √ ×