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  个新的实验数据集, 外加一个不混淆的原始数据集.
   317   318   319   320   321   322   323   324   325   326   327