[发明专利]一种支持自动化检测程序缺陷的方法和系统有效
申请号: | 202210009142.9 | 申请日: | 2022-01-06 |
公开(公告)号: | CN114036072B | 公开(公告)日: | 2022-04-08 |
发明(设计)人: | 任飞;孙文川;肖剑明 | 申请(专利权)人: | 湖南泛联新安信息科技有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F11/07 |
代理公司: | 长沙市护航专利代理事务所(特殊普通合伙) 43220 | 代理人: | 张洁 |
地址: | 410005 湖南省长沙市开福区伍家岭街道*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 支持 自动化 检测 程序 缺陷 方法 系统 | ||
1.一种支持自动化检测程序缺陷的方法,其特征在于,所述方法包括以下步骤:
步骤S100:获取待测试程序,按照预设的程序完备配置原则给所述待测试程序配置信息得到完备后的待测试程序;
步骤S200:分析所述完备后的待测试程序,解析并提取待测函数和待测函数信息,并将所述完备后的待测试程序编译成LLVM中间码;
步骤S300:分析所述LLVM中间码得到中间码指令上的附带信息,根据所述附带信息和所述待测函数信息对所述待测函数进行代码插桩,生成符号执行驱动程序;
步骤S400:通过执行分析技术分析所述符号执行驱动程序,生成待测试程序的触发缺陷测试数据;
步骤S500:解释器实际执行所述缺陷测试数据,输出执行结果得到待测试程序的缺陷测试结果;
步骤S200中的所述待测函数信息至少包括待测函数的函数名、代码行数统计信息、分支统计信息、圈复杂度、控制流信息、影响待测函数行为的函数参数、全局变量和局部静态变量;
步骤S200包括:
步骤S210:分析所述完备后的待测试程序获取所述完备后的待测试程序中的关键字;
步骤S220:当根据所述关键字判断对应的语言不在预设的编译环境的方言范围内时,采用拓展开源框架Clang的方式对所述待测试程序进行兼容后,解析并提取待测函数和待测函数信息,并将所述完备后的待测试程序编译成LLVM中间码;当根据所述关键字判断对应的语言在预设的编译环境的方言范围内时,解析并提取待测函数和待测函数信息,并将所述完备后的待测试程序编译成LLVM中间码;
步骤S300包括:
步骤S310:分析所述LLVM中间码得到中间码指令上的附带信息;
步骤S320:根据所述影响待测函数行为的函数参数、所述全局变量和所述局部静态变量进行代码插桩,插桩的过程中,将影响函数行为的变量的名称和类型添加到所述附带信息中进行标记,生成调用待测函数的符号执行驱动函数;
步骤S400包括:
步骤S410:将标记的变量进行符号化,没有标记的变量给予其在待测函数中初始化时的真实值,得到符号化后的驱动函数;
步骤S420:利用符号执行引擎解释执行符号化后的驱动函数,并记录路径所探索过的分支,每解释一条指令都对分支进行排序,以获得当前状态下探索分支数量最多的路径,且继续解释该路径,直到该路径走到函数的跳出语句,在探索分支过程中,对预先设置的可触发漏洞的指令添加漏洞触发的约束,将其加入到路径约束组中进行求解以判定当前的路径条件是否会触发漏洞,若求解成功则可以得到漏洞触发的输入,将所述漏洞触发的输入作为缺陷测试用例数据。
2.根据权利要求1所述的方法,其特征在于,步骤S500包括:
将所述缺陷测试用例数据封装成测试驱动程序,通过在解释器中将预设定义的程序声明作为解释器内嵌函数,解释执行相应的测试驱动程序,在解释执行的过程中收集执行指令的信息并导出到输出文件中,得到缺陷测试结果。
3.根据权利要求2所述的方法,其特征在于,所述执行指令的信息包括指令的行数、调用指令调用的次数和是否引发缺陷。
4.一种支持自动化检测程序缺陷的系统,其特征在于,包括:
程序配置模块,用于获取待测试程序,按照预设的程序完备配置原则给所述待测试程序配置信息得到完备后的待测试程序;
编译模块,用于分析所述完备后的待测试程序,解析并提取待测函数和待测函数信息,并将所述完备后的待测试程序编译成LLVM中间码;
代码插桩模块,用于分析所述LLVM中间码得到中间码指令上的附带信息,根据所述附带信息和所述待测函数信息对所述待测函数进行代码插桩,生成符号执行驱动程序;
触发缺陷测试数据生成模块,用于通过执行分析技术分析所述符号执行驱动程序,生成待测试程序的触发缺陷测试数据;
缺陷验证模块,用于解释器实际执行所述缺陷测试数据,输出执行结果得到待测试程序的缺陷测试结果;
所述编译模块中的所述待测函数信息至少包括待测函数的函数名、代码行数统计信息、分支统计信息、圈复杂度、控制流信息、影响待测函数行为的函数参数、全局变量和局部静态变量;
所述编译模块包括:分析所述完备后的待测试程序获取所述完备后的待测试程序中的关键字;当根据所述关键字判断对应的语言不在预设的编译环境的方言范围内时,采用拓展开源框架Clang的方式对所述待测试程序进行兼容后,解析并提取待测函数和待测函数信息,并将所述完备后的待测试程序编译成LLVM中间码;当根据所述关键字判断对应的语言在预设的编译环境的方言范围内时,解析并提取待测函数和待测函数信息,并将所述完备后的待测试程序编译成LLVM中间码;
所述代码插桩模块包括:分析所述LLVM中间码得到中间码指令上的附带信息;根据所述影响待测函数行为的函数参数、所述全局变量和所述局部静态变量进行代码插桩,插桩的过程中,将影响函数行为的变量的名称和类型添加到所述附带信息中进行标记,生成调用待测函数的符号执行驱动函数;
所述触发缺陷测试数据生成模块包括:将标记的变量进行符号化,没有标记的变量给予其在待测函数中初始化时的真实值,得到符号化后的驱动函数;利用符号执行引擎解释执行符号化后的驱动函数,并记录路径所探索过的分支,每解释一条指令都对分支进行排序,以获得当前状态下探索分支数量最多的路径,且继续解释该路径,直到该路径走到函数的跳出语句,在探索分支过程中,对预先设置的可触发漏洞的指令添加漏洞触发的约束,将其加入到路径约束组中进行求解以判定当前的路径条件是否会触发漏洞,若求解成功则可以得到漏洞触发的输入,将所述漏洞触发的输入作为缺陷测试用例数据。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于湖南泛联新安信息科技有限公司,未经湖南泛联新安信息科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202210009142.9/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种模拟复合载荷条件下的力磁耦合测试装置
- 下一篇:一种人源化抗体及其应用