文章总结: 巴西团队提出LibSig,用动态追踪提取可执行文件对外部库函数的调用序列作为LibrarySignature,在编译选项变化或OLLVM、KHAOS混淆场景下仍能提升二进制diff准确率,系统基于Valgrind与RTLD-AUDIT实现并配套binarymatchinggame评估,但技术思路偏传统、深度与性能优化有限。 综合评分: 62 文章分类: 二进制安全,漏洞分析,安全工具,AI安全,学术论文
G.O.S.S.I.P 阅读推荐 2026-01-19 LibSig
原创
G.O.S.S.I.P G.O.S.S.I.P
安全研究GoSSIP
2026年1月19日 20:50 上海
我们很少会看到巴西研究人员的论文(请纠正这种stereotype),不过今年的CGO会议上有一篇来自巴西的研究论文 Binary Diffing via Library Signatures 值得一读(想想当你访问这个PDF的时候它来自地球的另一端),那今天就给大家介绍这个研究工作:
搞二进制代码分析(特别是patch分析)的筒子们都用过BinDiff这个工具吧,在二进制代码层面做diff一直是一个很让人头疼的研究方向,最近几年随着AI的兴起,研究技术也纷纷转向利用机器学习技术辅助的binary diffing,但是这些技术有一个共同的缺陷:如果二进制代码的发布者在编译时故意进行了编译选项的变换,或者使用代码混淆技术实施干扰,那么很多binary diffing工具的准确性就会大大降低。
在本文中,作者引入了一个特殊的概念——Library Signature,那么什么是Library Signature呢?来看一段代码示例:
鄙视一下巴西人的C语言老师,main函数的返回值还是void
如果你熟悉二进制代码生成,那么这段C代码编译的结果在哪里你肯定不陌生:它会编译到可执行文件的.text段,而作者定义说,.text段上的代码执行过程中,对外部函数的调用序列,就被称为Library Signature:
听上去有点抽象,我们再看一个例子:
前面那个(写得很烂的)main函数的Library Signature就是对atoi、sqrt和printf的顺序调用(如上图标记)。作者把这种特征当成了代码的特定指纹,用来辅助binary diffing进行定位。
接下来,巴西作者讨论了怎么提取Library Signature,不过他们似乎觉得代码的编译、链接和加载是很值得科普的(看起来他们没读过美国的《Linkers and Loaders》和中国的《程序员的自我修养》),于是就用了一些篇幅来介绍各种外部函数导入的机制:
接下来,作者介绍了他们开发的LibSig系统,这是一个动态分析系统,有两种实现方式,一种基于Valgrind,而另一种基于RTLD-AUDIT(这个RTLD是Runtime Linker Auditing Interface的缩写)技术(听起来有点陌生,可以理解为监控动态链接库的各种函数加载的一种插桩机制),当然作者表示LibSig还可以用LTRACE(或许未来他们还会用到eBPF?)
作者表示,用Valgrind的版本能够更好处理那些不使用PLT进行linking的情况(例如用了dlopen),当然缺点就是慢。然而作者在Table II里面比较的时候说LTRACE的分析粒度更细,因为它能分析外部函数调用的参数和返回值,这就有点让人困惑了,难道你用代码插桩就不行吗(还是说你不会写这种分析代码)?
这篇论文比较有意思的一点是它的第四章定义了一个binary matching game(当然这个也是基于同一个研究团队在2023年CGO提出的一个Game Framework),用这个game来评估特定的binary diffing工具的有效性。但是感觉也没有什么和以往的测试有什么本质的不同:
作者选择了CoreUtils里面的程序,除了用GCC和Clang编译之外,还使用了OLLVM和KHAOS(中科院计算所研究团队设计的一个工作,可以参考 Khaos: The Impact of Inter-procedural Code Obfuscation on Binary Diffing Techniques 这篇论文,ACM图书馆现在都免费访问了哦)两款混淆器。当然评估的结果都不用介绍了,肯定是LibSig更好,大家如果有兴趣就看看,没兴趣其实也不用去浪费时间了。
总体来说这篇工作的技术含量不是那么足,这个想法看起来有点老套,如果你不信,可以去看看G.O.S.S.I.P在2016年的论文 Cross-Architecture Binary Semantics Understanding via Similar Code Comparison 并对比一下,看起来是不是比LibSig的想法和技术更复杂呢?
论文:https://homepages.dcc.ufmg.br/~fernando/publications/papers/CGO26_Rimsa.pdf 代码:https://github.com/rimsa/LibSIG Artifacts:https://zenodo.org/doi/10.5281/zenodo.17082032
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全研究GoSSIP G.O.S.S.I.P G.O.S.S.I.P《G.O.S.S.I.P 阅读推荐 2026-01-19 LibSig》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论