一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种动态确定结束块的方法和装置与流程

2022-04-02 02:44:26 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,特别是涉及一种动态确定结束块(end block)的方法和装置。


背景技术:

2.模糊测试(fuzzing),是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法,被各大软件厂商广泛使用,对自家产品进行漏洞挖掘,从而减少产品中的漏洞。目前,fuzzing技术通常应用在普通的服务类进程或者各类模块组件中,它们的软件运行结束可以作为一次fuzzing结束的标志,方便fuzzing快速工作。但是,对于网络服务等进程不会退出的场景,例如物联网(internet of things,iot)设备上运行的网络服务,fuzzing流程无法感知到是否到达了运行的结尾,导致一次fuzzing无法快速结束,从而使得整个fuzzing流程变慢。
3.基于此,针对进程不会退出的场景,亟待提供一种fuzzing能够感知到运行结尾的技术方案,实现在这些场景中高效的fuzzing。


技术实现要素:

4.本技术实施例提供了一种动态确定end block的方法和装置,能够在fuzzing过程中动态的确认end block,从而能在程序运行流程中确认当前的fuzzing流程是否到达结尾,提高fuzzing的反馈更新速度,从而提高fuzz的效率,克服了fuzzing对待测对象反馈的强依赖性。
5.第一方面,本技术实施例提供了一种动态确定结束块的方法,包括:
6.基于所有测试用例中的每个测试用例,对待测试二进制程序进行预模糊测试,并将结束块记录到结束块列表中;
7.响应于预模糊测试结束的消息,基于测试用例变异后的变异用例,按照预设规则,对所述待测试二进制程序进行模糊测试,所述预设规则用于动态确定结束块并更新所述结束块列表,基于更新后的结束块列表进行所述模块测试。
8.可选地,在所述基于所有测试用例中的每个测试用例,对待测试二进制程序进行预模糊测试之前,所述方法还包括:
9.使用脚本静态分析所述待测试二进制程序,获得所述待测试二进制程序的多个代码块。
10.可选地,所述预设规则包括:
11.所述待测试二进制程序运行所述变异用例和对应的测试用例的程序路径相同,以及所述待测试二进制程序运行所述变异用例进入所述结束块列表中的结束块,则,终止基于所述变异用例的模糊测试;
12.所述待测试二进制程序运行所述变异用例和对应的测试用例的程序路径不相同,以及所述待测试二进制程序运行所述变异用例进入所述结束块列表中的结束块,则,更新
覆盖率,删除当前新的代码块的断点,记录所述变异用例对应的测试用例,并终止基于所述变异用例的模糊测试;
13.所述待测试二进制程序运行所述变异用例和对应的测试用例的程序路径不相同,以及所述待测试二进制程序运行所述变异用例未进入所述结束块列表中的结束块,则,记录所述变异用例对应的测试用例,基于所述变异用例对应的测试用例对所述待测试二进制程序重新进行预模糊测试,并将得到的新结束块记录到所述结束块列表中。
14.可选地,覆盖率为所述待测试二进制程序运行经过代码块的数量与所述待测试二进制程序中包括代码块的数量的比值。
15.可选地,所述方法还包括:
16.基于对所述待测试二进制程序进行模糊测试的结果,确定覆盖率,所述覆盖率用于指导测试用例的选择。
17.可选地,所述对待测试二进制程序进行预模糊测试,包括:
18.将所述待测试二进制程序运行每个测试用例过程中经过的代码块中的断点全部恢复,直到满足结束条件,将最后恢复的断点记作一个结束块。
19.可选地,所述方法应用于物联网iot设备,所述iot设备上安装有模糊测试客户端。
20.可选地,所述模糊测试客户端基于模糊输入输出接口和模糊测试服务器通信。
21.第二方面,本技术实施例还提供了一种动态确定结束块的装置,包括:
22.预测试单元,用于基于所有测试用例中的每个测试用例,对待测试二进制程序进行预模糊测试,并将结束块记录到结束块列表中;
23.测试单元,用于响应于预模糊测试结束的消息,基于测试用例变异后的变异用例,按照预设规则,对所述待测试二进制程序进行模糊测试,所述预设规则用于动态确定结束块并更新所述结束块列表,基于更新后的结束块列表进行所述模块测试。
24.可选地,所述装置还包括:
25.准备单元,用于在所述基于所有测试用例中的每个测试用例,对待测试二进制程序进行预模糊测试之前,使用脚本静态分析所述待测试二进制程序,获得所述待测试二进制程序的多个代码块。
26.可选地,所述预设规则包括:
27.所述待测试二进制程序运行所述变异用例和对应的测试用例的程序路径相同,以及所述待测试二进制程序运行所述变异用例进入所述结束块列表中的结束块,则,终止基于所述变异用例的模糊测试;
28.所述待测试二进制程序运行所述变异用例和对应的测试用例的程序路径不相同,以及所述待测试二进制程序运行所述变异用例进入所述结束块列表中的结束块,则,更新覆盖率,删除当前新的代码块的断点,记录所述变异用例对应的测试用例,并终止基于所述变异用例的模糊测试;
29.所述待测试二进制程序运行所述变异用例和对应的测试用例的程序路径不相同,以及所述待测试二进制程序运行所述变异用例未进入所述结束块列表中的结束块,则,记录所述变异用例对应的测试用例,基于所述变异用例对应的测试用例对所述待测试二进制程序重新进行预模糊测试,并将得到的新结束块记录到所述结束块列表中。
30.可选地,覆盖率为所述待测试二进制程序运行经过代码块的数量与所述待测试二
进制程序中包括代码块的数量的比值。
31.可选地,所述装置还包括:
32.确定单元,用于基于对所述待测试二进制程序进行模糊测试的结果,确定覆盖率,所述覆盖率用于指导测试用例的选择。
33.可选地,所述预测试单元,具体用于:
34.将所述待测试二进制程序运行每个测试用例过程中经过的代码块中的断点全部恢复,直到满足结束条件,将最后恢复的断点记作一个结束块。
35.可选地,所述装置应用于物联网iot设备,所述iot设备上安装有模糊测试客户端。
36.可选地,所述模糊测试客户端基于模糊输入输出接口和模糊测试服务器通信。
37.需要说明的是,第二方面提供的动态确定结束块的装置的具体实现方式以及达到的效果,可以参见第一方面所示的动态确定结束块的方法相关实施例的描述。
38.第三方面,本技术实施例还提供了一种模糊测试系统,所述系统包括模糊测试客户端和模糊测试服务器,其中:
39.所述模糊测试客户端,用于执行上述第一方面提供的所述方法;
40.所述模糊测试服务器,用于基于模糊输入输出接口和所述模糊测试客户端通信,提供模糊测试所需的数据。
41.其中,所述模糊测试客户端承载于物联网iot设备。
42.第四方面,本技术实施例还提供了一种电子设备,所述电子设备包括处理器以及存储器:
43.所述存储器用于存储计算机程序;
44.所述处理器用于根据所述计算机程序执行上述第一方面提供的所述方法。
45.第五方面,本技术实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,所述计算机程序用于执行上述第一方面提供的所述方法。
46.由此可见,本技术实施例具有如下有益效果:
47.本技术实施例提供了一种动态确定结束块的方法,该方法包括:首先,基于所有测试用例中的每个测试用例,对待测试二进制程序进行预模糊测试,并将结束块记录到结束块列表中;然后,响应于预模糊测试结束的消息,基于测试用例变异后的变异用例,按照预设规则,对所述待测试二进制程序进行模糊测试,所述预设规则用于动态确定结束块并更新所述结束块列表,基于更新后的结束块列表进行所述模块测试。可见,通过该方法,能够针对例如iot设备上的网络服务这类不会运行结束的场景,解决了目前fuzzing对待测试对象的结束等反馈或协议的强依赖的问题,拓宽了fuzzing的对象,同时,配合end block的发现机制,对fuzzing过程中的测试示例的变异提供指导,从而提高针对iot等设备上的二进制程序漏洞发现的速度。
附图说明
48.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
49.图1为本技术实施例提供的一种适用场景的结构示意图;
50.图2为本技术实施例提供的一种动态确定end block的方法的流程示意图;
51.图3a为本技术实施例提供的对测试用例进行预处理工作后的示意图;
52.图3b为本技术实施例提供的一次per fuzz后的示意图;
53.图3c为本技术实施例提供的fuzzing后一种情况下的示意图;
54.图4为本技术实施例提供的一种动态确定end block的装置的结构示意图;
55.图5为本技术实施例提供的一种模糊测试系统的结构示意图;
56.图6为本技术实施例提供的一种电子设备的结构示意图。
具体实施方式
57.为使本技术的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本技术实施例作进一步详细的说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本技术,并非对本技术的限定。另外,还需要说明的是,为便于描述,附图中仅示出了与本技术相关的部分,并非全部结构。
58.对于网络服务等进程不会退出的场景,例如物联网(internet of things,iot)设备上运行的网络服务,fuzzing流程无法感知到是否到达了运行的结尾,导致一次fuzzing无法快速结束,从而使得整个fuzzing流程变慢。以iot设备为例,在人工智能(artificial intelligence,ai)、云计算、第五代移动通信技术(5th generation mobile communication technology,5g)等前沿技术的助推下,iot近年迅速发展,各种不同形态的iot应用和差异巨大的终端层出不穷,承载iot应用的嵌入式系统碎片化严重,导致缺乏统一的安全应用标准,带来各种各样的安全性问题。因此,通常需要使用fuzzing技术发现iot设备上的服务对应程序的漏洞。iot设备不同于其他设备,其上通常承载网络服务,因此,针对iot设备的fuzzing基本上可以认为是一种针对网络服务的fuzzing。
59.经过发明人的研究,有很多针对iot设备上的网络服务fuzzing方案,例如boofuzz或fuzzowski等针对协议进行的fuzzing框架,封装了各类常见的服务请求,又例如dharma等基于模板的fuzzing框架,这类针对iot设备上的网络服务fuzzing方案的核心点为:当前的iot设备使用的为某种常见的基于状态的服务(常见的例如http服务),所以,fuzzing流程可以通过基于协议进行模板变异,之后根据现有的先验知识,通过对返回的状态码以及返回信息来反馈目前的变异逻辑。其中,基于状态的fuzzing变异有一个问题:基于协议的fuzzing通常强依赖协议流程,然而iot设备上的协议有些并非标准的通信协议,不是每次都能回应的状态,这就导致了这类基于状态的fuzzing因为得不到回应而导致fuzzing退化成随机变异的无脑fuzzing,让整个fuzzing效率下降。作为一个解决方案,通过引入基于二进制覆盖率反馈的fuzzing,能够减少这种基于协议的fuzzing中对于待测对象反馈信息的强依赖,转而依赖fuzzing提供的对程序的插装反馈进程。目前常见的插装手段有很多种,例如基于源码进行修改或者使用dbi手段对执行程序进行动态修改等插装手段。然而,iot设备因为其大小约束,通常会部署在不同的架构上,对该基于二进制覆盖率反馈的fuzzing带来了较大的问题。作为一个示例,可以使用gdb调试器对目标进程进行插装,通过往指定的代码块(block)进行打断点,并且对gdb调试器本身的逻辑进行修改,从而修改程序运行到断点处的主要行为,实现对程序运行过程的覆盖率反馈。这种方案利用了成熟的gdb解决方案,能对iot平台做到很好的兼容;并且,对前文提到的依赖状态的fuzzing中存在的缺
陷,基于gdb调试器的fuzzing提出了一种end block的概念,也就是规定一个模块,当程序运行到这个模块时视为当前的fuzzing结束。通过end block这个概念,可以有效的定位fuzzing的结尾,从而快速的对fuzzing结果进行反馈和测试用例的变异。
60.目前,上述的end block通常用于针对图形用户界面(graphical user interface,gui)等一类需要手动触发程序结束的程序,其通常会在程序运行前,结合静态分析的方式对当前的程序进行分析,并且使用预模糊测试(prefuzz)的方式,将超时的时候存在的block确定为end block,之后取出当前的地址作为标记。而在iot设备中,通常一个服务在出现异常状态之前是不会退出的,而且不同的状态可能会有不同的end block,所以单次prefuzz分析得到end block的方法并不能很好的确定当前的fuzzing是否是真的走到了程序的结尾。
61.基于此,本技术实施例针对iot设备上的网络服务等没有明确结束标志的场景,提出了一种动态的确定end block的技术方案,来解决上述的提出的问题。可以理解为,本技术实施例通过prefuzz和动态调整end block的机制,能够动态的、合理的确认end block位置,提高fuzzing的运行效率。
62.本技术实施例提供的动态确定结束块的方法,例如可以包括:首先,基于所有测试用例中的每个测试用例,对待测试二进制程序进行预模糊测试,并将结束块记录到结束块列表中;然后,响应于预模糊测试结束的消息,基于测试用例变异后的变异用例,按照预设规则,对所述待测试二进制程序进行模糊测试,所述预设规则用于动态确定结束块并更新所述结束块列表,基于更新后的结束块列表进行所述模块测试。
63.可见,通过该方法,能够针对例如iot设备上的网络服务这类不会运行结束的场景,解决了目前fuzzing对待测试对象的结束等反馈或协议的强依赖的问题,拓宽了fuzzing的对象,同时,配合end block的发现机制,对fuzzing过程中的测试示例的变异提供指导,从而提高针对iot等设备上的二进制程序漏洞发现的速度。
64.为了使本技术实施例提供的方案更加清楚,下面对本技术实施例提及的一些词语进行解释。
65.插装(instrument):通过修改二进制程序的代码,从而让二进制程序运行流程发生变化,最终实现对二进制程序执行控制的一种手段。
66.中断指令(int3):调试器的一种调试手段,通过将目标地址修改成特殊的int3指令码,当程序运行到int3的指令处时,程序会发生中断,此时可以让程序员对程序当前状态进行观测,或者进行进一步的修改逻辑。
67.代码块(block):程序执行过程中,一般连续执行的指令我们称之为指令集合。block是一种特殊的指令集合,block的第一个指令为某个跳转指令的结束点或者某些指令的目的块,block的最后一条指令为往其他block跳转的指令。
68.end block:当前fuzzing输入的数据中,最后一个到达的block。
69.程序路径:由不同的block组成的路径。通常来说一条程序路径就会代表一种新的执行逻辑。
70.动态模糊测试(fuzzing):一种测试手段,通过向特定的目标发送各类测试数据,引发程序的奔溃或逻辑错误,从而发现故障(bug)的方式。目前fuzzing常用于漏洞挖掘。
71.代码覆盖率反馈:传统fuzzing的测试数据通常来自于对于目标进程的了解程度,
那么,发现的漏洞往往受限于观测者的视角,而盲目的变异则会浪费大量的时间。现阶段的fuzzing(例如afl)会通过检测传入数据在代码流是否发现新的执行路径,来确认当前的变异是否合理,这种反馈机制称之为覆盖率反馈。
72.prefuzz:预模糊测试,通常在fuzzing之前,会将当前的测试用例(也称为测试数据)先运行一遍,以确认测试用例为可用的测试用例。有时候会在这个阶段处理一些别的fuzzing流程的必要数据,例如生成end block。
73.target binary:待测试的二进制程序。
74.fuzz engine:模糊测试服务器(或者指模糊测试服务器上的程序),用于读取测试用例并且对测试用例进行变异。
75.fuzz sensor:模糊测试客户端(或者指模糊测试客户端上的程序),用于捕获target binary覆盖率,例如可以是gdb调试器改进而成的客户端。
76.fuzz io:模糊测试输入输出接口,用于fuzz engine和fuzz sensor之间的通信。
77.seed:测试用例,由于fuzzing过程中,会将测试用例作为变异的起点,所以也称为种子。
78.mutation:种子变异阶段,通过变异种子来使输入发生一定的变化,从而让测试数据进入不同的block中,增加漏洞发现的几率。
79.为便于理解本技术实施例提供的动态确定end block的方法的具体实现,下面将结合附图进行说明。
80.需要说明的是,实施该动态确定end block的方法的主体可以为本技术实施例提供的动态确定end block的装置,该装置可以承载于电子设备或电子设备的功能模块中。本技术实施例中的电子设备,可以是任意的能够实施本技术实施例中的动态确定end block的方法的设备,例如可以是iot设备。
81.介绍本技术实施例之前,先以该动态确定end block的装置承载于iot设备为例,对适用场景进行示例性的介绍,如图1所示。
82.参见图1,该场景中可以包括:fuzz engine 200和iot设备100,其中,iot设备100可以包括fuzz sensor 110,fuzz sensor 110可以包括:target binary111、插装模块stub 112、跟踪模块trace 113和漏洞检测模块santinizer 114。fuzz engine 200可以包括种子变异模块seed mutation 210、种子队列模块seed queue 220和覆盖率检测器coverage checker 230。fuzz engine 200和iot设备100的fuzz sensor 110之间,可以通过模糊输入输出接口fuzz io 300进行通信。
83.需要说明的是,图1中各个模块的作用以及在本技术实施例中执行的步骤,可以参见下述图2所示实施例中的介绍。
84.图2为本技术实施例提供的一种动态确定end block的方法流程示意图。该方法可以应用于如图1所示的iot设备100中,所述iot设备100上安装有模糊测试客户端110。所述模糊测试客户端110基于模糊输入输出接口300和模糊测试服务器200通信。
85.如图2所示,该方法可以包括下述s201~s202:
86.s201,基于所有测试用例中的每个测试用例,对待测试二进制程序进行预模糊测试,并将结束块记录到结束块列表中。
87.作为一个示例,在s201之前,本技术实施例还可以包括预处理工作,预处理工作例
如可以包括:使用脚本静态分析所述待测试二进制程序,获得所述待测试二进制程序的多个代码块。也可以理解为:将待测试二进制程序全部打上断点。例如,参见图3a,该预处理工作可以是:在预模糊测试之前,fuzz engine 200将选取的测试用例通过发送给fuzz sensor 110,fuzz sensor110中的stub 112将待测试二进制程序打断点,得到如图3a所示的9个block。
88.需要说明的是,在预模糊测试阶段,可以设置较长的超时时间(如10秒)。
89.对于s201,首先,可以由fuzz engine 200遍历所有的文件,加载所有seed。此时的seed可以认为是一些正常工作的请求数据包;接着,将所有seed在mutation之前,进行pre fuzz,此时通过fuzz io进行数据通信,并将数据输送到target binary 111,并且将测试数据的信息(测试数据的大小、索引(如序号或名称)等)发送到fuzz sensor 110;然后,target binary 110正常运行,并且将数据进行正常的处理,fuzz sensor 110根据end block处理思路,将部分的断点去除;最后,pre fuzz结束之后,fuzz sensor 110记录下当前的end block,并且由fuzz io 300通知fuzz engine 200,当前的pre fuzz已经结束了。
90.pre fuzz中,fuzz sensor 110对end block处理思路,可以认为包括:不采取任何策略,遇到的所有断点均使用直接恢复的策略,将所述待测试二进制程序运行每个测试用例过程中经过的代码块中的断点全部恢复,直到满足结束条件,将最后恢复的断点记作一个结束块。也可以理解为:完成了一次运行或者因为超时(大于预设的超时时间,如大于10秒)而结束的时候,可以将最后一个被消除的block记录下来,作为end block加入end block列表。一次运行之后的结果可以参见图3b所示,程序路径包括block 1、block 5、block 8和block 9,block 9记作该次运行的end block。如此循环多次,将当前测试用例都输进去一次之后,就会得到一个end block列表,例如:end block列表可以记作[end1,end2,....endn]。
[0091]
s202,响应于预模糊测试结束的消息,基于测试用例变异后的变异用例,按照预设规则,对所述待测试二进制程序进行模糊测试,所述预设规则用于动态确定结束块并更新所述结束块列表,基于更新后的结束块列表进行所述模块测试。
[0092]
其中,在s201之后,fuzz engine 200得知pre fuzz结束后,seed mutation210可以开始进行变异,并且将变异的结果(也称为变异用例或变异数据)发送给target binary 111,同时通知fuzz sensor 110进入正式fuzzing。其中,预模糊测试结束的消息,可以指上述fuzz engine 200通知fuzz sensor 110进入正式fuzzing的消息。预模糊测试结束,可以指所有测试用例均进行了预测试。
[0093]
fuzz sensor 110收到fuzz engine 200的用于指示预模糊测试结束的消息后,修改end block处理逻辑,并且记录target binary 111的运行结果,并且登记新发现的end block。当target binary 111运行到end block时,fuzz sensor110将当前的运行结果发送给fuzz engine 200,fuzz engine 200通过返回的信息(如该次变异是否有效、变异能量等)获取覆盖率,并且由覆盖率指导seed选择。如果发现运行奔溃,则对奔溃信息进行处理,完成所有处理之后,重复执行上述步骤,继续进行本技术实施例提供的模糊测试。
[0094]
其中,修改后end block的处理逻辑,也即s202中的预设规则,可以理解的是,s202中,不再直接将当前断点消除,而是按照一定的策略(即预设规则)恢复断点。作为一个示例,预设规则可以包括:情况一:所述待测试二进制程序运行所述变异用例和对应的测试用
例的程序路径相同,以及所述待测试二进制程序运行所述变异用例进入所述结束块列表中的结束块,则,终止基于所述变异用例的模糊测试;情况二:所述待测试二进制程序运行所述变异用例和对应的测试用例的程序路径不相同,以及所述待测试二进制程序运行所述变异用例进入所述结束块列表中的结束块,则,更新覆盖率,删除当前新的代码块的断点,记录所述变异用例对应的测试用例,并终止基于所述变异用例的模糊测试;情况三:所述待测试二进制程序运行所述变异用例和对应的测试用例的程序路径不相同,以及所述待测试二进制程序运行所述变异用例未进入所述结束块列表中的结束块,则,记录所述变异用例对应的测试用例,基于所述变异用例对应的测试用例对所述待测试二进制程序重新进行预模糊测试,并将得到的新结束块记录到所述结束块列表中。
[0095]
具体而言,在未触发新分支,并且直接进入已标记end block时,视为一次fuzzing完成,直接将当次fuzzing进程终止。在触发新分支,并且进入已标记end block时,更新当前覆盖率信息,删除当前新的block的断点,并且记录当前的测试用例,终止当次fuzzing进程。在触发新分支,且未进入已标记endblock时,会进入如图3c的状态,由于之前未将当前block加入end block,可能会导致需要等待超时来将当前fuzzing过程终止,此时需要将该测试用例记录下来,重新执行pre fuzz,找到最新new end block,并将new end block添加进end block列表中。需要说明的是,由于变异用例实现新分支触发的概率小,所以,情况二和情况三的处理逻辑触发的概率也就很小,通常不会对performance产生较大影响。
[0096]
在一些实现方式中,s202之后,还可以包括:基于对所述待测试二进制程序进行模糊测试的结果,确定覆盖率,所述覆盖率用于指导测试用例的选择。
[0097]
可以理解的是,本技术实施例中,覆盖率可以指所述待测试二进制程序运行经过代码块的数量与所述待测试二进制程序中包括代码块的数量的比值。例如,图3b中,覆盖率可以为(4/9)。在图3b的基础上发生情况二,更新的覆盖率可以为(4 1)/9=(5/9)。
[0098]
可见,通过本技术实施例提供的方法,能够针对例如iot设备上的网络服务这类不会运行结束的场景,解决了目前fuzzing对待测试对象的结束等反馈或协议的强依赖的问题,拓宽了fuzzing的对象,同时,配合end block的发现机制,对fuzzing过程中的测试示例的变异提供指导,从而提高针对iot等设备上的二进制程序漏洞发现的速度。
[0099]
相应的,本技术实施例还提供了一种动态确定结束块的装置400,参见图4所示。该装置400包括:
[0100]
预测试单元401,用于基于所有测试用例中的每个测试用例,对待测试二进制程序进行预模糊测试,并将结束块记录到结束块列表中;
[0101]
测试单元402,用于响应于预模糊测试结束的消息,基于测试用例变异后的变异用例,按照预设规则,对所述待测试二进制程序进行模糊测试,所述预设规则用于动态确定结束块并更新所述结束块列表,基于更新后的结束块列表进行所述模块测试。
[0102]
作为一个示例,所述装置400还包括:
[0103]
准备单元,用于在所述基于所有测试用例中的每个测试用例,对待测试二进制程序进行预模糊测试之前,使用脚本静态分析所述待测试二进制程序,获得所述待测试二进制程序的多个代码块。
[0104]
作为一个示例,所述预设规则包括:
[0105]
所述待测试二进制程序运行所述变异用例和对应的测试用例的程序路径相同,以
及所述待测试二进制程序运行所述变异用例进入所述结束块列表中的结束块,则,终止基于所述变异用例的模糊测试;
[0106]
所述待测试二进制程序运行所述变异用例和对应的测试用例的程序路径不相同,以及所述待测试二进制程序运行所述变异用例进入所述结束块列表中的结束块,则,更新覆盖率,删除当前新的代码块的断点,记录所述变异用例对应的测试用例,并终止基于所述变异用例的模糊测试;
[0107]
所述待测试二进制程序运行所述变异用例和对应的测试用例的程序路径不相同,以及所述待测试二进制程序运行所述变异用例未进入所述结束块列表中的结束块,则,记录所述变异用例对应的测试用例,基于所述变异用例对应的测试用例对所述待测试二进制程序重新进行预模糊测试,并将得到的新结束块记录到所述结束块列表中。
[0108]
作为一个示例,覆盖率为所述待测试二进制程序运行经过代码块的数量与所述待测试二进制程序中包括代码块的数量的比值。
[0109]
作为一个示例,所述装置400还包括:
[0110]
确定单元,用于基于对所述待测试二进制程序进行模糊测试的结果,确定覆盖率,所述覆盖率用于指导测试用例的选择。
[0111]
作为一个示例,所述预测试单元,具体用于:
[0112]
将所述待测试二进制程序运行每个测试用例过程中经过的代码块中的断点全部恢复,直到满足结束条件,将最后恢复的断点记作一个结束块。
[0113]
作为一个示例,所述装置应用于物联网iot设备,所述iot设备上安装有模糊测试客户端。
[0114]
其中,所述模糊测试客户端基于模糊输入输出接口和模糊测试服务器通信。
[0115]
此外,本技术实施例还提供了一种模糊测试系统500,如图5所示,所述系统500包括模糊测试客户端501和模糊测试服务器502,其中:
[0116]
所述模糊测试客户端501,用于执行上述图2所述的方法;
[0117]
所述模糊测试服务器502,用于基于模糊输入输出接口503和所述模糊测试客户端501通信,提供模糊测试所需的数据。
[0118]
其中,所述模糊测试客户端501承载于物联网iot设备1。
[0119]
此外,本技术实施例还提供了一种电子设备600,如图6所示,所述电子设备600包括处理器601以及存储器602:
[0120]
所述存储器602用于存储计算机程序;
[0121]
所述处理器601用于根据所述计算机程序执行本技术实施例提供的方法。
[0122]
此外,本技术实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,所述计算机程序用于执行本技术实施例提供的方法。
[0123]
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到上述实施例方法中的全部或部分步骤可借助软件加通用硬件平台的方式来实现。基于这样的理解,本技术的技术方案可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如只读存储器(英文:read-only memory,rom)/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者诸如路由器等网络通信设备)执行本技术各个实施例或者实施例的某些部分所述的方法。
[0124]
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例和设备实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的设备及系统实施例仅仅是示意性的,其中作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0125]
以上所述仅是本技术的优选实施方式,并非用于限定本技术的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本技术的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本技术的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献