关键词:
二进制代码分析
类型恢复
数据类型
机器学习
恶意软件检测
摘要:
二进制代码的类型恢复是一个非常具有挑战性的问题,这主要是由于高级语言在经过编译之后丢失了大量与类型相关的信息。然而,二进制代码的类型恢复又对理解和分析二进制代码起着重要的作用,并且它在反编译、逆向工程、漏洞分析及恶意代码检测等领域都有着重大的需求。因此,研究二进制代码的类型恢复问题就具有非常重要的现实意义。目前,现有的二进制代码类型恢复的研究工作大多倾向于使用程序分析技术,但这种方法恢复出来类型信息往往比较保守,而过于保守的类型信息对理解和分析二进制代码的帮助有限,且这种方法在实际使用中的执行效率不高。为此,本文提出了一种新的方法来恢复二进制代码中变量的类型,该方法效率较高,能够在一定程度上恢复变量的数据类型信息。首先,本文详细介绍了二进制代码的类型恢复方法,其主要原理来自“鸭子类型”系统:一个变量的类型是由它的行为和属性决定的。本文的方法融合了程序分析与机器学习方法。具体来说,本文先从二进制代码的指令流和数据流中提取出关键信息,这些信息反映了变量的行为和属性。然后根据提取出来关键信息,本文使用机器学习方法训练以基本类型为标签的分类器,训练完成后的分类器将被用于预测其它二进制文件中的数据类型信息。而对于指针和结构这样的复合类型,本文利用一个简单的指向分析,确定所有关联变量,利用分类器恢复所有关联变量的基本数据类型,并在此基础上再进行复合类型变量的类型恢复。其次,本文还将二进制代码的类型恢复技术应用于恶意软件检测。本文的恶意软件检测方法同样基于分类器,但与目前许多现有的工作不同,本文不仅考虑了二进制代码的行为特征,还考虑到了二进制代码的数据类型特征。最后,本文实现了一款针对二进制代码类型恢复的原型工具:BITY,并做了一系列实验来评估本文的方法。实验结果表明:(1)本文提出的二进制代码类型恢复方法能在一定程度上较准确地恢复出二进制程序中变量的数据类型;(2)无论是在精确类型还是在可兼容的类型上,BITY都比商业工具Hex-Ray和开源工具Snowman要准确;(3)BITY工具执行效率高,具有较强的可伸缩性,比较适合用于实际使用;(4)二进制代码的数据类型信息对检测恶意软件有一定的帮助。