CN112559322B - 一种基于动态插桩的软件分析方法及系统 - Google Patents
一种基于动态插桩的软件分析方法及系统 Download PDFInfo
- Publication number
- CN112559322B CN112559322B CN202011313443.8A CN202011313443A CN112559322B CN 112559322 B CN112559322 B CN 112559322B CN 202011313443 A CN202011313443 A CN 202011313443A CN 112559322 B CN112559322 B CN 112559322B
- Authority
- CN
- China
- Prior art keywords
- execution path
- program
- tested
- determining
- information
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3612—Software analysis for verifying properties of programs by runtime analysis
-
- 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/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于动态插桩的软件分析方法及系统,包括:获取测试样本数据和待测程序;对所述待测程序进行结构分析和机器码翻译,获取指令序列,根据所述指令序列中的基本块粒度确定至少一个断点,并确定每个断点对应的插桩指令;将所述测试样本数据作为所述待测程序的输入数据,执行所述待测程序,并对所述待测程序中的断点进行监听,获取并存储执行路径信息和崩溃信息;根据所述执行路径信息确定基本块的覆盖率,根据崩溃信息确定崩溃样本,并根据崩溃样本对应的执行路径的不同进行筛查,确定唯一崩溃样本;根据所述基本块的覆盖率和唯一崩溃样本的数量确定所述待测程序的安全性评估结果。
Description
技术领域
本发明涉及智能电能表软件的安全分析技术领域,并且更具体地,涉及一种基于动态插桩的软件分析方法及系统。
背景技术
电能表是对电路中电能输出或负载消耗进行计量的设备,其广泛运用于供电网络中,是电力贸易结算中最重要的度量设备。随着智能电能表的应用和普及,电能表设备的功能复杂性和开发难度在不断提高。电能表中如果存在软件缺陷,轻则被个人利用进行“偷电”,重则引发大规模电能表崩溃,造成电网公司人力物力的损失。因此,对智能电能表中软件的安全性分析成为了当下的一个重要技术问题。
该问题的难点体现在以下方面:第一,智能电能表设备的型号和种类多样,因此手动进行漏洞挖掘的效率极低,必须开发自动化的安全检查工具。第二,待检查的嵌入式设备往往没有源码,因此安全检查工具需要具备直接对二进制指令进行检查的能力。第三,传统的嵌入式设备测试工具以黑盒测试为主,该方法具有盲目性,难以进行科学有效的质量分析。
因此,需要一种能够实现快速有效地对智能电能表的软件质量进行分析的方法。
发明内容
本发明提出一种基于动态插桩的软件分析方法及系统,以解决如何对电能表软件的安全性进行分析的问题。
为了解决上述问题,根据本发明的一个方面,提供了一种基于动态插桩的软件分析方法,所述方法包括:
获取测试样本数据和待测程序;
对所述待测程序进行结构分析和机器码翻译,获取指令序列,根据所述指令序列中的基本块粒度确定至少一个断点,并确定每个断点对应的插桩指令;
将所述测试样本数据作为所述待测程序的输入数据,执行所述待测程序,并对所述待测程序中的断点进行监听,获取并存储执行路径信息和崩溃信息;
根据所述执行路径信息确定基本块的覆盖率,根据崩溃信息确定崩溃样本,并根据崩溃样本对应的执行路径的不同进行筛查,确定唯一崩溃样本;
根据所述基本块的覆盖率和唯一崩溃样本的数量确定所述待测程序的安全性评估结果。
优选地,其中将Ptrace附着到所述待测程序的进行中,利用Ptrace对所述待测程序中的断点进行监听。
优选地,其中所述方法利用如下方式存储执行路径信息,包括:,包括:
选取所述执行路径信息中的一条执行路径作为初始的路径,并根据所述初始的路径基于字典树的结构确定初始的执行路径树;
根据所述执行路径信息中剩余的每条执行路径对所述初始的执行路径树进行更新,确定最终的执行路径树,以对所述执行路径信息进行压缩存储;
其中,将所述执行路径树的从根节点到每个叶子节点的路径作为一条执行路径。
优选地,其中所述根据所述执行路径信息中剩余的每条执行路径对所述初始的执行路径树进行更新,包括:
对于任一条新的执行路径,设置指针r指向执行路径树的根结点,将指针r按照该新的执行路径的下一个节点向后跳转;若出现某个节点不在当前的执行路径树中,则确定所述新的执行路径与已存储在当前的执行路径树中的执行路径不同,根据所述新的执行路径增加节点,以更新当前的执行路径树;若直至所述新的执行路径的最后一个节点时,在该最后一个节点上存在一个表示终点的标记,则表示该新的执行路径与已存储在当前的执行路径树中的执行路径重复,不更新当前的执行路径树。
优选地,其中所述根据所述基本块的覆盖率和唯一崩溃样本的数量确定所述待测程序的安全性评估结果,包括:
其中,E为安全性评估结果,其值域为(0,1),数值越大则安全程度越高;α为覆盖率所占的权重,β为崩溃信息所占的权重,α+β=1;Ec为覆盖率;Ccrash为唯一崩溃样本的数量。
优选地,其中所述方法还包括:
根据所述执行路径信息中非重复的执行路径对应的测试样本数据,利用模糊测试算法生成新的测试样本数据,以基于所述新的测试样本数据重新确定待测程序的安全性评估结果。
根据本发明的另一个方面,提供了一种基于动态插桩的软件分析系统,所述系统包括:
数据获取模块,用于获取测试样本数据和待测程序;
插桩模块,用于对所述待测程序进行结构分析和机器码翻译,获取指令序列,根据所述指令序列中的基本块粒度确定至少一个断点,并确定每个断点对应的插桩指令;
监听模块,用于将所述测试样本数据作为所述待测程序的输入数据,执行所述待测程序,并对所述待测程序中的断点进行监听,获取并存储执行路径信息和崩溃信息;
覆盖率确定模块,用于根据所述执行路径信息确定基本块的覆盖率,根据崩溃信息确定崩溃样本,并根据崩溃样本对应的执行路径的不同进行筛查,确定唯一崩溃样本;
安全性评估模块,用于根据所述基本块的覆盖率和唯一崩溃样本的数量确定所述待测程序的安全性评估结果。
优选地,其中所述监听模块,将Ptrace附着到所述待测程序的进行中,利用Ptrace对所述待测程序中的断点进行监听。
优选地,其中所述监听模块,利用如下方式存储执行路径信息,包括:
选取所述执行路径信息中的一条执行路径作为初始的路径,并根据所述初始的路径基于字典树的结构确定初始的执行路径树;
根据所述执行路径信息中剩余的每条执行路径对所述初始的执行路径树进行更新,确定最终的执行路径树,以对所述执行路径信息进行压缩存储;
其中,将所述执行路径树的从根节点到每个叶子节点的路径作为一条执行路径。
优选地,其中所述覆盖率确定模块,根据所述执行路径信息中剩余的每条执行路径对所述初始的执行路径树进行更新,包括:
对于任一条新的执行路径,设置指针r指向执行路径树的根结点,将指针r按照该新的执行路径的下一个节点向后跳转;若出现某个节点不在当前的执行路径树中,则确定所述新的执行路径与已存储在当前的执行路径树中的执行路径不同,根据所述新的执行路径增加节点,以更新当前的执行路径树;若直至所述新的执行路径的最后一个节点时,在该最后一个节点上存在一个表示终点的标记,则表示该新的执行路径与已存储在当前的执行路径树中的执行路径重复,不更新当前的执行路径树。
优选地,其中所述安全性评估模块,根据所述基本块的覆盖率和唯一崩溃样本的数量确定所述待测程序的安全性评估结果,包括:
其中,E为安全性评估结果,其值域为(0,1),数值越大则安全程度越高;α为覆盖率所占的权重,β为崩溃信息所占的权重,α+β=1;Ec为覆盖率;Ccrash为唯一崩溃样本的数量。
优选地,其中所述系统还包括:
样本数据更新模块,用于根据所述执行路径信息中非重复的执行路径对应的测试样本数据,利用模糊测试算法生成新的测试样本数据,以基于所述新的测试样本数据重新确定待测程序的安全性评估结果。
本发明提供了一种基于动态插桩的软件分析方法及系统,将动态插桩技术运用于电能表的安全检测工作中,能够获取程序测试过程的代码覆盖率信息,解决了传统黑盒测试过程的盲目性问题;同时基于动态二进制插桩不需要获取软件源码,对源码无依赖,对各种指令集和硬件环境具有适应性,且测试效率高,具有很强的通用性;能够快速地对执行路径进行分析,解决了在低内存和运算能力的环境下测试的性能问题,提高了对电能表测试的效率;通过计算安全性评估结果能够直观地对电能表软件的安全程度给出科学评价,使安全检测过程更为可靠。
附图说明
通过参考下面的附图,可以更为完整地理解本发明的示例性实施方式:
图1为根据本发明实施方式的基于动态插桩的软件分析方法100的留流程图;
图2为根据本发明实施方式的基于动态插桩的软件分析原理图;
图3为根据本发明实施方式的基于动态插桩的软件分析系统300的结构示意图。
具体实施方式
现在参考附图介绍本发明的示例性实施方式,然而,本发明可以用许多不同的形式来实施,并且不局限于此处描述的实施例,提供这些实施例是为了详尽地且完全地公开本发明,并且向所属技术领域的技术人员充分传达本发明的范围。对于表示在附图中的示例性实施方式中的术语并不是对本发明的限定。在附图中,相同的单元/元件使用相同的附图标记。
除非另有说明,此处使用的术语(包括科技术语)对所属技术领域的技术人员具有通常的理解含义。另外,可以理解的是,以通常使用的词典限定的术语,应当被理解为与其相关领域的语境具有一致的含义,而不应该被理解为理想化的或过于正式的意义。
图1为根据本发明实施方式的基于动态插桩的软件分析方法100的留流程图。如图1所示,本发明实施方式提供的基于动态插桩的软件分析方法,将动态插桩技术运用于电能表的安全检测工作中,能够获取程序测试过程的代码覆盖率信息,解决了传统黑盒测试过程的盲目性问题;同时基于动态二进制插桩不需要获取软件源码,对源码无依赖,对各种指令集和硬件环境具有适应性,且测试效率高,具有很强的通用性;能够快速地对执行路径进行分析,解决了在低内存和运算能力的环境下测试的性能问题,提高了对电能表测试的效率;通过计算安全性评估结果能够直观地对电能表软件的安全程度给出科学评价,使安全检测过程更为可靠。本发明实施方式提供的基于动态插桩的软件分析方法100,从步骤101处开始,在步骤101获取测试样本数据和待测程序。
在步骤102,对所述待测程序进行结构分析和机器码翻译,获取指令序列,根据所述指令序列中的基本块粒度确定至少一个断点,并确定每个断点对应的插桩指令。
如图2所示,为根据本发明实施方式的基于动态插桩的软件分析原理图,在本发明的实施方式中,对智能电能表的软件进行分析的过程包括:动态二进制插桩、快速路径分析和安全性评价。具体地,工作流程如下:在安全检测系统启动时,首先测试样本数据和从嵌入式设备中提取的待测程序。然后,进行动态插桩,并在对待测程序的基本块进行静态分析的基础上,使用Ptrace动态监控待测程序,获取待测程序运行时的执行路径信息,并收集可能出现的崩溃信息。然后,对执行路径信息进行存储,并确定覆盖率。其中,通过速路径分析快速地对路径信息进行存储、对比和查找。最后,根据崩溃信息和覆盖率确定待测程序的安全性评估结果。其中,在基于执行路径信息和崩溃信息进行安全性评价的基础上,如果还需要继续测试,则生成新的模糊测试样本,并调整程序中的插桩点,使用新的样本对程序进行下一轮测试,直到达到目标的测试效果为止。
模糊测试(Fuzzing)通过在程序中输入大量特殊构造的数据,观察程序输出和运行状态的异常,从而发现程序中的安全问题。模糊测试是一种自动化或半自动化测试方法,其测试效果主要取决于数据生成算法。
软件插桩技术(Software instrumenting)是一项软件动态分析技术,其通过在程序原有指令序列中插入一些调试指令,实现程序执行过程中的信息获取,包括执行路径分析、函数调用关系等,可用于软件性能分析、程序优化、软件漏洞挖掘等领域。软件插桩主要包括源码插桩方式和二进制插桩方式,其插桩目标分别是软件源码和目标二进制文件。
在本发明的实施方式中,在获取初始的测试样本,并从智能电能表的嵌入式设备中提取待测程序后,基于所述待测程序依次进行反汇编处理、基本块分析处理、桩点选择处理和指令插桩处理。其中,反汇编处理是对收到待测程序的二进制文件进行结构分析和机器码翻译,以获取指令序列,用于在后续插桩时能够确定断点的位置。基本块分析处理是对获取的指令序列进行整理,获取基本块。桩点选择处理是按照基本块的粒度选择多个桩点。指令插桩处理是针对每个桩点设计插桩指令,以达到执行时触发断点的目的。
在步骤103,将所述测试样本数据作为所述待测程序的输入数据,执行所述待测程序,并对所述待测程序中的断点进行监听,获取并存储执行路径信息和崩溃信息。
优选地,其中将Ptrace附着到所述待测程序的进行中,利用Ptrace对所述待测程序中的断点进行监听。
优选地,其中所述方法利用如下方式存储执行路径信息,包括:,包括:
选取所述执行路径信息中的一条执行路径作为初始的路径,并根据所述初始的路径基于字典树的结构确定初始的执行路径树;
根据所述执行路径信息中剩余的每条执行路径对所述初始的执行路径树进行更新,确定最终的执行路径树,以对所述执行路径信息进行压缩存储;
其中,将所述执行路径树的从根节点到每个叶子节点的路径作为一条执行路径。
优选地,其中所述根据所述执行路径信息中剩余的每条执行路径对所述初始的执行路径树进行更新,包括:
对于任一条新的执行路径,设置指针r指向执行路径树的根结点,将指针r按照该新的执行路径的下一个节点向后跳转;若出现某个节点不在当前的执行路径树中,则确定所述新的执行路径与已存储在当前的执行路径树中的执行路径不同,根据所述新的执行路径增加节点,以更新当前的执行路径树;若直至所述新的执行路径的最后一个节点时,在该最后一个节点上存在一个表示终点的标记,则表示该新的执行路径与已存储在当前的执行路径树中的执行路径重复,不更新当前的执行路径树。
在本发明的实施方式中,在动态监控时,利用Ptrace附着到待测程序的进程中,并对程序中事先插入的断点进行监听,获取执行路径信息和崩溃信息。
随着测试覆盖率的提升,测试过程向着更深的执行分支探索,执行路径间存在较长的公共前缀。为了高效地对执行路径进行存储和查找,本发明使用基于字典树的结构对路径进行压缩存储。压缩存储的核心思想是将路径以树状存储,树中从根节点到每个叶子节点的路径代表一条执行路径。两条路径中相同的前缀节点是复用的;在加入一条路径时,只为新发现的分支开辟节点,从而避免重复存储带来的空间浪费。其中,在进行路径查找时,为了查找一条新的路径是否与现有的执行路径树中的执行路径重合,定义指针r指向字典树的头结点。对于新路径中的每个节点,将指针r按照路径的下一个节点向后跳转。跳转到路径的最后一个节点时,若该节点存在一个表示终点的标记,则表示该路径与现有路径重合;反之,则表示不重合。
在步骤104,根据所述执行路径信息确定基本块的覆盖率,根据崩溃信息确定崩溃样本,并根据崩溃样本对应的执行路径的不同进行筛查,确定唯一崩溃样本。
在本发明的实施方式中,对基本块的下标进行二进制压位,即将每个基本块看做二进制中的一位,这样一个32位的int中就可以存储32个基本块的访问信息;然后利用逻辑运算进行覆盖率更新。其中,根据确定的执行路径信息中的不重复的基本块数和待测程序的总的基本块数的比值确定基本块的覆盖率。当存在崩溃信息时,选取不重复的执行路径对应的崩溃样本为唯一崩溃样本。
在步骤105,根据所述基本块的覆盖率和唯一崩溃样本的数量确定所述待测程序的安全性评估结果。
优选地,其中所述根据所述基本块的覆盖率和唯一崩溃样本的数量确定所述待测程序的安全性评估结果,包括:
其中,E为安全性评估结果,其值域为(0,1),数值越大则安全程度越高;α为覆盖率所占的权重,β为崩溃信息所占的权重,α+β=1;Ec为覆盖率;Ccrash为唯一崩溃样本的数量。
优选地,其中所述方法还包括:
根据所述执行路径信息中非重复的执行路径对应的测试样本数据,利用模糊测试算法生成新的测试样本数据,以基于所述新的测试样本数据重新确定待测程序的安全性评估结果。
在本发明的实施方式中,根据安全监测系统在测试过程中收集的待测程序运行时的执行路径信息对应的基本块的覆盖信息,结合静态分析时得到的代码块信息,评价测试的完备性,以及在测试过程中发现崩溃后对产生崩溃的样本进行路径分析来判定崩溃样本的唯一性,实现对软件质量的评估。其中,评估公式为:
其中,E为安全性评估结果,其值域为(0,1),数值越大则安全程度越高;α为覆盖率所占的权重,β为崩溃信息所占的权重,α+β=1;Ec为覆盖率;Ccrash为唯一崩溃样本的数量。
另外,本发明还能够根据所述执行路径信息中非重复的执行路径对应的测试样本数据,利用模糊测试算法生成新的测试样本数据,以基于所述新的测试样本数据重新确定待测程序的安全性评估结果。
图3为根据本发明实施方式的基于动态插桩的软件分析系统300的结构示意图。如图3所示,本发明实施方式提供的基于动态插桩的软件分析系统300,包括:数据获取模块301、插桩模块302、监听模块303、覆盖率确定模块304和安全性评估模块305。
优选地,所述数据获取模块301,用于获取测试样本数据和待测程序。
优选地,所述插桩模块302,用于对所述待测程序进行结构分析和机器码翻译,获取指令序列,根据所述指令序列中的基本块粒度确定至少一个断点,并确定每个断点对应的插桩指令。
优选地,所述监听模块303,用于将所述测试样本数据作为所述待测程序的输入数据,执行所述待测程序,并对所述待测程序中的断点进行监听,获取并存储执行路径信息和崩溃信息。
优选地,其中所述监听模块303,将Ptrace附着到所述待测程序的进行中,利用Ptrace对所述待测程序中的断点进行监听。
优选地,其中所述监听模块模块303,利用如下方式存储执行路径信息,包括:
选取所述执行路径信息中的一条执行路径作为初始的路径,并根据所述初始的路径基于字典树的结构确定初始的执行路径树;
根据所述执行路径信息中剩余的每条执行路径对所述初始的执行路径树进行更新,确定最终的执行路径树,以对所述执行路径信息进行压缩存储;
其中,将所述执行路径树的从根节点到每个叶子节点的路径作为一条执行路径。
优选地,其中所述监听模块303,根据所述执行路径信息中剩余的每条执行路径对所述初始的执行路径树进行更新,包括:
对于任一条新的执行路径,设置指针r指向执行路径树的根结点,将指针r按照该新的执行路径的下一个节点向后跳转;若出现某个节点不在当前的执行路径树中,则确定所述新的执行路径与已存储在当前的执行路径树中的执行路径不同,根据所述新的执行路径增加节点,以更新当前的执行路径树;若直至所述新的执行路径的最后一个节点时,在该最后一个节点上存在一个表示终点的标记,则表示该新的执行路径与已存储在当前的执行路径树中的执行路径重复,不更新当前的执行路径树。
优选地,所述覆盖率确定模块304,用于根据所述执行路径信息确定基本块的覆盖率,根据崩溃信息确定崩溃样本,并根据崩溃样本对应的执行路径的不同进行筛查,确定唯一崩溃样本。
优选地,所述安全性评估模块305,用于根据所述基本块的覆盖率和唯一崩溃样本的数量确定所述待测程序的安全性评估结果。
优选地,其中所述安全性评估模块305,根据所述基本块的覆盖率和唯一崩溃样本的数量确定所述待测程序的安全性评估结果,包括:
其中,E为安全性评估结果,其值域为(0,1),数值越大则安全程度越高;α为覆盖率所占的权重,β为崩溃信息所占的权重,α+β=1;Ec为覆盖率;Ccrash为唯一崩溃样本的数量。
优选地,其中所述系统还包括:
样本数据更新模块,用于根据所述执行路径信息中非重复的执行路径对应的测试样本数据,利用模糊测试算法生成新的测试样本数据,以基于所述新的测试样本数据重新确定待测程序的安全性评估结果。
本发明的实施例的基于动态插桩的软件分析系统300与本发明的另一个实施例的基于动态插桩的软件分析方法100相对应,在此不再赘述。
已经通过参考少量实施方式描述了本发明。然而,本领域技术人员所公知的,正如附带的专利权利要求所限定的,除了本发明以上公开的其他的实施例等同地落在本发明的范围内。
通常地,在权利要求中使用的所有术语都根据他们在技术领域的通常含义被解释,除非在其中被另外明确地定义。所有的参考“一个/所述/该[装置、组件等]”都被开放地解释为所述装置、组件等中的至少一个实例,除非另外明确地说明。这里公开的任何方法的步骤都没必要以公开的准确的顺序运行,除非明确地说明。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。
Claims (10)
1.一种基于动态插桩的智能电能表软件分析方法,其特征在于,所述方法包括:
获取测试样本数据和待测程序;
对所述待测程序进行结构分析和机器码翻译,获取指令序列,根据所述指令序列中的基本块粒度确定至少一个断点,并确定每个断点对应的插桩指令;
将所述测试样本数据作为所述待测程序的输入数据,执行所述待测程序,并对所述待测程序中的断点进行监听,获取并存储执行路径信息和崩溃信息;
根据所述执行路径信息确定基本块的覆盖率,根据崩溃信息确定崩溃样本,并根据崩溃样本对应的执行路径的不同进行筛查,确定唯一崩溃样本;
根据所述基本块的覆盖率和唯一崩溃样本的数量确定所述待测程序的安全性评估结果;
其中,所述根据所述基本块的覆盖率和唯一崩溃样本的数量确定所述待测程序的安全性评估结果,包括:
其中,E为安全性评估结果,其值域为(0,1),数值越大则安全程度越高;α为覆盖率所占的权重,β为崩溃信息所占的权重,α+β=1;Ec为覆盖率;Ccrash为唯一崩溃样本的数量。
2.根据权利要求1所述的方法,其特征在于,将Ptrace附着到所述待测程序的进程中,利用Ptrace对所述待测程序中的断点进行监听。
3.根据权利要求1所述的方法,其特征在于,所述方法利用如下方式存储执行路径信息,包括:
选取所述执行路径信息中的一条执行路径作为初始的路径,并根据所述初始的路径基于字典树的结构确定初始的执行路径树;
根据所述执行路径信息中剩余的每条执行路径对所述初始的执行路径树进行更新,确定最终的执行路径树,以对所述执行路径信息进行压缩存储;
其中,将所述执行路径树的从根节点到每个叶子节点的路径作为一条执行路径。
4.根据权利要求3所述的方法,其特征在于,所述根据所述执行路径信息中剩余的每条执行路径对所述初始的执行路径树进行更新,包括:
对于任一条新的执行路径,设置指针r指向执行路径树的根结点,将指针r按照该新的执行路径的下一个节点向后跳转;若出现某个节点不在当前的执行路径树中,则确定所述新的执行路径与已存储在当前的执行路径树中的执行路径不同,根据所述新的执行路径增加节点,以更新当前的执行路径树;若直至所述新的执行路径的最后一个节点时,在该最后一个节点上存在一个表示终点的标记,则表示该新的执行路径与已存储在当前的执行路径树中的执行路径重复,不更新当前的执行路径树。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据所述执行路径信息中非重复的执行路径对应的测试样本数据,利用模糊测试算法生成新的测试样本数据,以基于所述新的测试样本数据重新确定待测程序的安全性评估结果。
6.一种基于动态插桩的智能电能表软件分析系统,其特征在于,所述系统包括:
数据获取模块,用于获取测试样本数据和待测程序;
插桩模块,用于对所述待测程序进行结构分析和机器码翻译,获取指令序列,根据所述指令序列中的基本块粒度确定至少一个断点,并确定每个断点对应的插桩指令;
监听模块,用于将所述测试样本数据作为所述待测程序的输入数据,执行所述待测程序,并对所述待测程序中的断点进行监听,获取并存储执行路径信息和崩溃信息;
覆盖率确定模块,用于根据所述执行路径信息确定基本块的覆盖率,根据崩溃信息确定崩溃样本,并根据崩溃样本对应的执行路径的不同进行筛查,确定唯一崩溃样本;
安全性评估模块,用于根据所述基本块的覆盖率和唯一崩溃样本的数量确定所述待测程序的安全性评估结果;
其中,所述安全性评估模块,根据所述基本块的覆盖率和唯一崩溃样本的数量确定所述待测程序的安全性评估结果,包括:
其中,E为安全性评估结果,其值域为(0,1),数值越大则安全程度越高;α为覆盖率所占的权重,β为崩溃信息所占的权重,α+β=1;Ec为覆盖率;Ccrash为唯一崩溃样本的数量。
7.根据权利要求6所述的系统,其特征在于,所述监听模块,将Ptrace附着到所述待测程序的进程中,利用Ptrace对所述待测程序中的断点进行监听。
8.根据权利要求6所述的系统,其特征在于,所述监听模块,利用如下方式存储执行路径信息,包括:
选取所述执行路径信息中的一条执行路径作为初始的路径,并根据所述初始的路径基于字典树的结构确定初始的执行路径树;
根据所述执行路径信息中剩余的每条执行路径对所述初始的执行路径树进行更新,确定最终的执行路径树,以对所述执行路径信息进行压缩存储;
其中,将所述执行路径树的从根节点到每个叶子节点的路径作为一条执行路径。
9.根据权利要求8所述的系统,其特征在于,所述覆盖率确定模块,根据所述执行路径信息中剩余的每条执行路径对所述初始的执行路径树进行更新,包括:
对于任一条新的执行路径,设置指针r指向执行路径树的根结点,将指针r按照该新的执行路径的下一个节点向后跳转;若出现某个节点不在当前的执行路径树中,则确定所述新的执行路径与已存储在当前的执行路径树中的执行路径不同,根据所述新的执行路径增加节点,以更新当前的执行路径树;若直至所述新的执行路径的最后一个节点时,在该最后一个节点上存在一个表示终点的标记,则表示该新的执行路径与已存储在当前的执行路径树中的执行路径重复,不更新当前的执行路径树。
10.根据权利要求6所述的系统,其特征在于,所述系统还包括:
样本数据更新模块,用于根据所述执行路径信息中非重复的执行路径对应的测试样本数据,利用模糊测试算法生成新的测试样本数据,以基于所述新的测试样本数据重新确定待测程序的安全性评估结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011313443.8A CN112559322B (zh) | 2020-11-20 | 2020-11-20 | 一种基于动态插桩的软件分析方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011313443.8A CN112559322B (zh) | 2020-11-20 | 2020-11-20 | 一种基于动态插桩的软件分析方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112559322A CN112559322A (zh) | 2021-03-26 |
CN112559322B true CN112559322B (zh) | 2023-09-26 |
Family
ID=75044425
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011313443.8A Active CN112559322B (zh) | 2020-11-20 | 2020-11-20 | 一种基于动态插桩的软件分析方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112559322B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114168454B (zh) * | 2021-11-23 | 2023-03-10 | 叶嵩 | 一种基于动态插桩-销桩技术的异步测试方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102789419A (zh) * | 2012-07-20 | 2012-11-21 | 中国人民解放军信息工程大学 | 一种使用多样本差异比对的软件故障分析方法 |
CN105630678A (zh) * | 2015-12-22 | 2016-06-01 | 国网天津市电力公司 | 一种智能电能表软件的可靠性检测仪及其检测方法 |
CN111913878A (zh) * | 2020-07-13 | 2020-11-10 | 苏州洞察云信息技术有限公司 | 基于程序分析结果的字节码插桩方法、装置及存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040025093A1 (en) * | 2002-07-31 | 2004-02-05 | Jeff Willy | System and method for collecting code coverage information on fatal error path code |
KR101904911B1 (ko) * | 2017-10-13 | 2018-10-08 | 한국인터넷진흥원 | 하이브리드 퍼징 기반 보안 취약점 자동 탐색 방법 및 그 장치 |
-
2020
- 2020-11-20 CN CN202011313443.8A patent/CN112559322B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102789419A (zh) * | 2012-07-20 | 2012-11-21 | 中国人民解放军信息工程大学 | 一种使用多样本差异比对的软件故障分析方法 |
CN105630678A (zh) * | 2015-12-22 | 2016-06-01 | 国网天津市电力公司 | 一种智能电能表软件的可靠性检测仪及其检测方法 |
CN111913878A (zh) * | 2020-07-13 | 2020-11-10 | 苏州洞察云信息技术有限公司 | 基于程序分析结果的字节码插桩方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112559322A (zh) | 2021-03-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108845944B (zh) | 一种结合符号执行提高软件模糊测试效率的方法 | |
Dickinson et al. | Finding failures by cluster analysis of execution profiles | |
CN110442511B (zh) | 可视化埋点测试方法及装置 | |
CN102508780B (zh) | 一种用于软件测试的交叉式动态法和装置 | |
CN110543421A (zh) | 基于测试用例自动生成算法的单元测试自动执行方法 | |
CN101706749B (zh) | 基于软件安全缺陷检测的综合处理方法 | |
CN112380120B (zh) | 单元测试代码结构自动解析与路径分析方法 | |
CN107193732B (zh) | 一种基于路径比对的校验函数定位方法 | |
Leon et al. | Multivariate visualization in observation-based testing | |
Abou Assi et al. | Identifying failure-correlated dependence chains | |
CN112559322B (zh) | 一种基于动态插桩的软件分析方法及系统 | |
Molnar et al. | Discovering maintainability changes in large software systems | |
CN105260312A (zh) | 一种多核实时系统应用数据竞争错误的调试方法 | |
CN116627818A (zh) | 一种基于程序路径相似度的测试用例复用方法 | |
Lochmann | A benchmarking-inspired approach to determine threshold values for metrics | |
CN106294136A (zh) | 并行程序运行期间性能变化的在线检测方法和系统 | |
Jahangirova et al. | An empirical study on failed error propagation in Java programs with real faults | |
CN115577364A (zh) | 一种多静态分析工具结果融合的漏洞挖掘方法 | |
CN114706769A (zh) | 基于日志的面向回归测试的黑盒测试用例排序方法 | |
Mondal et al. | Investigating the relationship between evolutionary coupling and software bug-proneness | |
CN114462043A (zh) | 基于强化学习的Java反序列化漏洞检测系统及方法 | |
Hamou-Lhadj et al. | Understanding the complexity embedded in large routine call traces with a focus on program comprehension tasks | |
Knowles et al. | Bit-level systolic arrays for IIR filtering | |
Xie | Improving effectiveness of automated software testing in the absence of specifications | |
Kim et al. | Investigating the relationship between mutants and real faults with respect to mutated code |
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 |