CN110554965A - 自动化模糊测试方法及相关设备、计算机可读存储介质 - Google Patents

自动化模糊测试方法及相关设备、计算机可读存储介质 Download PDF

Info

Publication number
CN110554965A
CN110554965A CN201910839961.4A CN201910839961A CN110554965A CN 110554965 A CN110554965 A CN 110554965A CN 201910839961 A CN201910839961 A CN 201910839961A CN 110554965 A CN110554965 A CN 110554965A
Authority
CN
China
Prior art keywords
code
test
detected
compiled
fuzz
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.)
Granted
Application number
CN201910839961.4A
Other languages
English (en)
Other versions
CN110554965B (zh
Inventor
尚进
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201910839961.4A priority Critical patent/CN110554965B/zh
Publication of CN110554965A publication Critical patent/CN110554965A/zh
Application granted granted Critical
Publication of CN110554965B publication Critical patent/CN110554965B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

Abstract

本发明实施例公开了一种自动化模糊测试方法及相关设备、计算机可读存储介质。该方法包括:首先获取待检测代码以及获取测试工具,然后根据待检测代码查找与待检测代码具有依赖关系的编译对象,生成依赖列表,获取到依赖列表后,待检测代码以及依赖列表中所有编译对象的数据代码共同组成目标代码,利用测试工具编译目标代码,编译后的目标代码用于进行模糊测试,本发明实施例通过待检测代码自动生成依赖列表并自动编译目标代码,能够提高执行模糊测试的效率。

Description

自动化模糊测试方法及相关设备、计算机可读存储介质
技术领域
本发明涉及计算机技术领域,尤其涉及一种自动化模糊测试方法及相关设备、计算机可读存储介质。
背景技术
在模糊测试中,用随机坏数据攻击一个程序,然后等着观察哪里遭到了破坏。模糊测试的技巧在于,它是不符合逻辑的:自动模糊测试不去猜测哪个数据会导致破坏(就像人工测试员那样),而是将尽可能多的杂乱数据投入程序中。由这个测试验证过的失败模式通常对程序员来说是个彻底的震撼,因为任何按逻辑思考的人都不会想到这种失败。模糊测试是一项简单的技术,但它却能揭示出程序中的重要bug。它能够验证出现实世界中的错误模式并在您的软件发货前对潜在的应当被堵塞的攻击渠道进行提示。
目前进行模糊测试的工作,国内外都在进行,模糊测试可以分为人工模糊测试和自动化工具测试,人工模糊测试是指安全人员通过经验进行修改的渗透测试,人工模糊测试因为人的参与,最为智能,但其缺点是不能彻底的发现漏洞,且需要有经验的测试工程师参与;自动化工具测试则是通过基于模糊测试框架的工具测试,这种方法测试效率高,缺点是误报率相对较高,需要少量人工的参与。因此,如何准确且高效的进行模糊测试是本领域技术人员正在研究的问题。
发明内容
本发明实施例公开了一种自动化模糊测试方法及相关设备、计算机可读存储介质,能够实现自动化进行整个模糊测试的方法,提高模糊测试的效率。
第一方面,本发明实施例提供了一种自动化模糊测试方法,该方法包括:
获取待检测代码以及获取测试工具;
根据所述待检测代码生成依赖列表,所述待检测代码包括N个编译对象,所述依赖列表包括所述N个编译对象和M个依赖对象,所述依赖对象包括与所述N个编译对象具有依赖关系的编译对象,其中N、M均为正整数;
利用所述测试工具编译目标代码,所述目标代码包括所述待检测代码以及所述依赖列表中所有编译对象的数据代码,所述编译后的目标代码用于进行模糊测试。
在上述方法中,设备首先获取待检测代码以及获取测试工具,然后根据待检测代码查找与待检测代码具有依赖关系的编译对象,生成依赖列表,获取到依赖列表后,待检测代码以及依赖列表中所有编译对象的数据代码共同组成目标代码,利用测试工具编译目标代码,编译后的目标代码用于进行模糊测试,本发明实施例通过待检测代码自动生成依赖列表并自动编译目标代码,无需用户手动将依赖对象添加到依赖列表中,无需手动启动对目标代码的编译过程,能够提高模糊测试的效率。
第二方面,本发明实施例提供了一种自动化模糊测试方法,包括:
在虚拟机的目标文件夹中建立测试目录,所述虚拟机用于提供进行模糊测试的环境;
将测试工具放入所述目标文件夹中,将编译后的目标代码放入所述测试目录中,将目标样本库放入所述测试目录的子目录中;
根据所述编译后的目标代码、所述测试工具以及所述目标样本库,在所述虚拟机上进行所述模糊测试,得到所述模糊测试的结果,所述模糊测试的结果包括一个或多个检测结果,所述一个或多个检测结果中每一个检测结果对应一种漏洞。
在上述方法中,设备自动运行虚拟机(即提供测试环境),并在虚拟机中建立测试目录,将测试工具、编译后的目标代码、目标样本库自动放入相应的文件中,执行模糊测试并得到测试结果,实现了不需要人工参与而完成模糊测试的过程,提高了模糊测试的效率。
第三方面,本发明实施例提供了一种自动化模糊测试装置,包括:
获取单元,用于获取待检测代码以及获取测试工具;
生成单元,用于根据所述待检测代码生成依赖列表,所述待检测代码包括N个编译对象,所述依赖列表包括所述N个编译对象和M个依赖对象,所述依赖对象包括与所述N个编译对象具有依赖关系的编译对象,其中N、M均为正整数;
编译单元,用于利用所述测试工具编译目标代码,所述目标代码包括所述待检测代码以及所述依赖列表中所有编译对象的数据代码,所述编译后的目标代码用于进行模糊测试。
需要说明的是,第三方面的实现方式及相应的有益效果可以参照第一方面以及相应实现方式中的描述,此处不再赘述。
第四方面,本发明实施例提供了一种自动化模糊测试装置,包括:
建立单元,用于在虚拟机的目标文件夹中建立测试目录,所述虚拟机用于提供进行模糊测试的环境;
放入单元,用于将测试工具放入所述目标文件夹中,将编译后的目标代码放入所述测试目录中,将目标样本库放入所述测试目录的子目录中;
测试单元,用于根据所述编译后的目标代码、所述测试工具以及所述目标样本库,在所述虚拟机上进行所述模糊测试,得到所述模糊测试的结果,所述模糊测试的结果包括一个或多个检测结果,所述一个或多个检测结果中每一个检测结果对应一种漏洞。
需要说明的是,第四方面的实现方式及相应的有益效果可以参照第二方面以及相应实现方式中的描述,此处不再赘述。
第五方面,本发明实施例提供了一种自动化模糊测试设备,包括处理器和通信设备,所述处理器和通信设备相互连接,其中,所述通信设备用于与外部设备进行信息交互;所述处理器被配置用于调用存储的程序代码,执行第一方面或第二方面所述的方法。
需要说明的是,第五方面的实现方式及相应的有益效果可以参照第一方面或第二方面相应实现方式中的描述,此处不再赘述。
第六方面,本发明实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有程序指令,所述程序指令当被处理器执行时使所述处理器执行第一方面或第二方面所述的方法。
需要说明的是,第六方面的实现方式及相应的有益效果可以参照第一方面或第二方面相应实现方式中的描述,此处不再赘述。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对本发明实施例或背景技术中所需要使用的附图作简单地介绍。
图1是本发明实施例提供的一种自动化模糊测试方法的系统架构图;
图2是本发明实施例提供的一种自动化模糊测试方法的流程示意图;
图3是本发明实施例提供的一种自动化模糊测试方法中下载代码方法的流程示意图;
图4是本发明实施例提供的一种自动化模糊测试方法中修改测试工具的编程界面图;
图5是本发明实施例提供的一种自动化模糊测试方法中生成依赖列表的流程示意图;
图6是本发明实施例提供的一种自动化模糊测试方法中依赖列表的编程界面图;
图7是本发明实施例提供的一种自动化模糊测试方法中修改编译系统的编程界面图;
图8是本发明实施例提供的一种自动化模糊测试方法中生成依赖列表的流程示意图;
图9是本发明实施例提供的一种自动化模糊测试方法中测试部署放入过程的流程示意图;
图10是本发明实施例提供的一种自动化模糊测试方法中筛选检测结果的流程示意图;
图11是本发明实施例提供的一种自动化模糊测试装置的结构示意图;
图12是本发明实施例提供的又一种自动化模糊测试装置的结构示意图;
图13是本发明实施例提供的一种自动化模糊测试设备的结构示意图。
具体实施方式
下面将结合附图对本发明实施例中的技术方案进行描述。
应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。在本发明说明书中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本发明的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。在本说明书中使用的术语“设备”、“单元”、“系统”等用于表示计算机相关的实体、硬件、固件、硬件和软件的组合、软件、或执行中的软件。例如,设备可以是但不限于,处理器,数据处理平台,计算设备,计算机,2个或更多个计算机等。
还应当理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
首先,对本发明中的部分用语进行解释说明,以便于本领域技术人员理解。
(1)模糊测试:fuzzing,是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法,它是一项简单的技术,但它却能揭示出程序中的重要bug。它能够验证出现实世界中的错误模式并在您的软件发货前对潜在的应当被堵塞的攻击渠道进行提示。在模糊测试中,用随机坏数据攻击一个程序,然后等着观察哪里遭到了破坏。模糊测试的技巧在于,它是不符合逻辑的:自动模糊测试不去猜测哪个数据会导致破坏(就像人工测试员那样),而是将尽可能多的杂乱数据投入程序中。由这个测试验证过的失败模式通常对程序员来说是个彻底的震憾,因为任何按逻辑思考的人都不会想到这种失败。
(2)Afl:American fuzzy lop,是一款在国内外被经常使用的开源模糊测试工具,与同类软件相比,具有效率更高、覆盖更广且使用简单等特点,通常被用来fuzz PC平台上的软件。通过对源码进行重新编译时进行插桩(简称编译时插桩)的方式自动产生测试用例来探索二进制程序内部新的执行路径。与其他基于插桩技术的模糊测试工具相比,afl-fuzz具有较低的性能消耗,有各种高效的fuzzing策略和tricks最小化技巧,不需要先行复杂的配置,能无缝处理复杂的现实中的程序。本发明实施例使用afl作为fuzz工具。
(3)gcc:GNU编译器套件(GNU Compiler Collection)包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。
(4)依赖关系:亦称“逻辑关系”。在项目管理中,指表示两个活动(前导活动和后续活动)中一个活动的变更将会影响到另一个活动的关系。通常活动之间的依赖关系包括强制依赖关系(所做工作中固有的依赖关系)、可自由处理的依赖关系(由项目队伍确定的依赖关系)和外部依赖关系(项目活动与非项目活动之间的依赖关系)三种形式。例如:一个类使用另一个类的对象作为操作的参数、一个类用另一个类的对象作为它的数据成员、一个类向另一个类发消息等,这样的两个类之间都存在依赖关系。
(5)插桩代码:在实现覆盖测试的过程中,往往需要知道某些信息,例如:程序中可执行语句被执行(即被覆盖)的情况,程序执行的路径,变量的引用、定义等。要想获取这类信息,需要跟踪被测程序的执行过程,或者是由计算机在被测程序执行的过程中自动记录。前者需要人工进行,效率低下且枯燥乏味;后者则需要在被测程序中插入完成相应工作的代码,即代码插桩技术。
(6)栈追踪:backtrace,也称堆栈回溯,是对程序运行过程中的某个时间点上活跃栈帧信息的描述。通常在交互式调试或者事发后调试中使用栈追踪。最终开发人员则可能在错误信息中看到栈追踪,并且可以选择将其反馈给开发人员。
(7)gdb:UNIX及UNIX-like下的调试工具。一般来说,gdb主要具有四个方面的功能:一、启动程序,可以按照自定义的要求随心所欲的运行程序;二、可让被调试的程序在指定的调置的断点处停住,其中断点可以是条件表达式;三、当程序被停住时,可以检查此时程序中所发生的事;四、可以改变程序,将一个BUG产生的影响修正从而测试其他BUG。
为了更好的理解本发明实施例提供的一种自动化模糊测试方法及相关设备、计算机可读存储介质,下面先对本发明实施例的自动化模糊测试方法的系统架构进行描述。如图1所示,其为本发明实施例提供的一种自动化模糊测试方法的系统架构示意图,该系统架构可以包括一个或多个服务器(多个服务器可以构成一个服务器集群),以及一个或多个终端(或设备),这个服务器与本地终端构成一个系统,其中:
服务器可以包括但不限于后台服务器、组件服务器、数据处理服务器等,服务器可以通过互联网与多个终端进行通信。服务器为终端提供自动化模糊测试服务。服务器上需要运行有相应的服务器端程序来提供相应的自动化模糊测试服务,如数据库服务、数据测试等等。
终端可以安装并运行相关的客户端。客户端是指与服务器相对应,为客户提供本地服务的程序。这里,该本地服务可包括但不限于:向服务器发送信息(例如请求信息)和接收服务器发送的信息(例如测试结果)以及共享信息等等。本方案实施例中的终端可以包括但不限于任何一种基于智能操作系统的电子产品,其可与用户通过键盘、虚拟键盘、触摸板、触摸屏以及声控设备等输入设备来进行人机交互,诸如智能手机、平板电脑、个人电脑等。其中,智能操作系统包括但不限于任何通过向移动设备提供各种移动应用来丰富设备功能的操作系统,诸如安卓(AndroidTM)、iOSTM、Windows PhoneTM等。
下面结合图2就本发明的自动化模糊测试方法进行说明,如图2所示,其为本发明实施例提供的一种自动化模糊测试方法的流程示意图,该方法可以基于图1所示的系统架构或者其他架构来实现,该方法可以包括但不限于以下步骤:
步骤S201:获取待检测代码以及获取测试工具。
具体地,设备获取待检测代码以及获取测试工具,其中获取待检测代码以及获取测试工具可以是通过本地上传的方式,也可以是通过网络下载的方式,此处不做限定。下面示例性的分别介绍获取待检测代码以及获取测试工具的方式:
在其中一个实施方式中,待检测代码可以是某媒体播放器的程序代码,由于程序代码较大,量级一般在几十G到上百G之间。在下载过程中,为了不因为网络中断等因素造成下载中断,需要对程序代码的下载过程进行监控,以判断是否完成下载。如图3所示,在下载开始时,首先运行监控,对代码下载程序(repo)进行监控,然后正式开始下载,在下载的过程中,一旦下载程序退出(即下载中断),先检测其退出原因。如果退出原因是下载完毕,即正常退出,则退出监控,完成代码下载;如果退出原因不是下载完毕,而是例如网络信号差、异常中断等原因,则重新启动下载程序,继续下载,直到代码下载完毕。由于安卓的下载程序基于git开发,可以实现一定的断点续传功能,所以重启下载程序后,已下载的代码不会重复下载,而是接着中断之前的进度继续下载。其中,为了加快代码下载速度,可以使用如下参数启动下载程序:
./repo sync-j 4-c
这样可以让下载程序仅下载需要的代码,设备获取该待检测代码。
在其中一个实施方式中,测试工具可以是AFL,为了适用于当前编译系统,首先需要对测试工具AFL的插桩代码进行修改,若待检测代码为安卓版本的代码,则需要使测试工具AFL支持安卓的编译系统,举例来说,如图4所示,需要修改的部分包括将shmem函数调用替换为mmap函数,以及修改afl-gcc,对-B参数特殊处理(由于AFL会覆盖原有的-B参数,在编译安卓版本的代码时,必须要保留这些参数,否则会出错);设备获取该修改后的测试工具。
步骤S202:根据待检测代码生成依赖列表。
具体地,设备获取待检测代码和测试工具后,根据待检测代码生成依赖列表,待检测代码包括N个编译对象,依赖列表中包括待检测代码的N个编译对象以及和M个依赖对象,其中N、M均为正整数,依赖对象包括与该N个编译对象具有依赖关系的编译对象,即设备在获取到待检测代码和测试工具后,自动查找待检测代码的依赖关系,生成依赖列表,其中编译对象包括数据程序、数据文件、数据模块等,在待检测代码的编译配置文件(Android.mk或Android.bp)中查找待检测代码的依赖关系。将所有依赖关系记录下来,然后对每条记录再查找其依赖关系并记录,直到无法找到新的依赖关系,此时即得到待检测代码的完整依赖列表,无需用户手动将依赖对象添加到依赖列表中,无需手动启动对目标代码的编译过程,下面列举三种根据待检测代码生成待检测代码的依赖列表的方式:
方式一、举例来说,如图5所示,待检测代码包括N个编译对象,读取待检测代码的其中一个编译对象的编译配置文件Android.bp,检测Android.bp中是否包含依赖库信息,其中,依赖库信息包括与该编译对象具有依赖关系的编译对象,若Android.bp中包含依赖库信息,则在依赖列表中记录包含shared_libs字段或static_libs字段的对象,这些对象即为与该编译对象具有依赖关系的编译对象,将这些对象记录在依赖列表中,继续查找与这些对象具有依赖关系的编译对象,即取出依赖列表中的一个对象,查找待检测代码中cc_library_shared字段的name属性为此对象的android.bp文件,或查找待检测代码中cc_library_ststic字段的name属性为此对象的android.bp文件,检测该对象的Android.bp中是否包含依赖库信息,即依次对待检测代码和依赖列表中的编译对象进行查找,找到新的编译对象就放在依赖列表中,对新的编译对象继续查找依赖关系,直到无法找到新的依赖关系,此时即得到待检测代码的完整依赖列表。
方式二、待检测代码包括N个编译对象,读取待检测代码的N个编译对象的N个编译配置文件Android.bp,检测Android.bp的依赖库信息,将依赖库信息中的编译对象添加到依赖列表中,然后对添加到依赖列表中的编译对象进行检测,再查找这些添加到依赖列表中的编译对象的依赖关系,将具有依赖关系的编译对象添加到依赖列表中,即不断对新添加到依赖列表中的编译对象进行检测,直到无法找到新的依赖关系,此时即得到待检测代码的完整依赖列表。
方式三、待检测代码包括N个编译对象,将该N个编译对象添加到依赖列表中,对添加到依赖列表中的编译对象的编译配置文件Android.bp进行检测,得到添加的编译对象对应的依赖库信息,在得到的依赖库信息包括与添加的编译对象具有依赖关系的编译对象的情况下(即依赖库信息不为空的情况下),将依赖库信息中的编译对象添加到依赖列表中,然后重复执行对添加到依赖列表中的编译对象进行检测的步骤,直到依赖列表中的编译对象全部检测完毕,即无法找到与依赖列表中的编译对象具有新的依赖关系的编译对象,则生成待检测代码的依赖列表。
举例来说,如图6所示,图6是libstagefright(一个编译对象)的依赖库,包含动态库和静态库的依赖关系。
在其中一个实施方式中,设备根据待检测代码生成依赖列表后,还可以自动对依赖列表执行筛选操作,即对该依赖列表进行筛选,例如可以删去其中的libc、libc++等底层数据库,因为这些库在使用Afl编译时易出错;还可以删除原先已经编译好了的程序和模块,因为安卓的编译系统在编译的过程中会跳过已经编译好的程序和模块,如不删除,就无法实现使用Afl重新编译的目的,举例来说,其中需要删除的文件包括out/target/product/generic/obj/SHARED_LIBRARIES/目录下的模块文件,以及out/target/product/generic/system/目录下的程序文件;设备根据待检测代码获取该筛选后的依赖列表。
步骤S203:利用测试工具编译目标代码,其中目标代码包括待检测代码以及该依赖列表中所有编译对象的数据代码。
具体地,设备根据待检测代码生成依赖列表后,利用测试工具编译目标代码,其中目标代码包括待检测代码以及该依赖列表中所有编译对象的数据代码,编译后的目标代码用于进行模糊测试;为了加速编译,可以使用“make目标模块名”命令来指定仅编译目标代码及其具有依赖关系的编译对象的数据代码。
在确定目标代码后,还要根据目标代码的代码版本,对安卓的编译系统稍作修改,即是对目标代码进行预处理,使Afl与目标代码建立连接关系,后续可以利用Afl对目标代码进行编译。根据不同的代码版本,对目标代码进行预处理的方式也不同。下面示例性的提供两种预处理方法:
方法一,修改目标代码的android.mk,这种方法主要针对旧版本(安卓4.0~5.0)的安卓代码(使用android.mk作为编译配置文件),通过在android.mk中加入“LOCAL_CC”、“LOCAL_C自动化模糊测试”关键字来指定使用Afl编译,如图7所示,
LOCAL_CC:=/media/linux/shared/net-codes/fuzz/afl-2.30b/afl-clang
LOCAL_C自动化模糊测试:=/media/linux/shared/net-codes/fuzz/afl-2.30b/afl-clang++
这种方法对安卓的编译系统影响较小,稳定性较好。
方法二,替换目标代码的编译程序。这种方法主要针对新版本(安卓5.0以上)的安卓代码(使用android.bp作为编译配置文件),无法再使用方法一。需要将prebuilts/clang/host/linux-x86/clang-stable/bin中的clang和clang++替换为afl-clang,并在afl环境变量AFL_CC和AFL_C自动化模糊测试中设置原始clang和clang++的地址。
经过上述方法一或方法二的修改后,目标代码的编译过程将发生改变。以gcc为例,修改后的编译过程如图8所示,其中Afl-gcc为测试工具Afl的编译套件gcc,gcc为安卓编译系统上的编译套件,main.c可理解为源代码文件,源代码文件main.c根据cc1进行一系列的词法分析、语义分析、语法分析及优化后生成相应的汇编代码文件main.s,然后由汇编器通过afl-as将汇编代码文件main.s转变成机器可以执行的指令得到目标文件main.o,然后通过ld将目标文件main.o进行模块拼接,静态链接,地址和空间分配、符号决议、重定位等生成可执行文件main,此时的main即为编译后的目标代码。其中,上述步骤S201中对测试工具的插桩代码修改即是为了用于编译目标代码的过程中,插桩即为在每个函数起始位置以及条件跳转处(即cc1、Afl-as、ld),插入一段汇编代码(插桩代码)。
步骤S204:在虚拟机的目标文件夹中建立测试目录。
具体地,设备利用测试工具编译完成目标代码后,运行虚拟机,并自动在虚拟机的目标文件夹中建立测试目录,例如在虚拟机/data/local/tmp/文件夹下建立测试目录,其中,虚拟机可以采用如下命令行运行:
ANDROID_PRODUCT_OUT=/exec nohup./emulator-cores 12-memory 4096-sysdir./-datadir./-kernel./kernel-qemu-4.9-ramdisk./ramdisk.img-system./system.img-data./userdata-qemu2.img-cache./cache.img-sdcard./sdcard.img-no-snapstorage-no-window-gpu off&
在实际应用过程中,可以使用nohup命令使虚拟机在后台运行,同时给虚拟机分配12个cpu核心,4G内存,关闭图形界面显示,以便于在控制台对虚拟机进行管理。
在其中一个实施方式中,设备可以运行多个虚拟机,建立多个测试目录,通过预先设置的任务分配方式使多个测试进程同时进行,提高模糊测试的效率。
步骤S205:将测试工具放入目标文件夹中,将编译后的目标代码放入测试目录中,将目标样本库放入测试目录的子目录中。
具体地,设备在虚拟机的目标文件夹中建立测试目录后,在真正进行模糊测试前,需要将测试工具Afl放入所述目标文件夹中,将所述编译后的目标代码放入所述测试目录中,将目标样本库放入所述测试目录的子目录中,举例来说,其中部署放入过程如图9所示,设备在虚拟机/data/local/tmp/文件夹下建立fuzz程序目录(测试目录),然后通过adb(虚拟机和测试工具Afl的通信工具)将测试工具Afl程序放入/data/local/tmp目录下,通过adb将目标代码放入fuzz程序目录,将目标样本库的样本放入fuzz程序目录下的sample子目录,为后续的测试做准备。
在其中一个实施方式中,如图9所示,在设备将目标样本库放入测试目录的子目录中之后,需要对该目标样本库进行预处理,以安卓的多媒体处理程序为例,由于安卓的多媒体处理程序支持mp4、webm、mp3等多种多媒体格式,所以需要专门准备这些格式的样本库,即目标样本库中包括这些格式的样本库,预处理主要是为了提高后续模糊测试的速度,预处理的方式可以包括以下一个或多个操作:操作一、使用afl-cmin程序(测试工具afl的自带程序)精简样本库;操作二、使用afl-tmin程序(测试工具afl的自带程序)压缩样本大小;操作三、过滤样本中的大文件。此处可以以500k字节为上限,以提高模糊测试的效率和结果生成速度。以上操作不分先后。利用测试工具对目标样本库进行筛选,包括精简、压缩以及过滤等方式,以获取最终的目标样本库,通过对目标样本库的筛选提高了样本库的质量,提高模糊测试的准确度。
在其中一个实施方式中,在设备将目标样本库放入测试目录的子目录中之前,设备先获取测试样本库,以安卓的多媒体处理程序为例,由于安卓的多媒体处理程序支持mp4、webm、mp3等多种多媒体格式,所以需要专门准备这些格式的样本库,即测试样本库中包括这些格式的样本库,设备获取测试样本库后,需要对该测试样本库进行预处理,预处理的方式可以包括以下一个或多个操作:操作一、使用afl-cmin程序(测试工具afl的自带程序)精简样本库;操作二、使用afl-tmin程序(测试工具afl的自带程序)压缩样本大小;操作三、过滤样本中的大文件。此处可以以500k字节为上限,以提高模糊测试的效率和结果生成速度。以上操作不分先后。对测试样本库预处理按成后,然后再将预处理后的测试样本库(即目标样本库)放入测试目录的子目录中,利用设备对测试样本库进行筛选,包括精简、压缩以及过滤等方式,以获取最终的目标样本库,通过对测试样本库的筛选提高了样本库的质量,提高模糊测试的准确度。
步骤S206:根据编译后的目标代码、测试工具以及目标样本库,在虚拟机上进行模糊测试。
具体地,设备将测试工具放入目标文件夹中,将编译后的目标代码放入测试目录中,将目标样本库放入测试目录的子目录中后,就可以在虚拟机上进行模糊测试了。
在其中一个实施方式中,在模糊测试进行过程中,可以使用bash脚本对模糊测试进程进行监控,并对中间结果进行记录,以供在测试过程中出现问题时可以实时观察到问题信息。其中,为了提高模糊测试的速度,针对一个样本库,可启用两个或以上的测试进程。
步骤S207:输出模糊测试的结果。
具体地,设备在虚拟机上进行模糊测试,得到该模糊测试的结果,其中模糊测试的结果包括一个或多个检测结果,该一个或多个检测结果中每一个检测结果对应一种漏洞。
在其中一个实施方式中,在得到检测结果后,对该检测结果进行筛选并过滤,得到最终的检测结果,由于在使用测试工具afl进行模糊测试时,在检测结果中会带有很多实际并不能成为漏洞的误报。在实际检测结果数量巨大时,对其进行过滤十分必要。具体的筛选并过滤的过程如图10所示,首先读取模糊测试的结果中的一个检测结果;以该检测结果为参数,使用gdb重新运行模糊测试程序;若测试程序不崩溃,则说明该检测结果包含的漏洞是误报,过滤该检测结果;若测试程序崩溃,则使用gdb获取该检测结果的栈追踪,若栈追踪中包含预设关键字,则则说明该检测结果包含的漏洞在实际应用中并不能成为漏洞,过滤该检测结果;若栈追踪中不包含预设关键字,则确定该检测结果包含的漏洞为真正的漏洞,输出该检测结果。其中过滤的预设关键字可以采用以下三个:
"asan_malloc","asan_memalign","NewFromStream"
通过这三个关键字,可以过滤掉超过90%的误报。
实施本发明实施例,设备首先获取待检测代码以及获取测试工具,然后根据待检测代码自动查找与待检测代码具有依赖关系的编译对象,生成依赖列表,获取到依赖列表后,待检测代码以及依赖列表中所有编译对象的数据代码共同组成目标代码,利用测试工具编译目标代码,其中编译后的目标代码用于进行模糊测试,然后设备自动运行虚拟机(即提供测试环境),并在虚拟机中建立测试目录,将测试工具、编译后的目标代码、目标样本库自动放入相应的文件中,执行模糊测试并得到测试结果,最后对测试结果通过backtrace的关键字自动化过滤,输出最终的检测结果,实现了不需要人工参与而完成模糊测试的过程,提高了模糊测试的效率。
如图11所示,本发明实施例提供一种自动化模糊测试装置110的结构示意图,自动化模糊测试装置110可以包括:获取单元1101、生成单元1102和编译单元1103,其中,
获取单元1101,用于获取待检测代码以及获取测试工具;
生成单元1102,用于根据所述待检测代码生成依赖列表,所述待检测代码包括N个编译对象,所述依赖列表包括所述N个编译对象和M个依赖对象,所述依赖对象包括与所述N个编译对象具有依赖关系的编译对象,其中N、M均为正整数;
编译单元1103,用于利用所述测试工具编译目标代码,所述目标代码包括所述待检测代码以及所述依赖列表中所有编译对象的数据代码,所述编译后的目标代码用于进行模糊测试。
在本发明实施例中,所述获取单元1101具体包括:
启动单元1104,用于启动下载待检测代码;
监控单元1105,用于监控所述下载待检测代码的过程;
所述获取单元1101,还用于当监控到所述下载退出时,检测所述退出的原因,若所述退出的原因为下载完成,则获取所述待检测代码;否则重新执行所述启动下载待检测代码的步骤直到下载完成,获取所述待检测代码。
在本发明实施例中,所述生成单元1102具体包括:
添加单元1106,用于将所述N个编译对象添加到依赖列表;
检测单元1107,用于对添加到所述依赖列表中的编译对象进行检测,得到添加的所述编译对象的依赖对象;
添加单元1108,用于将所述依赖对象添加到所述依赖列表;
所述生成单元1102,还用于重复执行所述对添加到所述依赖列表中的编译对象进行检测的步骤,直到所述依赖列表中的编译对象全部检测完毕,则生成所述待检测代码的依赖列表。
在本发明实施例中,所述编译单元1103具体包括:
预处理单元1109,用于根据目标代码的代码版本,预处理所述目标代码,以使所述目标代码与所述测试工具建立连接关系;
所述编译单元1103,还用于利用所述测试工具编译所述预处理后的目标代码。
在本发明实施例中,所述装置还包括:
建立单元1110,用于在利用所述测试工具编译目标代码之后,在虚拟机的目标文件夹中建立测试目录,所述虚拟机用于提供进行模糊测试的环境;
放入单元1111,用于将所述测试工具放入所述目标文件夹中,将所述编译后的目标代码放入所述测试目录中,将目标样本库放入所述测试目录的子目录中;
测试单元1112,用于根据所述编译后的目标代码、所述测试工具以及所述目标样本库,在所述虚拟机上进行所述模糊测试,得到所述模糊测试的结果,所述模糊测试的结果包括一个或多个检测结果,所述一个或多个检测结果中每一个检测结果对应一种漏洞。
在本发明实施例中,所述装置还包括:
读取单元1113,用于在得到所述模糊测试的结果之后,读取所述模糊测试的结果中的检测结果;
运行单元1114,用于以所述检测结果为参数,重新运行所述模糊测试的程序;
输出单元1115,用于若所述模糊测试的程序不崩溃,则过滤所述检测结果;若所述模糊测试的程序崩溃,获取栈追踪,若所述栈追踪中包含预设关键字,则过滤所述检测结果;若所述栈追踪中不包含预设关键字,则输出所述检测结果。
需要说明的是,本发明实施例中图11所描述的装置中各功能单元的功能可参见上述图2中所述的方法实施例中步骤S201-步骤S207的相关描述,此处不再赘述。自动化模糊测试装置110可以包括但不限于任何一种基于智能操作系统的电子产品,其可与用户通过键盘、虚拟键盘、触摸板、触摸屏以及声控设备等输入设备来进行人机交互,诸如智能手机、平板电脑、个人电脑等。
为了便于更好地实施本发明实施例的上述方案,本发明还对应提供了一种自动化模糊测试装置,下面结合附图来进行详细说明,如图12所示,自动化模糊测试装置120可以包括:建立单元1201、放入单元1202和测试单元1203,其中,
建立单元1201,用于在虚拟机的目标文件夹中建立测试目录,所述虚拟机用于提供进行模糊测试的环境;
放入单元1202,用于将测试工具放入所述目标文件夹中,将编译后的目标代码放入所述测试目录中,将目标样本库放入所述测试目录的子目录中;
测试单元1203,用于根据所述编译后的目标代码、所述测试工具以及所述目标样本库,在所述虚拟机上进行所述模糊测试,得到所述模糊测试的结果,所述模糊测试的结果包括一个或多个检测结果,所述一个或多个检测结果中每一个检测结果对应一种漏洞。
需要说明的是,本发明实施例中图12所描述的装置中各功能单元的功能可参见上述图2中所述的方法实施例中步骤S204-步骤S207的相关描述,此处不再赘述。自动化模糊测试装置120可以包括但不限于任何一种基于智能操作系统的电子产品,其可与用户通过键盘、虚拟键盘、触摸板、触摸屏以及声控设备等输入设备来进行人机交互,诸如智能手机、平板电脑、个人电脑等。
根据以上自动化模糊测试装置图,请参考图13,图13是本发明实施例提供的一种自动化模糊测试设备结构示意图。便于理解和图示方便,图13的自动化模糊测试设备130中,可以包括以下一个或多个组件:处理器1301、通信设备1302以及存储器。
存储器可以包括一个或多个存储单元,每个单元可以包括一个或多个存储器,存储器可用于存储程序和各种数据,并能在自动化模糊测试设备130运行过程中高速、自动地完成程序或数据的存取。当图13所示的自动化模糊测试设备130,执行图2所述方法时,存储器可以用来存储待检测代码、数据库缓存数据以及其他相关数据等。
通信设备1302,也可以称为收发机,或收发器等,其中可以包括用来进行无线、有线或其他通信方式的单元。
处理器1301,处理器也可以称为处理单元,处理单板,处理模块,处理装置等。处理器可以是中央处理器(central processing unit,CPU),网络处理器(network processor,NP)或者CPU和NP的组合。当图13所示的自动化模糊测试设备130,执行图2所述方法时,所述处理器1301调用所述存储器的自动化模糊测试程序,执行图2方法所述的步骤。
需要说明的是,本发明实施例中的自动化模糊测试设备130中处理器1301的执行步骤可参考上述各方法实施例中图2实施例中步骤S201-S207的具体实现方式,这里不再赘述。
需要说明的是,本发明实施例中的自动化模糊测试设备130中处理器1301的执行步骤还可参考上述各方法实施例中图2实施例中步骤S204-S207的具体实现方式,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。而前述的存储介质包括:磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
在本发明中,所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
在一些实施例中,上述服务器可以是一个分布式系统中的一个节点,其中,该分布式系统可以为区块链系统,该区块链系统可以是由该多个节点通过网络通信的形式连接形成的分布式系统。其中,节点之间可以组成点对点(P2P,Peer To Peer)网络,任意形式的计算设备,比如服务器、终端等电子设备都可以通过加入该点对点网络而成为该区块链系统中的一个节点。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。尽管在此结合各实施例对本发明进行了描述,然而,在实施例所要求保护的本发明过程中,本领域技术人员可理解并实现公开实施例的其他变化。

Claims (10)

1.一种自动化模糊测试方法,其特征在于,包括:
获取待检测代码以及测试工具;
根据所述待检测代码生成依赖列表,所述待检测代码包括N个编译对象,所述依赖列表包括所述N个编译对象和M个依赖对象,所述依赖对象包括与所述N个编译对象中至少一个编译对象具有依赖关系的编译对象,其中N、M均为正整数;
利用所述测试工具编译目标代码,所述目标代码包括所述待检测代码以及所述依赖列表中所有编译对象的数据代码,所述编译后的目标代码用于进行模糊测试。
2.根据权利要求1所述的方法,其特征在于,所述获取待检测代码包括:
启动下载待检测代码;
监控所述下载待检测代码的过程;
当监控到下载退出时,检测所述退出的原因,若所述退出的原因为下载完成,则获取所述待检测代码;否则重新执行所述启动下载待检测代码的步骤直到下载完成,获取所述待检测代码。
3.根据权利要求1所述的方法,其特征在于,所述根据所述待检测代码生成依赖列表包括:
将所述N个编译对象添加到依赖列表;
对添加到所述依赖列表中的编译对象进行检测,得到添加的所述编译对象的依赖对象;
将所述依赖对象添加到所述依赖列表;
重复执行所述对添加到所述依赖列表中的编译对象进行检测的步骤,直到所述依赖列表中的编译对象全部检测完毕,则生成所述待检测代码的依赖列表。
4.根据权利要求1所述的方法,其特征在于,所述利用所述测试工具编译目标代码包括:
根据目标代码的代码版本,预处理所述目标代码,以使所述目标代码与所述测试工具建立连接关系;
利用所述测试工具编译所述预处理后的目标代码。
5.根据权利要求1所述的方法,其特征在于,所述利用所述测试工具编译目标代码之后,还包括:
在虚拟机的目标文件夹中建立测试目录,所述虚拟机用于提供进行模糊测试的环境;
将所述测试工具放入所述目标文件夹中,将所述编译后的目标代码放入所述测试目录中,将目标样本库放入所述测试目录的子目录中;
根据所述编译后的目标代码、所述测试工具以及所述目标样本库,在所述虚拟机上进行所述模糊测试,得到所述模糊测试的结果,所述模糊测试的结果包括一个或多个检测结果,所述一个或多个检测结果中每一个检测结果对应一种漏洞。
6.根据权利要求5所述的方法,其特征在于,所述得到所述模糊测试的结果之后,还包括:
读取所述模糊测试的结果中的检测结果;
以所述检测结果为参数,重新运行所述模糊测试的程序;
若所述模糊测试的程序不崩溃,则过滤所述检测结果;若所述模糊测试的程序崩溃,获取栈追踪,若所述栈追踪中包含预设关键字,则过滤所述检测结果;若所述栈追踪中不包含预设关键字,则输出所述检测结果。
7.一种自动化模糊测试方法,其特征在于,包括:
在虚拟机的目标文件夹中建立测试目录,所述虚拟机用于提供进行模糊测试的环境;
将测试工具放入所述目标文件夹中,将编译后的目标代码放入所述测试目录中,将目标样本库放入所述测试目录的子目录中;
根据所述编译后的目标代码、所述测试工具以及所述目标样本库,在所述虚拟机上进行所述模糊测试,得到所述模糊测试的结果,所述模糊测试的结果包括一个或多个检测结果,所述一个或多个检测结果中每一个检测结果对应一种漏洞。
8.一种自动化模糊检测装置,其特征在于,包括用于执行如权利要求1-7任一项所述的方法的单元。
9.一种自动化模糊检测设备,其特征在于,所述自动化模糊检测设备包括处理器和通信设备,所述处理器和通信设备相互连接,其中,所述通信设备用于与外部设备进行信息交互;所述处理器被配置用于调用存储的程序代码,执行如权利要求1-7任一项所述的方法的单元。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求1-7任一项所述的方法。
CN201910839961.4A 2019-09-05 2019-09-05 自动化模糊测试方法及相关设备、计算机可读存储介质 Active CN110554965B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910839961.4A CN110554965B (zh) 2019-09-05 2019-09-05 自动化模糊测试方法及相关设备、计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910839961.4A CN110554965B (zh) 2019-09-05 2019-09-05 自动化模糊测试方法及相关设备、计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN110554965A true CN110554965A (zh) 2019-12-10
CN110554965B CN110554965B (zh) 2021-08-17

Family

ID=68739272

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910839961.4A Active CN110554965B (zh) 2019-09-05 2019-09-05 自动化模糊测试方法及相关设备、计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN110554965B (zh)

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111143790A (zh) * 2019-12-13 2020-05-12 广州华多网络科技有限公司 代码混淆方法、装置、设备及存储介质
CN111240987A (zh) * 2020-01-16 2020-06-05 北京奇艺世纪科技有限公司 移植程序检测方法、装置、电子设备及计算机可读存储介质
CN111241823A (zh) * 2020-01-07 2020-06-05 北京字节跳动网络技术有限公司 一种依赖配置的管理方法、装置、电子设备及存储介质
CN111428244A (zh) * 2020-03-25 2020-07-17 中国建设银行股份有限公司 源码测试方法及装置
CN111552524A (zh) * 2020-05-06 2020-08-18 Oppo(重庆)智能科技有限公司 一种插件加载方法、装置及计算机可读存储介质
CN112631894A (zh) * 2020-12-02 2021-04-09 北京健康之家科技有限公司 代码检测方法、装置、存储介质及计算机设备
CN113037587A (zh) * 2021-02-26 2021-06-25 清华大学 一种tcp/ip协议栈测试方法、装置及电子设备
CN113342633A (zh) * 2020-02-18 2021-09-03 北京京东振世信息技术有限公司 一种性能测试方法和装置
CN113419960A (zh) * 2021-07-01 2021-09-21 中国人民解放军国防科技大学 用于可信操作系统内核模糊测试的种子生成方法及系统
CN113485923A (zh) * 2021-06-30 2021-10-08 展讯通信(上海)有限公司 项目代码检测方法与装置、电子设备
CN114817061A (zh) * 2022-05-16 2022-07-29 厦门大学 虚拟构建脚本的依赖性错误检测方法

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080320328A1 (en) * 2007-06-21 2008-12-25 Microsoft Corporation Fuzz testing and attack-surface scoping for uri handlers and pluggable protocols
CN101739339A (zh) * 2009-12-29 2010-06-16 北京航空航天大学 一种基于程序动态依赖关系的软件故障定位方法
CN102609357A (zh) * 2012-02-17 2012-07-25 浙江大学 符合autosar标准自动化测试的测试案例动态构建方法
CN103870310A (zh) * 2014-02-18 2014-06-18 小米科技有限责任公司 程序编译方法及相关装置
CN105184160A (zh) * 2015-07-24 2015-12-23 哈尔滨工程大学 一种基于API对象调用关系图的Android手机平台应用程序恶意行为检测的方法
US20160350211A1 (en) * 2015-06-01 2016-12-01 Peach Fuzzer Llc Whitebox network fuzzing
CN106776266A (zh) * 2015-11-25 2017-05-31 腾讯科技(深圳)有限公司 测试工具的配置方法及终端设备
CN107045474A (zh) * 2016-02-05 2017-08-15 阿里巴巴集团控股有限公司 一种Fuzz测试中的程序流跟踪方法及装置
US20180210949A1 (en) * 2015-09-02 2018-07-26 International Business Machines Corporation Compiling extract, transform, and load job test data cases
CN109255240A (zh) * 2018-07-18 2019-01-22 北京明朝万达科技股份有限公司 一种漏洞处理方法和装置
CN109684215A (zh) * 2018-12-25 2019-04-26 中国科学院电子学研究所苏州研究院 一种自动化软件系统质量检查和快速迭代方法
CN109918297A (zh) * 2019-02-20 2019-06-21 中国信息通信研究院 一种终端模糊测试方法及装置
CN110059009A (zh) * 2018-04-13 2019-07-26 百度(美国)有限责任公司 用于测试代码文件的方法和装置

Patent Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080320328A1 (en) * 2007-06-21 2008-12-25 Microsoft Corporation Fuzz testing and attack-surface scoping for uri handlers and pluggable protocols
CN101739339A (zh) * 2009-12-29 2010-06-16 北京航空航天大学 一种基于程序动态依赖关系的软件故障定位方法
CN102609357A (zh) * 2012-02-17 2012-07-25 浙江大学 符合autosar标准自动化测试的测试案例动态构建方法
CN103870310A (zh) * 2014-02-18 2014-06-18 小米科技有限责任公司 程序编译方法及相关装置
US20160350211A1 (en) * 2015-06-01 2016-12-01 Peach Fuzzer Llc Whitebox network fuzzing
CN105184160A (zh) * 2015-07-24 2015-12-23 哈尔滨工程大学 一种基于API对象调用关系图的Android手机平台应用程序恶意行为检测的方法
US20180210949A1 (en) * 2015-09-02 2018-07-26 International Business Machines Corporation Compiling extract, transform, and load job test data cases
CN106776266A (zh) * 2015-11-25 2017-05-31 腾讯科技(深圳)有限公司 测试工具的配置方法及终端设备
CN107045474A (zh) * 2016-02-05 2017-08-15 阿里巴巴集团控股有限公司 一种Fuzz测试中的程序流跟踪方法及装置
CN110059009A (zh) * 2018-04-13 2019-07-26 百度(美国)有限责任公司 用于测试代码文件的方法和装置
CN109255240A (zh) * 2018-07-18 2019-01-22 北京明朝万达科技股份有限公司 一种漏洞处理方法和装置
CN109684215A (zh) * 2018-12-25 2019-04-26 中国科学院电子学研究所苏州研究院 一种自动化软件系统质量检查和快速迭代方法
CN109918297A (zh) * 2019-02-20 2019-06-21 中国信息通信研究院 一种终端模糊测试方法及装置

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
张咏梅 等: "基于AFL的软件漏洞模糊测试", 《科学技术创新》 *
潘广贞: "《C语言程序设计教程》", 31 August 2010, 国防工业出版社 *
王铁军: "《软件测试技术实战》", 31 August 2018, 西安电子科技大学出版社 *
赵斌: "AFL模糊测试系统的优化方法研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *

Cited By (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111143790B (zh) * 2019-12-13 2022-07-12 广州方硅信息技术有限公司 代码混淆方法、装置、设备及存储介质
CN111143790A (zh) * 2019-12-13 2020-05-12 广州华多网络科技有限公司 代码混淆方法、装置、设备及存储介质
CN111241823A (zh) * 2020-01-07 2020-06-05 北京字节跳动网络技术有限公司 一种依赖配置的管理方法、装置、电子设备及存储介质
CN111240987A (zh) * 2020-01-16 2020-06-05 北京奇艺世纪科技有限公司 移植程序检测方法、装置、电子设备及计算机可读存储介质
CN111240987B (zh) * 2020-01-16 2024-03-08 北京奇艺世纪科技有限公司 移植程序检测方法、装置、电子设备及计算机可读存储介质
CN113342633B (zh) * 2020-02-18 2023-09-22 北京京东振世信息技术有限公司 一种性能测试方法和装置
CN113342633A (zh) * 2020-02-18 2021-09-03 北京京东振世信息技术有限公司 一种性能测试方法和装置
CN111428244A (zh) * 2020-03-25 2020-07-17 中国建设银行股份有限公司 源码测试方法及装置
CN111552524A (zh) * 2020-05-06 2020-08-18 Oppo(重庆)智能科技有限公司 一种插件加载方法、装置及计算机可读存储介质
CN111552524B (zh) * 2020-05-06 2023-10-13 Oppo(重庆)智能科技有限公司 一种插件加载方法、装置及计算机可读存储介质
CN112631894A (zh) * 2020-12-02 2021-04-09 北京健康之家科技有限公司 代码检测方法、装置、存储介质及计算机设备
CN113037587A (zh) * 2021-02-26 2021-06-25 清华大学 一种tcp/ip协议栈测试方法、装置及电子设备
CN113485923A (zh) * 2021-06-30 2021-10-08 展讯通信(上海)有限公司 项目代码检测方法与装置、电子设备
CN113419960A (zh) * 2021-07-01 2021-09-21 中国人民解放军国防科技大学 用于可信操作系统内核模糊测试的种子生成方法及系统
CN113419960B (zh) * 2021-07-01 2022-06-14 中国人民解放军国防科技大学 用于可信操作系统内核模糊测试的种子生成方法及系统
CN114817061A (zh) * 2022-05-16 2022-07-29 厦门大学 虚拟构建脚本的依赖性错误检测方法

Also Published As

Publication number Publication date
CN110554965B (zh) 2021-08-17

Similar Documents

Publication Publication Date Title
CN110554965B (zh) 自动化模糊测试方法及相关设备、计算机可读存储介质
Sridharan et al. Thin slicing
Yan et al. Systematic testing for resource leaks in Android applications
Wang et al. Assessing and restoring reproducibility of Jupyter notebooks
US9535823B2 (en) Method and apparatus for detecting software bugs
US7340726B1 (en) Systems and methods for performing static analysis on source code
US7681180B2 (en) Parameterized test driven development
US7644394B2 (en) Object-oriented creation breakpoints
US20180246803A1 (en) Targeted software testing
Su et al. Why my app crashes? understanding and benchmarking framework-specific exceptions of android apps
US9202005B2 (en) Development and debug environment in a constrained random verification
Zhang et al. Pensieve: Non-intrusive failure reproduction for distributed systems using the event chaining approach
Soltani et al. A guided genetic algorithm for automated crash reproduction
US7069474B2 (en) System and method for assessing compatibility risk
US9588872B2 (en) Discovery of code paths
Nayrolles et al. JCHARMING: A bug reproduction approach using crash traces and directed model checking
Sotiropoulos et al. Practical fault detection in puppet programs
US20170075789A1 (en) Method and apparatus for generating, capturing, storing, and loading debug information for failed tests scripts
Zheng et al. Towards understanding bugs in an open source cloud management stack: An empirical study of OpenStack software bugs
Han et al. Reproducing performance bug reports in server applications: The researchers’ experiences
US10229029B2 (en) Embedded instruction sets for use in testing and error simulation of computing programs
Shimari et al. NOD4J: Near-omniscient debugging tool for Java using size-limited execution trace
Yan Program analyses for understanding the behavior and performance of traditional and mobile object-oriented software
Fedorova et al. Performance comprehension at WiredTiger
Wu et al. CydiOS: A Model-Based Testing Framework for iOS Apps

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