用于软件分析的系统和方法技术方案

技术编号:15342834 阅读:38 留言:0更新日期:2017-05-17 00:16
提供了用于通过以下方式来标识软件文件、代码中的缺陷和程序片段的系统、方法和计算机程序产品:获取软件文件,确定多个产物,访问存储针对参考软件文件的多个参考产物的数据库,比较产物中的至少一个与存储在数据库中的参考产物中的至少一个,以及通过标识具有对应于多个产物的参考产物的参考软件文件来标识软件文件。某些实施例还可以自动提供文件的更新版本、要应用的补丁或修复的代码块以替换有缺陷的块。示例实施例可以接受各种各样的文件类型,包括源代码和二进制文件,并且可以分析源代码或将文件转换为中间表示(IR)并分析IR。

【技术实现步骤摘要】
【国外来华专利技术】用于软件分析的系统和方法相关申请本申请要求2014年6月13日提交的美国临时申请第62/012,127号的权益。以上申请的全部教示通过引用合并于此。政府支持本专利技术是在来自美国空军的授权号FA8750-14-C-0056和来自国防高级研究计划局的授权号FA8750-15-C-0242的政府支持下进行的。政府对本专利技术具有一定的权利。
技术介绍
当今,软件开发、维护和修复是手动过程。软件供应商随着时间计划、实现、记录、测试、部署和维护计算机程序。初始计划、实现、记录、测试和部署通常是不完整的,并且总是缺少所需的功能或包含缺陷。很多供应商有生命周期维护计划以通过随着软件成熟推出迭代故障修复、安全补丁和功能增强来解决这些缺陷。世界上部署了数十亿行的大量的软件代码,并且维护和故障修复花费大量的时间和金钱来解决。历史上,软件维护一直是专门的和反应的(即,响应于故障报告、安全漏洞报告和用户对特征增强的请求)手动过程。
技术实现思路
本专利技术的实施例使软件开发、维护和修复生命周期的关键方面自动化,包括例如查找和修复程序缺陷,例如故障(代码中的错误)、安全漏洞和协议缺点。本专利技术的示例实施例提供了可以利用大量软件文件的系统和方法,包括公开可用的或专有的软件文件。某些示例实施例可以自动标识和提供针对软件文件的最新版本或补丁。另外的实施例可以自动定位已知存在于某些软件文件中的设计模式、例如软件缺陷(例如,故障、安全漏洞、协议缺点)并提供修复。其他实施例可以通过先前前不知道文件包含缺陷的软件文件中定位已知缺陷来利用已知缺陷。另外的实施例可以自动定位设计模式,例如标识源代码或二进制代码的部分,以标识文件、程序、函数或代码块。当标识出软件缺陷时,对于一些实施例,可以使用对应的软件修复模式生成修复规范。例如,该修复规范可以用于以源或二进制(也称为机器语言)补丁的形式来合成适当的软件修复。某些示例实施例可以支持对二进制代码和源代码二者执行自动软件维护,例如缺陷标识和修复,从而实现针对传统系统的广泛的自动化软件维护。根据本专利技术的一个实施例,一种用于标识软件的方法包括获取软件文件,确定针对软件文件的多个产物,访问存储针对多个参考软件文件中的每个参考软件文件的多个参考产物的数据库,将多个产物与多个参考产物进行比较,以及通过标识具有与多个产物匹配的多个参考产物的参考软件文件来标识软件文件。根据另外的实施例,针对软件文件的多个产物可以包括调用图、控制流图、使用定义链、定义使用链、支配树、基本块、变量、常数、分支语义和协议中的一个或多个。对于其他另外的实施例,多个产物可以包括系统调用跟踪和执行跟踪中的一个或多个。对于另一示例实施例,多个产物可以包括循环不变量、类型信息、Z语言和标签转移系统表示中的一个或多个。对于某些示例实施例,多个产物可以包括根据内联代码注释、提交历史、文档文件和常见漏洞和披露源条目(entry)中的任一个确定的一个或多个产物。对于一些示例实施例,多个产物每个是图产物或开发产物。对于另外的实施例,多个产物每个是静态产物、动态产物、导出的产物或元数据产物。对于某些实施例,当在多个参考产物与多个产物之间至少存在模糊匹配时,多个参考产物匹配多个产物。根据另外的实施例,该方法还可以通过分析存储在数据库中与所标识的参考软件文件相关联的参考产物中的至少一个参考产物来确定是否存在软件文件的较新版本。对于一些实施例,该方法还可以自动提供软件文件的较新版本。根据其他实施例,该方法还可以包括通过分析与所标识的参考软件文件相关联的参考产物中的至少一个参考产物来确定是否存在针对软件文件的补丁。某些实施例还可以向软件文件自动应用补丁。其他实施例还可以分析补丁以确定与软件文件中的缺陷的修复对应的补丁的修复部分,并且仅将补丁的修复部分应用于软件文件。对于某些实施例,分析补丁和软件文件包括将补丁转换为中间表示,并且对于某些实施例将软件文件也转换为中间表示,并且根据中间表示确定产物中的至少一个产物。本专利技术的某些实施例可以通过将软件文件转换为中间表示并且根据中间表示确定多个产物中的至少一个产物来确定针对软件文件的多个产物。另外的实施例还可以在例如虚拟机的仪器化环境中运行软件文件以确定产物。某些实施例还可以通过从软件文件提取字符串来确定产物中的一些产物,包括当软件文件是源代码格式或二进制代码格式时。示例方法的另外的实施例可以通过分析与所标识的参考软件文件相关联的参考产物中的至少一个参考产物以及与对于某些实施例的软件文件相关联的产物中的至少一个产物来确定软件文件中是否存在缺陷。另外的实施例可以自动修复软件文件中的缺陷。对于这些实施例中的某些实施例,自动修复缺陷包括用源代码修复块替换源代码块。对于这些实施例中的某些实施例,自动修复缺陷包括用二进制代码修复块替换二进制代码块。对于这些实施例中的某些实施例,自动修复缺陷包括用中间表示修复块替换软件文件的中间表示块。这些块可以是连续的,但不一定是连续的,并且可以包括遍布文件的代码。根据本专利技术的另一实施例,一种用于标识代码的方法包括获取一个或多个软件文件,确定针对软件文件的多个产物,访问存储多个参考产物的数据库,以及通过将与程序片段对应的多个产物和与程序片段对应的多个参考产物相匹配来标识软件文件中的程序片段。匹配也可以基于模糊匹配,在模糊匹配中,接近匹配被认为是匹配。对于一些实施例,确定针对软件文件的多个产物包括将软件文件转换为中间表示格式,并且根据中间表示确定多个产物中的至少一个产物。对于示例方法的一些实施例,软件文件每个是源代码格式。对于其他实施例,软件文件每个是二进制代码格式。对于一些实施例,程序片段与软件文件中的缺陷对应,例如故障、安全漏洞或协议缺点。对于某些示例实施例,多个产物包括图产物和/或开发产物,或者多个产物每个是元数据产物。对于某些示例实施例,一个或多个软件文件可以是软件项目内的文件。对于某些实施例,与程序片段对应的参考产物先前已经在数据库中被标识为与缺陷对应。对于一些实施例,该方法还包括自动修复软件文件中的缺陷,向用户提供一个或多个修复选项以修复缺陷,和/或对一个或多个修复选项排序,包括基于由用户选择的一个或多个先前修复选项或基于针对每个修复选项的成功的可能性。自动修复缺陷包括在没有来自用户的针对该文件的任何输入的情况下修复缺陷,包括通过参考配置文件、设置或标志(包括可以由用户(例如管理员)先前设置的那些)来确定是否需要或允许自动修复缺陷。对于某些示例实施例,程序片段已经在数据库中被标识为与特征对应。某些实施例还可以利用特征增强来自动加强特征,包括通过应用二进制或源代码补丁。本专利技术的另外的实施例提供一种用于标识软件的系统,其包括能够与具有软件文件的源通信的接口、存储针对多个参考软件文件中的每个参考软件文件的多个参考产物的存储设备、通信地耦合到接口和存储设备并且被配置为进行以下操作的处理器:获取软件文件,确定针对软件文件的多个产物,访问存储设备中的多个参考产物,将多个产物与多个参考产物相比较,以及通过标识具有与多个产物相匹配的多个参考产物的参考软件文件来标识软件文件。系统的另外的实施例可以使处理器被配置为除了其他以外通过以下操作来确定针对软件文件的多个产物:将软件文件转换为中间表示,并且根据中间表示确定多个产物本文档来自技高网...
用于软件分析的系统和方法

【技术保护点】
一种用于标识软件的方法,包括:获取软件文件;确定针对所述软件文件的多个产物;访问存储针对多个参考软件文件中的每个参考软件文件的多个参考产物的数据库;将所述多个产物与所述多个参考产物相比较;以及通过标识具有与所述多个产物相匹配的所述多个参考产物的所述参考软件文件,来标识所述软件文件。

【技术特征摘要】
【国外来华专利技术】2014.06.13 US 62/012,1271.一种用于标识软件的方法,包括:获取软件文件;确定针对所述软件文件的多个产物;访问存储针对多个参考软件文件中的每个参考软件文件的多个参考产物的数据库;将所述多个产物与所述多个参考产物相比较;以及通过标识具有与所述多个产物相匹配的所述多个参考产物的所述参考软件文件,来标识所述软件文件。2.根据权利要求1所述的方法,其中所述多个产物包括以下各项中的一项或多项:调用图、控制流图、使用定义链、定义使用链、支配树、基本块、变量、常数、分支语义和协议。3.根据权利要求1所述的方法,其中所述多个产物包括系统调用跟踪和执行跟踪中的一个或多个。4.根据权利要求1所述的方法,其中所述多个产物包括以下各项中的一项或多项:循环不变量、类型信息、Z语言和标签转移系统表示。5.根据权利要求1所述的方法,其中所述多个产物包括根据以下各项中的任一项确定的一个或多个产物:内联代码注释、提交历史、文档文件以及常见漏洞和披露源条目。6.根据权利要求1所述的方法,其中所述多个产物各自是图产物。7.根据权利要求1所述的方法,其中所述多个产物各自是元数据产物。8.根据权利要求1所述的方法,其中当所述多个参考产物与所述多个产物之间至少存在模糊匹配时,所述多个参考产物匹配所述多个产物。9.根据权利要求1所述的方法,其中确定针对所述软件文件的所述多个产物包括:将所述软件文件转换为中间表示,并且根据所述中间表示确定所述多个产物中的至少一个产物。10.根据权利要求1所述的方法,还包括:通过分析与标识的所述参考软件文件相关联的所述参考产物中的至少一个参考产物,来确定是否存在所述软件文件的较新版本。11.根据权利要求10所述的方法,还包括自动提供所述软件文件的所述较新版本。12.根据权利要求1所述的方法,还包括:通过分析与标识的所述参考软件文件相关联的所述参考产物中的至少一个参考产物,来确定是否存在针对所述软件文件的补丁。13.根据权利要求12所述的方法,还包括向所述软件文件自动应用所述补丁。14.根据权利要求12所述的方法,还包括:分析所述补丁以确定与所述软件文件中的缺陷的修复对应的所述补丁的修复部分,并且向所述软件文件仅应用所述补丁的所述修复部分。15.根据权利要求14所述的方法,其中分析所述补丁包括:将所述补丁转换为中间表示,并且根据所述中间表示确定至少一个补丁产物。16.根据权利要求1所述的方法,还包括:通过分析与标识的所述参考软件文件相关联的所述参考产物中的至少一个参考产物以及与所述软件文件相关联的所述产物中的至少一个产物,来确定所述软件文件中是否存在缺陷。17.根据权利要求16所述的方法,还包括自动修复所述软件文件中的所述缺陷。18.根据权利要求17所述的方法,其中自动修复所述缺陷包括使用源代码修复块替换源代码块。19.根据权利要求17所述的方法,其中自动修复所述缺陷包括使用二进制代码修复块替换二进制代码块。20.根据权利要求17所述的方法,其中自动修复所述缺陷包括使用中间表示修复块替换所述软件文件中的中间表示块。21.一种方法,包括:获取一个或多个软件文件;确定针对所述一个或多个软件文件的多个产物;访问存储多个参考产物的数据库;以及通过将与针对所述一个或多个软件文件的程序片段对应的所述多个产物和对应于所述程序片段的所述多个参考产物相匹配,来标识所述程序片段。22.根据权利要求21所述的方法,其中所述程序片段已经在所述数据库中被标识为与缺陷对应。23.根据权利要求21所述的方法,其中所述程序片段与所述一个或多个软件文件中的缺陷对应。24.根据权利要求21所述的方法,其中所述程序片段与从下列组中选择的缺陷对应,所述组由下列各项组成:故障、安全漏洞和协议缺点。25.根据权利要求23所述的方法,还包括自动修复所述一个或多个软件文件中的所述缺陷。26.根据权利要求25所述的方法,其中自动修复所述缺陷包括提供修复程序片段以替换缺陷程序片段。27.根据权利要求23所述的方法,还包括向用户提供一个或多个修复选项以修复所述缺陷。28.根据权利要求27所述的方法,还包括对被提供给所述用户的所述...

【专利技术属性】
技术研发人员:R·T·卡巴克三世B·D·加伊诺N·A·布洛克N·R·什尼德曼
申请(专利权)人:查尔斯斯塔克德拉珀实验室公司
类型:发明
国别省市:美国,US

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1