• 学术研究 • 下一篇
贾昀峰, 王俊峰, 吴鹏
JIA Yunfeng, WANG Junfeng, WU Peng
摘要: 第三方库(Third-party libraries,TPL)作为现代C/C++软件开发的重要组成部分,其精确检测与管理对于保障软件质量与安全性至关重要。然而,现有方法主要依赖代码语法特征,对Type II和Type III克隆重用场景的适应性不足,易导致检测失效。为此,本文提出一种基于函数抽象语法树(Abstract syntax tree,AST)特征的TPL检测方法——TPLADD。该方法利用AST节点度数与次序的度量信息快速实现函数语法向量嵌入,并结合向量数据库与近似最近邻检索技术,显著提升了修改重用场景下的检测鲁棒性。此外,基于异常检测的过滤技术有效减少干扰函数对检测的影响,提高结果精确性。基于GitHub搜集的29782个开源软件(Open-source software,OSS)共计726074个版本,构建了特征向量索引库,并在100个知名项目上验证有效性。结果表明,在精度上,TPLADD相较于CENTRIS,精确率和召回率分别提升了3.88%和2.76%;在鲁棒性上,TPLADD即使出现较大程度代码修改时,仍能保持74%的F1值;在性能上,TPLADD平均每个TPL检测耗时仅0.42s,索引库存储占用率仅为总体函数特征的0.41%,充分体现了其高鲁棒性、高精确性的特点,且具备良好的性能表现。