Page 322 - 《软件学报》2024年第6期
P. 322
2898 软件学报 2024 年第 35 卷第 6 期
表 9 基于 GTB-1 数据集实验结果 (%)
方法 precision recall FPR FNR F1-score
LibRadar 90.74 65.98 9.26 34.02 76.41
LibD 93.68 62.91 6.32 37.09 75.27
LibScout 67.44 94.07 32.56 5.93 78.56
LibPecker 44.67 99.63 55.33 0.37 61.68
LibID-S 67.39 88.30 32.61 11.70 76.44
LibID-A 69.74 96.27 30.26 3.73 80.89
LibPass 93.07 96.18 6.93 3.82 94.60
与 LibPass 解决思路最为接近的是 LibPecker, LibPass 在 precision 上比 LibPecker 高 48.4%, 主要原因在于较
多 TPL 中存在着相同或相似的包, LibPecker 以包为单位进行比较, 容易造成误匹配, 而 LibPass 是以根包为单位
进行成对比较, 且每个根包只能匹配一个第三方库, 大大减少了误匹配, 故其准确率较高. 从表 9 中还可以看出,
LibPass 的假阳性率为 6.93%, 对检测结果为假阳性的 < arp,lrp > 对进行分析发现 24 个重复出现的 TPL 是造成
假阳性的原因. 进一步分析这些 TPL 发现在本地库中存在同一个 TPL 的多个版本, 对版本之间的相似性进行了评
Allatori 进行混淆的情形下, LibPass 同样取得了最高的
估, 获得的相似性度量结果如图 5 所示, 从图 5 可以看出, 同一个 TPL 不同版本间有高相似性, 即 79.2% 的 TPL 其
版本之间的相似度超过 0.7, 这验证了多个高相似版本的存在是导致 LibPass 产生假阳性的主要原因. 因此, 尽管
LibPass 可以确定 TPL 的具体版本, 但是仍需在降低版本相似性带来的假阳性方面开展进一步研究.
12
10
TPL 个数 8 6
4
2
0
(0.9, 1] (0.8, 0.9] (0.7, 0.8] (0.6, 0.7] (0.5, 0.6] (0, 0.5]
版本相似度
图 5 不同版本的第三方库相似度
3.4.4 抗混淆能力评价
本节在 GTB-3 基准数据集上完成对 LibPass 的抗混淆能力评价, 并与其他第三方库检测方法进行了对比分
析, 实验结果如图 6 所示, 图 6(a)–(d) 分别给出了无混淆、应用混淆器 ProGuard、混淆器 Allatori 和 DashO 等 4
种情形下的实验结果. 从图 6(a) 可以看出, 在无混淆的情形下, LibPass 有最高的 F1-score, 达 94.92%, 比其他检测
方法中最好的 (LibID-A) 高 17.3%, 且有较低的误检率 5.90% 和漏检率 4.24%. 在采用混淆器 ProGuard 进行混淆
的情形下, 尽管 LibPass 取得了最高的 F1-score, 但仅有 54.22%, 与无混淆的情形比较下降了约 40%. 在采用混淆
器 F1-score, 87.09%, 与无混淆的情形比较下降了 7.83%.
在采用混淆器 DashO 进行混淆的情形下, LibPass 获得的 F1-score 为 76.36%, 比 LibID-A 的 F1-score 低 3.73%, 与
无混淆的情形比较下降了 18.56%. 上述结果表明 LibPass 在抗混淆能力方面优于与现有的检测方法.
当然, 我们也注意到混淆仍是 TPL 检测方法面临的主要挑战之一. 在应用 3 种不同混淆器的情形下, 采用混
淆器 ProGuard 进行混淆时 LibPass 及其对比方法获得的结果都是最差的. 一个不容忽视的问题是大多数 Android
开发者选择免费的 ProGuard 作为应用发布前的混淆器 [35] , 因此本文深入分析了造成检测准确率低的原因. 从表 10
可以推测, 一个可能的原因在于使用了混淆器 ProGuard 的扁平化混淆功能, 而另外两个混淆器不支持该功能. 为
了验证这一点, 对基准数据集 GTB-3 生成过程进行了控制, 每次仅启用混淆器的一种混淆能力, 即优化处理、标
识符混淆、压缩处理以及混淆后扁平化处理, 产生了 4 个新的实验数据集, 外加一个不混淆的原始数据集.