Page 98 - 《软件学报》2025年第7期
P. 98

贾昂 等: 面向函数内联场景的二进制到源代码函数相似性检测方法                                                 3019


                    例如, aoGetsText 是  Sharutils-4.15.2  中的一个源函数, 它位于一个#if 指令下. 尽管它已被内联到许多二进制函
                 数中, 但像  Understand  这样的现有静态分析工具却认为这部分代码不会参与编译. 结果, 构建的                    FCG  遗漏了函数
                 aoGetsText. 因此, 由于缺少源函数   aoGetsText, O2NMatcher 无法创建相应的源代码函数集合.

                 5.5.2    源代码函数集合的负面效果分析
                    正如上文所述, 源代码函数集合所带来的第               1  个负面影响是匹配时间的增加. 查询的二进制函数不仅要与源
                 函数比较, 还要与源代码函数集合比较, 这增加了匹配的成本. 然而, O2NMatcher 需要为普通函数生成的源代码函
                 数集合仅占    26.81%, 这只会引起较小的匹配开销.
                    源代码函数集合带来的另一个负面影响是在一定程度上影响了普通二进制函数的匹配效果                                   (Recall@1  从
                 91.2%  下降到  89.5%). 但是, 当汇总普通函数和内联函数的结果时, 整体性能实际上是提高的                   (Recall@1  从  72.8%
                 增加到了   73.8%).

                 5.5.3    内联规模对  O2NMatcher 的影响
                    在对  O2NMatcher 衡量过程中, 本文发现, 在不同内联程度的二进制函数中, O2NMatcher 的性能表现也不同.
                 相比于内联了数十上百个函数的二进制函数, O2NMatcher 更容易为内联了数个函数的二进制函数生成对应的源
                 代码函数集合. 这是因为, 在内联了数个函数的二进制函数, O2NMatcher 只需要预测出数个内联的函数调用即可
                 生成准确的源代码函数集合. 而在内联了数十上百个函数的二进制函数中, O2NMatcher 很难预测正确所有的内联
                 函数调用, 因此, O2NMatcher 在匹配大规模内联的二进制函数时仍面临着一些挑战.

                 6   总 结

                    针对内联场景下一对多匹配的二进制到源代码函数相似性检测问题, 本文提出了                           O2NMatcher, 通过生成源代
                 码函数集合作为内联场景下二进制函数的匹配对象, 以弥补源函数中匹配对象缺失的问题. 为了构建源代码函数
                 集合, 本文首先标注了内联数据集中函数调用的内联情况, 然后抽取了对应函数调用的属性特征和调用特征, 并且
                 设计了一种多标签分类方法用于内联函数调用预测. 再后, 对于用于组成成分分析的源代码项目, 使用已有的多标
                 签分类模型预测内联的函数调用. 最后, 基于内联的函数调用, 本文提出了一种基于函数调用树的构建方法完成了
                 源代码函数集合的生成. 本文通过几项实验评估了                O2NMatcher, 结果表明  O2NMatcher 能够使现有二进制到源代
                 码相似性检测工作在检测内联函数方面取得               18.6%  的提升.
                    在未来工作中, 一方面, 将继续致力于实现更为准确的源代码依赖关系解析, 以实现更为全面的函数调用关系
                 抽取, 来提升   O2NMatcher 进行内联函数调用预测的准确性. 另一方面, 函数内联给包括但不限于漏洞检测, 第三
                 方库复用检测等二进制相似性检测的各种场景都带来了对应的挑战, 未来将针对这些挑战提出对应的解决方法.


                 References:
                  [1]  Hemel A, Kalleberg KT, Vermaas R, Dolstra E. Finding software license violations through binary code clone detection. In: Proc. of the
                     8th Working Conf. on Mining Software Repositories. Honolulu: ACM, 2011. 63–72.
                  [2]  Rahimian A, Charland P, Preda S, Debbabi M. RESource: A framework for online matching of assembly with open source code. In: Proc.
                     of the 5th Int’l Symp. on Foundations and Practice of Security. Montreal: Springer, 2012. 211–226. [doi: 10.1007/978-3-642-37119-6_14]
                  [3]  Kim D, Cho S, Han S, Park M, You I. Open source software detection using function-level static software birthmark. Journal of Internet
                     Services and Information Security, 2014, 4(4): 25–37. [doi: 10.22667/JISIS.2014.11.31.025]
                  [4]  Miyani D, Huang Z, Lie D. BinPro: A tool for binary source code provenance. arXiv:1711.00830, 2017.
                  [5]  Duan RA, Bijlani A, Xu M, Kim T, Lee W. Identifying open-source license violation and 1-day security risk at large scale. In: Proc. of
                     the 2017 ACM SIGSAC Conf. on Computer and Communications Security. Dallas: ACM, 2017. 2169–2185. [doi: 10.1145/3133956.
                     3134048]
                  [6]  Feng MY, Mao WX, Yuan ZM, Xiao Y, Ban G, Wang W, Wang SY, Tang Q, Xu JH, Su H, Liu BH, Huo W. Open-source license
                     violations  of  binary  software  at  large  scale.  In:  Proc.  of  the  26th  Int’l  Conf.  on  Software  Analysis,  Evolution  and  Reengineering
                     (SANER). Hangzhou: IEEE, 2019. 564–568. [doi: 10.1109/SANER.2019.8667977]
                  [7]  Yuan ZM, Feng MY, Li F, Ban G, Xiao Y, Wang SY, Tang Q, Su H, Yu CD, Xu JH, Piao AH, Xuey J, Huo W. B2SFinder: Detecting
   93   94   95   96   97   98   99   100   101   102   103