论文部分内容阅读
二进制代码相似性对比是软件安全技术的一个基础的技术,可用于软件剽窃检测,恶意代码检测,软件补丁分析和自动逆向分析中。然而目前的二进制代码相似性对比技术普遍存在效率性,准确性,规模性,方面的问题。代码相似性对比技术的效率性和准确性是一对矛盾的属性。理论上来说,对比技术越是复杂和精细,对比的准确性就会越高,然而这会使得对比过程十分的耗时,无法应对大型的代码对比中,反之,采用较为简单和粗略的对比方法能够降低对比过程的耗时,却不能保证对比的准确性。在规模性方面,目前的二进制对比工具主要是基于内存进行的,对代码提取出来的特征无法永久化的存储起来,这使得每一次对比过程都要进行重复的特征提取步骤。代码相似性对比技术的基本研究问题是检测一个程序中的一个组件是否与另一个程序中的一个组件相似,并定量地度量它们之间的相似性。组件可以是单个函数,一组函数或整个程序。本文针对二进制代码对比技术存在的问题,研究了在二进制函数级别的对比技术,主要工作如下:1.本文针对目前二进制代码对比技术存在的问题,设计了一个二进制代码代码对比算法,主要提出了二进制函数特征的选择及提取方法,同时基于提取出来的特征设计了启发式的函数对比算法,实验表明算法的准确性较高。2.实现了二进制代码并行分析框架。为了进一步提高对比算法的效率,充分挖掘算法中可并行的部分,采用分布式编程工具包,实现了一个二进制代码并行分析工具。实验表明工具在进行二进制代码对比分析时有着较高的性能。3.实现了一套海量二进制代码特征存储与检索机制。在规模性方面,目前的二进制对比工具主要适用进行一对一的比较,在只有待分析的二进制文件而无法掌握相似的已分析二进制文件的情况下,这样的方法并不适用,此外,作为安全分析人员,我们希望能够将已分析的具有参考价值的二进文件,如具有某一漏洞的库等以一种方便进行对比的方式存储起来。针对这个问题,提出了二进制函数特征的存储机制,使用图数据库Jaunsgraph存储二进制函数特征,并制定了数据模型,构建了分析需要的二进制代码样本库。