CN115510450B - 一种面向计算机二进制程序的比对依赖识别方法与系统 - Google Patents
一种面向计算机二进制程序的比对依赖识别方法与系统 Download PDFInfo
- Publication number
- CN115510450B CN115510450B CN202211144654.2A CN202211144654A CN115510450B CN 115510450 B CN115510450 B CN 115510450B CN 202211144654 A CN202211144654 A CN 202211144654A CN 115510450 B CN115510450 B CN 115510450B
- Authority
- CN
- China
- Prior art keywords
- field
- comparison
- byte
- program
- input
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Quality & Reliability (AREA)
- Computing Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本公开提出一种面向计算机二进制程序的比对依赖识别方法与系统,涉及数据处理技术领域。本公开通过对输入用例进行逐字节的字节翻转,监控字节翻转前后目标程序的cmp指令操作数值变动状况,来识别输入用例与目标程序比对指令之间存在的比对依赖,并输出比对依赖信息,辅助模糊测试器构造可触发新分支的测试用例,提升漏洞的发掘效率。
Description
技术领域
本发明属于数字处理技术领域,尤其涉及一种面向计算机二进制程序的比对依赖识别方法与系统。
背景技术
软件是互联网生态重要组成部分,然而由于设计不当、开发失误等原因,软件中存在形式多样的漏洞,对软件安全乃至互联网安全带来严重安全隐患,不仅威胁个人隐私与财产安全,也对战略安全造成重大威胁。模糊测试以自动化手段挖掘软件漏洞,发现系统安全漏洞。但传统模糊测试缺乏比对依赖信息的引导,仅能覆盖软件的少部分功能代码,在漏洞发掘效率上存在提升空间。
发明内容
为了解决上述技术问题,本发明提出了一种面向计算机二进制程序的比对依赖识别方案。
本发明第一方面公开了一种面向计算机二进制程序的比对依赖识别方法。所述方法包括:步骤S1、获取输入用例的待识别字段集合A,并以所述输入用例为程序输入运行目标程序,以进一步获取所述目标程序中包含的各个cmp指令的操作数记录C;步骤S2、对所述待识别字段集合A中的字段执行第一翻转,以所述第一翻转后的输入用例为程序输入运行所述目标程序,并记录所述各个cmp指令的操作数记录C1,基于所述操作数记录C和所述操作数记录C1的比对结果,从所述待识别字段集合A中过滤掉部分与所述各个cmp指令不存在比对依赖的字段,并获得候选字段集合A1;步骤S3、对所述候选字段集合A1中的字段执行第二翻转,以所述第二翻转后的输入用例为程序输入运行所述目标程序,并记录所述各个cmp指令的操作数记录C2,基于所述操作数记录C和所述操作数记录C2的比对结果,确定与所述各个cmp指令存在比对依赖的字段,并提取出比对依赖信息。
根据本发明第一方面的方法,在所述步骤S1中:以所述输入用例为输入,从所述输入用例中提取出若干待识别字段,从而获取所述待识别字段集合A;以所述输入用例为输入,启动所述目标程序,监控并记录所述各个cmp指令的操作数的实时值,以所述实时值作为所述操作数记录C。
根据本发明第一方面的方法,所述步骤S2具体包括:步骤S2-1、设置字段最短长度阈值minspan;步骤S2-2、从所述待识别字段集合A中选取具有最大字段长度的字段,若该字段的长度大于所述字段最短长度阈值minspan,则对该字段的整体字节执行所述第一翻转,所述第一翻转为二进制范围,具体为:将字节1翻转为字节0,且将字节0翻转为字节1;步骤S2-3、以经所述第一翻转后的输入用例为程序输入重新运行所述目标程序,并记录所述各个cmp指令的操作数记录C1,比对所述操作数记录C和所述操作数记录C1;若比对一致,则该字段与所述各个cmp指令不存在比对依赖,对该字段进行丢弃处理,从所述待识别字段集合A中删除所述具有最大字段长度的字段;若比对不一致,则该字段与所述操作数记录C1中发生变动的操作数记录值所对应的cmp指令存在比对依赖,将该字段切分为长度相等的两个字段,并将切分后的两个字段放入所述待识别字段集合A,从所述待识别字段集合A中删除所述具有最大字段长度的字段;步骤S2-4、重复执行所述步骤S2-2至所述步骤S2-3,直到所述待识别字段集合A中的每个字段的长度都不大于所述字段最短长度阈值minspan,从而得到所述候选字段集合A1。
根据本发明第一方面的方法,所述步骤S3具体包括:步骤S3-1、对所述候选字段集合A1中包含的K个字段,基于字段长度从大到小的顺序进行排序,并依次选取字段,对选取到的字段P(j)计算其字段长度LP(j),1≤j≤K;步骤S3-2、对字段P(j)的各个字节依次进行第二翻转,所述第二翻转为:将所述字段P(j)的第i个字节进行二进制翻转,字节1翻转为字节0,或字节0翻转为字节1,1≤i≤LP(j);步骤S3-3、每执行一次所述第i个字节的翻转,以经所述第二翻转后的输入用例为程序输入重新运行所述目标程序,并记录所述各个cmp指令的操作数记录C2,比对所述操作数记录C和所述操作数记录C2;若比对一致,则所述字段P(j)的第i个字节与所述各个cmp指令不存在比对依赖;若比对不一致,则所述字段P(j)的第i个字节与所述操作数记录C2中发生变动的操作数记录值所对应的cmp指令存在比对依赖,提取所述字段P(j)的第i个字节的位置以及对应的所述操作数记录C2,作为所述比对依赖信息;步骤S3-4、直到所述候选字段集合A1中的各个字段包含的各个字节都经所述第二翻转和所述比对后,对提取到的所有比对依赖信息进行汇总。
本发明第二方面公开了一种面向计算机二进制程序的比对依赖识别系统。所述系统包括:第一处理单元,被配置为:获取输入用例的待识别字段集合A,并以所述输入用例为程序输入运行目标程序,以进一步获取所述目标程序中包含的各个cmp指令的操作数记录C;第二处理单元,被配置为:对所述待识别字段集合A中的字段执行第一翻转,以所述第一翻转后的输入用例为程序输入运行所述目标程序,并记录所述各个cmp指令的操作数记录C1,基于所述操作数记录C和所述操作数记录C1的比对结果,从所述待识别字段集合A中过滤掉部分与所述各个cmp指令不存在比对依赖的字段,并获得候选字段集合A1;第三处理单元,被配置为:对所述候选字段集合A1中的字段执行第二翻转,以所述第二翻转后的输入用例为程序输入运行所述目标程序,并记录所述各个cmp指令的操作数记录C2,基于所述操作数记录C和所述操作数记录C2的比对结果,确定与所述各个cmp指令存在比对依赖的字段,并提取出比对依赖信息。
根据本发明第二方面的系统,所述第一处理单元具体被配置为执行:以所述输入用例为输入,从所述输入用例中提取出若干待识别字段,从而获取所述待识别字段集合A;以所述输入用例为输入,启动所述目标程序,监控并记录所述各个cmp指令的操作数的实时值,以所述实时值作为所述操作数记录C。
根据本发明第二方面的系统,所述第二处理单元具体被配置为:步骤S2-1、设置字段最短长度阈值minspan;步骤S2-2、从所述待识别字段集合A中选取具有最大字段长度的字段,若该字段的长度大于所述字段最短长度阈值minspan,则对该字段的整体字节执行所述第一翻转,所述第一翻转为二进制范围,具体为:将字节1翻转为字节0,且将字节0翻转为字节1;步骤S2-3、以经所述第一翻转后的输入用例为程序输入重新运行所述目标程序,并记录所述各个cmp指令的操作数记录C1,比对所述操作数记录C和所述操作数记录C1;若比对一致,则该字段与所述各个cmp指令不存在比对依赖,对该字段进行丢弃处理,从所述待识别字段集合A中删除所述具有最大字段长度的字段;若比对不一致,则该字段与所述操作数记录C1中发生变动的操作数记录值所对应的cmp指令存在比对依赖,将该字段切分为长度相等的两个字段,并将切分后的两个字段放入所述待识别字段集合A,从所述待识别字段集合A中删除所述具有最大字段长度的字段;步骤S2-4、重复执行所述步骤S2-2至所述步骤S2-3,直到所述待识别字段集合A中的每个字段的长度都不大于所述字段最短长度阈值minspan,从而得到所述候选字段集合A1。
根据本发明第二方面的系统,所述第三处理单元具体被配置为:步骤S3-1、对所述候选字段集合A1中包含的K个字段,基于字段长度从大到小的顺序进行排序,并依次选取字段,对选取到的字段P(j)计算其字段长度LP(j),1≤j≤K;步骤S3-2、对字段P(j)的各个字节依次进行第二翻转,所述第二翻转为:将所述字段P(j)的第i个字节进行二进制翻转,字节1翻转为字节0,或字节0翻转为字节1,1≤i≤LP(j);步骤S3-3、每执行一次所述第i个字节的翻转,以经所述第二翻转后的输入用例为程序输入重新运行所述目标程序,并记录所述各个cmp指令的操作数记录C2,比对所述操作数记录C和所述操作数记录C2;若比对一致,则所述字段P(j)的第i个字节与所述各个cmp指令不存在比对依赖;若比对不一致,则所述字段P(j)的第i个字节与所述操作数记录C2中发生变动的操作数记录值所对应的cmp指令存在比对依赖,提取所述字段P(j)的第i个字节的位置以及对应的所述操作数记录C2,作为所述比对依赖信息;步骤S3-4、直到所述候选字段集合A1中的各个字段包含的各个字节都经所述第二翻转和所述比对后,对提取到的所有比对依赖信息进行汇总。
本发明第三方面公开了一种电子设备。所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现本发明第一方面所述的一种面向计算机二进制程序的比对依赖识别方法中的步骤。
本发明第四方面公开了一种计算机可读存储介质。所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现本发明第一方面所述的一种面向计算机二进制程序的比对依赖识别方法中的步骤。
综上,本发明提供的技术方案通过有选择性地对待识别字段进行折半调度,轻量地识别与排除无依赖字段,对元数据密集的字段集中进行逐字节的比对依赖识别,来解决现有技术中依赖识别时间效率低下的问题。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为根据本发明实施例的一种面向计算机二进制程序的比对依赖识别方法的流程图;
图2为根据本发明实施例的比对依赖识别模块的架构图;
图3为根据本发明实施例的一种电子设备的结构图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例只是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
模糊测试:模糊测试(fuzz testing,fuzzing)是一种软件测试技术。其核心思想是自动或半自动地生成随机数据输入到一个程序中,监视如崩溃、断言(assertion)失败等的程序异常,以发现可能的程序错误,如内存泄漏等。模糊测试常常用于挖掘软件或计算机系统的安全漏洞。
漏洞:漏洞是指计算机程序或系统中的缺陷,其通常源于程序源代码设计上的缺陷。
cmp指令:指一类计算机二进制程序汇编指令,此类指令将比较两个操作数的数据值大小,并根据比较结果调整其他条件寄存器值,进而影响程序执行流程。
比对依赖:当程序中某个cmp指令操作数的实际运行值受到输入用例中某些字段的影响,则认为这些字段与该cmp指令操作数存在比对依赖。
无依赖字段:指输入用例中不存在比对依赖的字段。
待识别字段:指输入用例中尚未被进行比对依赖识别的字段。
输入用例:指代一种与目标程序相对应的输入文件,若目标程序是mp3播放软件的话,输入用例即为mp3格式文件;若目标程序为pdf阅读器的话,输入用例即为pdf格式文件。
本发明第一方面公开了一种面向计算机二进制程序的比对依赖识别方法。图1为根据本发明实施例的一种面向计算机二进制程序的比对依赖识别方法的流程图;如图1所示,所述方法包括:
步骤S1、获取输入用例的待识别字段集合A,并以所述输入用例为程序输入运行目标程序,以进一步获取所述目标程序中包含的各个cmp指令的操作数记录C;
步骤S2、对所述待识别字段集合A中的字段执行第一翻转,以所述第一翻转后的输入用例为程序输入运行所述目标程序,并记录所述各个cmp指令的操作数记录C1,基于所述操作数记录C和所述操作数记录C1的比对结果,从所述待识别字段集合A中过滤掉部分与所述各个cmp指令不存在比对依赖的字段,并获得候选字段集合A1;
步骤S3、对所述候选字段集合A1中的字段执行第二翻转,以所述第二翻转后的输入用例为程序输入运行所述目标程序,并记录所述各个cmp指令的操作数记录C2,基于所述操作数记录C和所述操作数记录C2的比对结果,确定与所述各个cmp指令存在比对依赖的字段,并提取出比对依赖信息。
在一些实施例中,在所述步骤S1中:
以所述输入用例为输入,从所述输入用例中提取出若干待识别字段,从而获取所述待识别字段集合A;
以所述输入用例为输入,启动所述目标程序,监控并记录所述各个cmp指令的操作数的实时值,以所述实时值作为所述操作数记录C。
在一些实施例中,所述步骤S2具体包括:
步骤S2-1、设置字段最短长度阈值minspan;
步骤S2-2、从所述待识别字段集合A中选取具有最大字段长度的字段,若该字段的长度大于所述字段最短长度阈值minspan,则对该字段的整体字节执行所述第一翻转,所述第一翻转为二进制范围,具体为:将字节1翻转为字节0,且将字节0翻转为字节1;
步骤S2-3、以经所述第一翻转后的输入用例为程序输入重新运行所述目标程序,并记录所述各个cmp指令的操作数记录C1,比对所述操作数记录C和所述操作数记录C1;
若比对一致,则该字段与所述各个cmp指令不存在比对依赖,对该字段进行丢弃处理,从所述待识别字段集合A中删除所述具有最大字段长度的字段;
若比对不一致,则该字段与所述操作数记录C1中发生变动的操作数记录值所对应的cmp指令存在比对依赖,将该字段切分为长度相等的两个字段,并将切分后的两个字段放入所述待识别字段集合A,从所述待识别字段集合A中删除所述具有最大字段长度的字段;
步骤S2-4、重复执行所述步骤S2-2至所述步骤S2-3,直到所述待识别字段集合A中的每个字段的长度都不大于所述字段最短长度阈值minspan,从而得到所述候选字段集合A1。
在一些实施例中,所述步骤S3具体包括:
步骤S3-1、对所述候选字段集合A1中包含的K个字段,基于字段长度从大到小的顺序进行排序,并依次选取字段,对选取到的字段P(j)计算其字段长度LP(j),1≤j≤K;
步骤S3-2、对字段P(j)的各个字节依次进行第二翻转,所述第二翻转为:将所述字段P(j)的第i个字节进行二进制翻转,字节1翻转为字节0,或字节0翻转为字节1,1≤i≤LP(j);
步骤S3-3、每执行一次所述第i个字节的翻转,以经所述第二翻转后的输入用例为程序输入重新运行所述目标程序,并记录所述各个cmp指令的操作数记录C2,比对所述操作数记录C和所述操作数记录C2;
若比对一致,则所述字段P(j)的第i个字节与所述各个cmp指令不存在比对依赖;
若比对不一致,则所述字段P(j)的第i个字节与所述操作数记录C2中发生变动的操作数记录值所对应的cmp指令存在比对依赖,提取所述字段P(j)的第i个字节的位置以及对应的所述操作数记录C2,作为所述比对依赖信息;
步骤S3-4、直到所述候选字段集合A1中的各个字段包含的各个字节都经所述第二翻转和所述比对后,对提取到的所有比对依赖信息进行汇总。
结合图2对具体示例1进行详细说明,图2为根据本发明实施例的比对依赖识别模块的架构图;如图2所示:
(1)用户提供输入用例及最短长度minspan。比对依赖识别模块以初始输入用例为输入,启动目标程序,监控并记录所有cmp指令操作数的实时值,形成初始cmp指令操作数记录C。待识别字段调度模块以此为输入,形成初始待识别字段,存入待识别字段集合A中。
(2)待识别字段调度模块从待识别字段集合A中挑出一个长度最长的字段。若该字段长度大于minspan,则无依赖字段推理模块对该字段整体进行字节翻转,进入步骤(3);否则,字节翻转字段对该字段进入步骤(6)。
(3)实时监控引擎以翻转后的输入用例为输入,启动目标程序,监控并记录所有cmp指令的操作数具体值,形成cmp指令记录C1,进入步骤(4)。
(4)实时监控引擎将cmp指令记录输出至无依赖字段推理模块,进入步骤(5)。
(5)无依赖字段推理模块对C和C1进行比对,若没有任何cmp指令操作数的具体值发生变动,则视该字段为无依赖字段;若有,则将该字段一分为二,重新存入至待识别字段集合A中,进入步骤(2)。
(6)字节翻转模块对输入用例中每一个字段的每一个字节进行字节翻转,将翻转后的输入用例输出至实时监控引擎;
(7)实时监控引擎以翻转后的输入用例为输入,启动目标程序,监控并记录运行过程中所有cmp指令的操作数,在目标程序结束执行后将cmp指令记录C2输出至比对依赖推理模块;
(8比对依赖推理模块分析翻转输入用例前后的cmp指令记录C和C2,将第i个字节与发生值变化的cmp指令操作数相绑定,视为存在比对依赖。同时,i自增1,若i以至未达到文件末尾则进入步骤(6);若i以至文件末尾则进入步骤(9)。
(9)比对依赖推理模块输出所有比对依赖信息,形成比对依赖数据。
结合图2对具体示例2进行详细说明,图2为根据本发明实施例的比对依赖识别模块的架构图;如图2所示:
进行步骤(1),用户提供符合格式要求的初始测试用例,长度为128,minspan配置为32。启动目标程序,获取初始cmp指令操作数记录C。待识别字段调度模块形成初始待识别字段集合A={[0,127]}。
进行步骤(2),待识别字段调度模块从A={[0,127]}中挑出一个长度最长的字段[0,127],该长度大于minspan,进行步骤(3)-(5),由于字段[0,127]是存在比对依赖的,故在步骤(5)中该字段被一分为二,[0,63]、[64,127],存入待识别字段集合A中。
进行步骤(2),待识别字段调度模块从A={[0,63],[64,127]}中挑出一个长度最长的字段[64,127],该长度大于minspan,进行步骤(3)-(5),由于字段[64,127]是不存在比对依赖的,故在步骤(5)中该字段被视为无依赖字段,直接跳过。
进行步骤(2),待识别字段调度模块从A={[0,63]}中挑出一个长度最长的字段[0,63],该长度大于minspan,进行步骤(3)-(5),由于字段[0,63]是存在比对依赖的,故在步骤(5)中该字段被一分为二,[0,31],[32,63],存入待识别字段集合A中。
进行步骤(2),待识别字段调度模块从A={[0,31],[32,63]}中挑出一个长度最长的字段[32,63],该长度等于minspan,字段[32,63]中的比对依赖将通过步骤(6)-(8)进行识别。
进行步骤(2),待识别字段调度模块从A={[0,31]}中挑出一个长度最长的字段[0,31],该长度等于minspan,字段[0,31]中的比对依赖将通过步骤(6)-(8)进行识别。
进行步骤(9),比对依赖推理模块输出所有比对依赖信息,形成比对依赖数据。模糊测试器将根据比对依赖数据来构造能够对深层代码进行覆盖的测试用例。
本发明第二方面公开了一种面向计算机二进制程序的比对依赖识别系统。所述系统包括:第一处理单元,被配置为:获取输入用例的待识别字段集合A,并以所述输入用例为程序输入运行目标程序,以进一步获取所述目标程序中包含的各个cmp指令的操作数记录C;第二处理单元,被配置为:对所述待识别字段集合A中的字段执行第一翻转,以所述第一翻转后的输入用例为程序输入运行所述目标程序,并记录所述各个cmp指令的操作数记录C1,基于所述操作数记录C和所述操作数记录C1的比对结果,从所述待识别字段集合A中过滤掉部分与所述各个cmp指令不存在比对依赖的字段,并获得候选字段集合A1;第三处理单元,被配置为:对所述候选字段集合A1中的字段执行第二翻转,以所述第二翻转后的输入用例为程序输入运行所述目标程序,并记录所述各个cmp指令的操作数记录C2,基于所述操作数记录C和所述操作数记录C2的比对结果,确定与所述各个cmp指令存在比对依赖的字段,并提取出比对依赖信息。
根据本发明第二方面的系统,所述第一处理单元具体被配置为执行:以所述输入用例为输入,从所述输入用例中提取出若干待识别字段,从而获取所述待识别字段集合A;以所述输入用例为输入,启动所述目标程序,监控并记录所述各个cmp指令的操作数的实时值,以所述实时值作为所述操作数记录C。
根据本发明第二方面的系统,所述第二处理单元具体被配置为:步骤S2-1、设置字段最短长度阈值minspan;步骤S2-2、从所述待识别字段集合A中选取具有最大字段长度的字段,若该字段的长度大于所述字段最短长度阈值minspan,则对该字段的整体字节执行所述第一翻转,所述第一翻转为二进制范围,具体为:将字节1翻转为字节0,且将字节0翻转为字节1;步骤S2-3、以经所述第一翻转后的输入用例为程序输入重新运行所述目标程序,并记录所述各个cmp指令的操作数记录C1,比对所述操作数记录C和所述操作数记录C1;若比对一致,则该字段与所述各个cmp指令不存在比对依赖,对该字段进行丢弃处理,从所述待识别字段集合A中删除所述具有最大字段长度的字段;若比对不一致,则该字段与所述操作数记录C1中发生变动的操作数记录值所对应的cmp指令存在比对依赖,将该字段切分为长度相等的两个字段,并将切分后的两个字段放入所述待识别字段集合A,从所述待识别字段集合A中删除所述具有最大字段长度的字段;步骤S2-4、重复执行所述步骤S2-2至所述步骤S2-3,直到所述待识别字段集合A中的每个字段的长度都不大于所述字段最短长度阈值minspan,从而得到所述候选字段集合A1。
根据本发明第二方面的系统,所述第三处理单元具体被配置为:步骤S3-1、对所述候选字段集合A1中包含的K个字段,基于字段长度从大到小的顺序进行排序,并依次选取字段,对选取到的字段P(j)计算其字段长度LP(j),1≤j≤K;步骤S3-2、对字段P(j)的各个字节依次进行第二翻转,所述第二翻转为:将所述字段P(j)的第i个字节进行二进制翻转,字节1翻转为字节0,或字节0翻转为字节1,1≤i≤LP(j);步骤S3-3、每执行一次所述第i个字节的翻转,以经所述第二翻转后的输入用例为程序输入重新运行所述目标程序,并记录所述各个cmp指令的操作数记录C2,比对所述操作数记录C和所述操作数记录C2;若比对一致,则所述字段P(j)的第i个字节与所述各个cmp指令不存在比对依赖;若比对不一致,则所述字段P(j)的第i个字节与所述操作数记录C2中发生变动的操作数记录值所对应的cmp指令存在比对依赖,提取所述字段P(j)的第i个字节的位置以及对应的所述操作数记录C2,作为所述比对依赖信息;步骤S3-4、直到所述候选字段集合A1中的各个字段包含的各个字节都经所述第二翻转和所述比对后,对提取到的所有比对依赖信息进行汇总。
本发明第三方面公开了一种电子设备。所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现本发明第一方面所述的一种面向计算机二进制程序的比对依赖识别方法中的步骤。
图3为根据本发明实施例的一种电子设备的结构图;如图3所示,电子设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、近场通信(NFC)或其他技术实现。该电子设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该电子设备的输入装置可以是显示屏上覆盖的触摸层,也可以是电子设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图3中示出的结构,仅仅是与本公开的技术方案相关的部分的结构图,并不构成对本申请方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本发明第四方面公开了一种计算机可读存储介质。所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现本发明第一方面所述的一种对频谱分析仪的频率响应进行校准的方法中的步骤。
本发明第四方面公开了一种计算机可读存储介质。所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现本发明第一方面所述的一种面向计算机二进制程序的比对依赖识别方法中的步骤。
综上,本发明提供的技术方案通过有选择性地对待识别字段进行折半调度,轻量地识别与排除无依赖字段,对元数据密集的字段集中进行逐字节的比对依赖识别,来解决现有技术中依赖识别时间效率低下的问题。在维持不漏报的同时,提升时间效率,帮助模糊测试器在更短的时间内完成依赖分析,使其能够更高效地对深层代码进行覆盖,提升代码漏洞的发掘效率。
请注意,以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种面向计算机二进制程序的比对依赖识别方法,其特征在于,所述方法包括:
步骤S1、获取输入用例的待识别字段集合A,并以所述输入用例为程序输入运行目标程序,以进一步获取所述目标程序中包含的各个cmp指令的操作数记录C;
步骤S2、对所述待识别字段集合A中的字段执行第一翻转,以所述第一翻转后的输入用例为程序输入运行所述目标程序,并记录所述各个cmp指令的操作数记录C1,基于所述操作数记录C和所述操作数记录C1的比对结果,从所述待识别字段集合A中过滤掉部分与所述各个cmp指令不存在比对依赖的字段,并获得候选字段集合A1;
步骤S3、对所述候选字段集合A1中的字段执行第二翻转,以所述第二翻转后的输入用例为程序输入运行所述目标程序,并记录所述各个cmp指令的操作数记录C2,基于所述操作数记录C和所述操作数记录C2的比对结果,确定与所述各个cmp指令存在比对依赖的字段,并提取出比对依赖信息。
2.根据权利要求1所述的一种面向计算机二进制程序的比对依赖识别方法,其特征在于,在所述步骤S1中:
以所述输入用例为输入,从所述输入用例中提取出若干待识别字段,从而获取所述待识别字段集合A;
以所述输入用例为输入,启动所述目标程序,监控并记录所述各个cmp指令的操作数的实时值,以所述实时值作为所述操作数记录C。
3.根据权利要求1所述的一种面向计算机二进制程序的比对依赖识别方法,其特征在于,所述步骤S2具体包括:
步骤S2-1、设置字段最短长度阈值minspan;
步骤S2-2、从所述待识别字段集合A中选取具有最大字段长度的字段,若该字段的长度大于所述字段最短长度阈值minspan,则对该字段的整体字节执行所述第一翻转,所述第一翻转为二进制范围,具体为:将字节1翻转为字节0,且将字节0翻转为字节1;
步骤S2-3、以经所述第一翻转后的输入用例为程序输入重新运行所述目标程序,并记录所述各个cmp指令的操作数记录C1,比对所述操作数记录C和所述操作数记录C1;
若比对一致,则该字段与所述各个cmp指令不存在比对依赖,对该字段进行丢弃处理,从所述待识别字段集合A中删除所述具有最大字段长度的字段;
若比对不一致,则该字段与所述操作数记录C1中发生变动的操作数记录值所对应的cmp指令存在比对依赖,将该字段切分为长度相等的两个字段,并将切分后的两个字段放入所述待识别字段集合A,从所述待识别字段集合A中删除所述具有最大字段长度的字段;
步骤S2-4、重复执行所述步骤S2-2至所述步骤S2-3,直到所述待识别字段集合A中的每个字段的长度都不大于所述字段最短长度阈值minspan,从而得到所述候选字段集合A1。
4.根据权利要求2所述的一种面向计算机二进制程序的比对依赖识别方法,其特征在于,所述步骤S3具体包括:
步骤S3-1、对所述候选字段集合A1中包含的K个字段,基于字段长度从大到小的顺序进行排序,并依次选取字段,对选取到的字段P(j)计算其字段长度LP(j),1≤j≤K;
步骤S3-2、对字段P(j)的各个字节依次进行第二翻转,所述第二翻转为:将所述字段P(j)的第i个字节进行二进制翻转,字节1翻转为字节0,或字节0翻转为字节1,1≤i≤LP(j);
步骤S3-3、每执行一次所述第i个字节的翻转,以经所述第二翻转后的输入用例为程序输入重新运行所述目标程序,并记录所述各个cmp指令的操作数记录C2,比对所述操作数记录C和所述操作数记录C2;
若比对一致,则所述字段P(j)的第i个字节与所述各个cmp指令不存在比对依赖;
若比对不一致,则所述字段P(j)的第i个字节与所述操作数记录C2中发生变动的操作数记录值所对应的cmp指令存在比对依赖,提取所述字段P(j)的第i个字节的位置以及对应的所述操作数记录C2,作为所述比对依赖信息;
步骤S3-4、直到所述候选字段集合A1中的各个字段包含的各个字节都经所述第二翻转和所述比对后,对提取到的所有比对依赖信息进行汇总。
5.一种面向计算机二进制程序的比对依赖识别系统,其特征在于,所述系统包括:
第一处理单元,被配置为:获取输入用例的待识别字段集合A,并以所述输入用例为程序输入运行目标程序,以进一步获取所述目标程序中包含的各个cmp指令的操作数记录C;
第二处理单元,被配置为:对所述待识别字段集合A中的字段执行第一翻转,以所述第一翻转后的输入用例为程序输入运行所述目标程序,并记录所述各个cmp指令的操作数记录C1,基于所述操作数记录C和所述操作数记录C1的比对结果,从所述待识别字段集合A中过滤掉部分与所述各个cmp指令不存在比对依赖的字段,并获得候选字段集合A1;
第三处理单元,被配置为:对所述候选字段集合A1中的字段执行第二翻转,以所述第二翻转后的输入用例为程序输入运行所述目标程序,并记录所述各个cmp指令的操作数记录C2,基于所述操作数记录C和所述操作数记录C2的比对结果,确定与所述各个cmp指令存在比对依赖的字段,并提取出比对依赖信息。
6.根据权利要求5所述的一种面向计算机二进制程序的比对依赖识别系统,其特征在于,所述第一处理单元具体被配置为执行:
以所述输入用例为输入,从所述输入用例中提取出若干待识别字段,从而获取所述待识别字段集合A;
以所述输入用例为输入,启动所述目标程序,监控并记录所述各个cmp指令的操作数的实时值,以所述实时值作为所述操作数记录C。
7.根据权利要求5所述的一种面向计算机二进制程序的比对依赖识别系统,其特征在于,所述第二处理单元具体被配置为:
步骤S2-1、设置字段最短长度阈值minspan;
步骤S2-2、从所述待识别字段集合A中选取具有最大字段长度的字段,若该字段的长度大于所述字段最短长度阈值minspan,则对该字段的整体字节执行所述第一翻转,所述第一翻转为二进制范围,具体为:将字节1翻转为字节0,且将字节0翻转为字节1;
步骤S2-3、以经所述第一翻转后的输入用例为程序输入重新运行所述目标程序,并记录所述各个cmp指令的操作数记录C1,比对所述操作数记录C和所述操作数记录C1;
若比对一致,则该字段与所述各个cmp指令不存在比对依赖,对该字段进行丢弃处理,从所述待识别字段集合A中删除所述具有最大字段长度的字段;
若比对不一致,则该字段与所述操作数记录C1中发生变动的操作数记录值所对应的cmp指令存在比对依赖,将该字段切分为长度相等的两个字段,并将切分后的两个字段放入所述待识别字段集合A,从所述待识别字段集合A中删除所述具有最大字段长度的字段;
步骤S2-4、重复执行所述步骤S2-2至所述步骤S2-3,直到所述待识别字段集合A中的每个字段的长度都不大于所述字段最短长度阈值minspan,从而得到所述候选字段集合A1。
8.根据权利要求5所述的一种面向计算机二进制程序的比对依赖识别系统,其特征在于,所述第三处理单元具体被配置为:
步骤S3-1、对所述候选字段集合A1中包含的K个字段,基于字段长度从大到小的顺序进行排序,并依次选取字段,对选取到的字段P(j)计算其字段长度LP(j),1≤j≤K;
步骤S3-2、对字段P(j)的各个字节依次进行第二翻转,所述第二翻转为:将所述字段P(j)的第i个字节进行二进制翻转,字节1翻转为字节0,或字节0翻转为字节1,1≤i≤LP(j);
步骤S3-3、每执行一次所述第i个字节的翻转,以经所述第二翻转后的输入用例为程序输入重新运行所述目标程序,并记录所述各个cmp指令的操作数记录C2,比对所述操作数记录C和所述操作数记录C2;
若比对一致,则所述字段P(j)的第i个字节与所述各个cmp指令不存在比对依赖;
若比对不一致,则所述字段P(j)的第i个字节与所述操作数记录C2中发生变动的操作数记录值所对应的cmp指令存在比对依赖,提取所述字段P(j)的第i个字节的位置以及对应的所述操作数记录C2,作为所述比对依赖信息;
步骤S3-4、直到所述候选字段集合A1中的各个字段包含的各个字节都经所述第二翻转和所述比对后,对提取到的所有比对依赖信息进行汇总。
9.一种电子设备,其特征在于,所述电子设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时,实现权利要求1至4中任一项所述的一种面向计算机二进制程序的比对依赖识别方法中的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时,实现权利要求1至4中任一项所述的一种面向计算机二进制程序的比对依赖识别方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211144654.2A CN115510450B (zh) | 2022-09-20 | 2022-09-20 | 一种面向计算机二进制程序的比对依赖识别方法与系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211144654.2A CN115510450B (zh) | 2022-09-20 | 2022-09-20 | 一种面向计算机二进制程序的比对依赖识别方法与系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115510450A CN115510450A (zh) | 2022-12-23 |
CN115510450B true CN115510450B (zh) | 2023-08-01 |
Family
ID=84504797
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211144654.2A Active CN115510450B (zh) | 2022-09-20 | 2022-09-20 | 一种面向计算机二进制程序的比对依赖识别方法与系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115510450B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101847121A (zh) * | 2010-05-07 | 2010-09-29 | 北京大学 | 一种软件漏洞挖掘方法 |
CN108052825A (zh) * | 2017-12-29 | 2018-05-18 | 哈尔滨工业大学 | 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 |
CN109308415A (zh) * | 2018-09-21 | 2019-02-05 | 四川大学 | 一种面向二进制的导向性模糊测试方法与系统 |
CN109739755A (zh) * | 2018-12-27 | 2019-05-10 | 北京理工大学 | 一种基于程序追踪和混合执行的模糊测试系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10831478B2 (en) * | 2018-11-06 | 2020-11-10 | International Business Machines Corporation | Sort and merge instruction for a general-purpose processor |
-
2022
- 2022-09-20 CN CN202211144654.2A patent/CN115510450B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101847121A (zh) * | 2010-05-07 | 2010-09-29 | 北京大学 | 一种软件漏洞挖掘方法 |
CN108052825A (zh) * | 2017-12-29 | 2018-05-18 | 哈尔滨工业大学 | 针对二进制可执行文件的模糊测试与符号执行相结合的漏洞检测系统 |
CN109308415A (zh) * | 2018-09-21 | 2019-02-05 | 四川大学 | 一种面向二进制的导向性模糊测试方法与系统 |
CN109739755A (zh) * | 2018-12-27 | 2019-05-10 | 北京理工大学 | 一种基于程序追踪和混合执行的模糊测试系统 |
Non-Patent Citations (1)
Title |
---|
基于符号执行的二进制代码漏洞发现;牛伟纳;丁雪峰;刘智;张小松;;计算机科学(第10期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN115510450A (zh) | 2022-12-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108090567B (zh) | 电力通信系统故障诊断方法及装置 | |
US10423474B2 (en) | Performing diagnostic tracing of an executing application to identify suspicious pointer values | |
CN112560045A (zh) | 应用程序漏洞检测方法、装置、计算机设备和存储介质 | |
CN106326067A (zh) | 一种在压力测试下对cpu性能进行监控的方法及装置 | |
CN108733404B (zh) | 一种针对fpga固件的精准逆向工程方法 | |
CN113590454A (zh) | 测试方法、装置、计算机设备和存储介质 | |
CN113468525A (zh) | 针对二进制程序的相似漏洞检测方法及装置 | |
CN114389978B (zh) | 一种基于静态污点分析的网络协议侧信道检测方法和系统 | |
US8813036B2 (en) | Visual representation of a difference between Cartesian product models | |
CN115510450B (zh) | 一种面向计算机二进制程序的比对依赖识别方法与系统 | |
Sayadi et al. | Towards ai-enabled hardware security: Challenges and opportunities | |
JP2013222422A (ja) | プログラム、情報処理装置、及び情報処理方法 | |
CN111488574A (zh) | 恶意软件分类方法、系统、计算机设备和存储介质 | |
KR101564999B1 (ko) | 스크립트진단장치 및 스크립트 진단 방법 | |
CN111190813B (zh) | 基于自动化测试的安卓应用网络行为信息提取系统及方法 | |
US20170123959A1 (en) | Optimized instrumentation based on functional coverage | |
Jiang et al. | An exploitability analysis technique for binary vulnerability based on automatic exception suppression | |
CN117891566B (zh) | 智能软件的可靠性评估方法、装置、设备、介质和产品 | |
CN111566625A (zh) | 测试用例生成装置、测试用例生成方法和测试用例生成程序 | |
JPWO2019229883A1 (ja) | 検査装置、検査方法及び検査プログラム | |
CN113408845B (zh) | 生产流程的处理方法、装置、计算机设备和存储介质 | |
CN117435478A (zh) | 程序逻辑功能检测方法、装置、计算机设备和存储介质 | |
Zhao et al. | A Kind of Static Software Birthmark Based on Control Flow | |
CN117436048A (zh) | 安全认证方法及装置、装置、计算机设备和存储介质 | |
Sigg et al. | The impact of the context interpretation error on the context prediction accuracy |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |