在优化后的二进制文件中学习查找库函数调用
软件工程
2021-09-20 v2
摘要
许多软件,无论善意还是恶意,都仅以二进制形式分发,没有源代码。缺少源代码时,理解二进制文件的行为可能相当具有挑战性,尤其是在较高编译器优化级别下编译时。这些优化可将易懂的、“自然”的源代码结构转换为完全无法识别的形式。对二进制文件进行逆向工程,尤其是那些疑似恶意或涉及知识产权盗窃的文件,是重要且耗时的任务。人们对将二进制文件“反编译”回更自然的源代码以辅助逆向工程的工具抱有浓厚兴趣。反编译包含若干理想步骤,包括重建源语言结构、变量名,甚至注释。生成二进制文件的一个核心步骤是优化函数调用,例如使用内联。从优化后的二进制文件中恢复这些(可能已被内联的)函数调用是一项关键任务,大多数最先进的反编译工具都试图完成但表现欠佳。本文中,我们评估了一种用于恢复优化函数调用的监督学习方法。我们利用开源软件并开发了一种自动标注方案,以生成规模合理且标注了实际函数用法的二进制文件数据集。我们通过一个预训练步骤来增强这个庞大但有限的标注数据集,该步骤从更大的无标注数据集中学习反编译代码的统计特征。经此增强后,我们的学习标注模型可与现有反编译工具 Ghidra 结合,从而在函数调用恢复方面取得显著改进,尤其是在较高优化级别下。
引用
@article{arxiv.2103.05221,
title = {Learning to Find Usages of Library Functions in Optimized Binaries},
author = {Toufique Ahmed and Premkumar Devanbu and Anand Ashok Sawant},
journal= {arXiv preprint arXiv:2103.05221},
year = {2021}
}