当前位置: 首页 > 专利查询>清华大学专利>正文

程序插桩方法、装置、设备和存储介质制造方法及图纸

技术编号:36397978 阅读:50 留言:0更新日期:2023-01-18 10:04
本申请提供一种程序插桩方法、装置、设备和存储介质,涉及计算机技术领域。该方法包括:获取待分析程序,待分析程序为二进制程序;基于分析需求,识别待分析程序中的冗余指令,确定待插入的桩函数,冗余指令为与待分析程序的原始语义和/或分析需求无关的代码,所述冗余指令的位置为所述桩函数的插桩点;根据桩函数所在的位置和插桩点之间的偏移量,对函数调用指令中的地址偏移量进行赋值;将冗余指令替换为函数调用指令。通过移除待分析程序中的冗余指令,可以在不破坏待分析程序原始结构和指令偏移的前提下,留出插桩空间,向待分析程序注入新的代码,具有较高的稳定性,不仅适用于中小型程序,还适用于操作系统内核等复杂的大型程序。程序。程序。

【技术实现步骤摘要】
程序插桩方法、装置、设备和存储介质


[0001]本申请涉及计算机
,尤其涉及一种程序插桩方法、装置、设备和存储介质。

技术介绍

[0002]网络空间是现代社会的重要组成部分,广泛应用于工业生产等重要场景中。作为网络空间的重要组成部分,程序的功能也越来越多样化和复杂化,因此,对程序测试的要求也随之提高,需要通过程序测试及时发现程序问题,避免程序存在故障或安全漏洞,给用户日常使用等带来负面影响。
[0003]程序插桩技术,作为一种程序分析的辅助手段,被广泛应用于程序的动态测试中,该技术通过向程序中注入新的代码,来获取程序在执行过程中的内部状态,给动态测试提供反馈信息;或改变程序原本的执行流程,以适应于特殊的分析需求。
[0004]其中,较具代表性的程序插桩技术的应用案例之一是模糊测试中的代码覆盖率反馈插桩。模糊测试被认为是目前有效的自动化漏洞挖掘技术,通过大量生成测试用例,反复执行测试目标,尝试触发程序中的漏洞。模糊测试通常以测试用例触发的代码量来评价测试用例的质量,然而程序通常不会主动记录、反馈代码执行情况,所以需要使用程序插桩技术在程序的基本块中加入指令,在基本块被执行时记录信息。除了动态测试,程序插桩技术还可以被引用在程序补丁等丰富的场景中,例如在关键功能前增加条件检查,或者在相关联的功能中批量增加日志信息等。总体来说,程序插桩技术为程序开发、测试、维护的整个流程极大地增加了便捷性与灵活性。
[0005]相关技术中,程序插桩技术通常仅支持源码插桩,即源代码插桩,在编译阶段向程序注入代码。如开发框架(Spring boot)支持开发者在程序中主动定义“通知”行为,在指定功能开始执行的前后,调用自定义代码;编译器,包括编译器集(GNU Compiler Collection,简称GCC)与轻量级编译器(clang),支持对源码进行自动化的代码覆盖率插桩,能够在编译过程中向每个基本块增加代码,记录基本块是否被触发。然而,源码常常是难以获得的,如大量的商用软件、操作系统出于商业需求,不开放源码;而一些开发时间较早的软件,也常常存在源码丢失的问题。这些情况,催生了大量闭源程序(即二进制程序)分析的需求,因此,亟需提供一种适用于闭源程序的有效的程序插桩方案,以辅助动态测试。

技术实现思路

[0006]本申请提供一种程序插桩方法、装置、设备和存储介质,用以提供一种适用于闭源程序的有效的程序插桩方案,以辅助动态测试。
[0007]第一方面,本申请提供一种程序插桩方法,包括:获取待分析程序,待分析程序为二进制程序;基于分析需求,识别待分析程序中的冗余指令,确定待插入的桩函数,冗余指令为与待分析程序的原始语义和/或分析需求无关的代码,冗余指令的位置为桩函数的插桩点,桩函数用于向待分析程序中增加与分析需求对应的功能、保存待分析程序执行的上
下文信息以及基于上下文信息恢复执行待分析程序;根据桩函数所在的位置和插桩点之间的偏移量,对函数调用指令中的地址偏移量进行赋值;将冗余指令替换为函数调用指令。
[0008]一种可能的实施方式中,基于分析需求,识别待分析程序中的冗余指令,包括:基于分析需求,确定冗余指令;对待分析程序中的冗余指令进行扫描与记录。
[0009]一种可能的实施方式中,对待分析程序中的冗余指令进行扫描,包括:对于定长指令集,通过指令字节码扫描冗余指令;对于非定长的指令集,通过反汇编工具扫描冗余指令。
[0010]一种可能的实施方式中,若程序插桩方法中的桩函数与待分析程序之间以动态链接库的形式进行链接,则函数调用指令基于位置无关函数的跳转表调用桩函数,跳转表包括程序链接表或桩函数表;若待分析程序的文件结构无法增加位置无关函数跳转表,则函数调用指令基于非关键函数的表项调用桩函数,非关键函数包括日志函数。
[0011]一种可能的实施方式中,将冗余指令替换为函数调用指令之后,还包括:确定冗余指令所占第一空间是否大于函数调用指令所占的第二空间;响应于第一空间大于第二空间,根据多余空间部分在函数调用指令之前和/或函数调用指令之后填充空指令。
[0012]一种可能的实施方式中,上下文信息包括寄存器数值与内存状态。
[0013]第二方面,本申请提供一种程序插桩装置,包括:获取模块,用于获取待分析程序,待分析程序为二进制程序;识别模块,用于基于分析需求,识别待分析程序中的冗余指令,确定待插入的桩函数,冗余指令为与待分析程序的原始语义和/或分析需求无关的代码,冗余指令的位置为桩函数的插桩点,桩函数用于向待分析程序中增加与分析需求对应的功能、保存待分析程序执行的上下文信息以及基于上下文信息恢复执行待分析程序;赋值模块,用于根据桩函数所在的位置和插桩点之间的偏移量,对函数调用指令中的地址偏移量进行赋值;替换模块,用于将冗余指令替换为函数调用指令。
[0014]一种可能的实施方式中,识别模块可以用于基于分析需求,识别待分析程序中的冗余指令,具体为:基于分析需求,确定冗余指令;对待分析程序中的冗余指令进行扫描与记录。
[0015]一种可能的实施方式中,识别模块还可以用于:对于定长指令集,通过指令字节码扫描冗余指令;对于非定长的指令集,通过反汇编工具扫描冗余指令。
[0016]一种可能的实施方式中,还包括:在桩函数与待分析程序之间以动态链接库的形式进行链接时,函数调用指令基于位置无关函数的跳转表调用桩函数,跳转表包括程序链接表或桩函数表;若待分析程序的文件结构无法增加位置无关函数跳转表,则函数调用指令基于非关键函数的表项调用桩函数,非关键函数包括日志函数等。
[0017]一种可能的实施方式中,替换模块还可以用于:确定冗余指令所占第一空间是否大于函数调用指令所占的第二空间;响应于第一空间大于第二空间,根据多余空间部分在函数调用指令之前和/或函数调用指令之后填充空指令。
[0018]一种可能的实施方式中,识别模块中识别到的待插入的桩函数保存的待分析程序执行的上下文信息包括寄存器数值与内存状态。
[0019]第三方面,本申请提供一种电子设备,包括:存储器和处理器。存储器用于存储程序指令;处理器用于调用存储器中的程序指令执行第一方面的程序插桩方法。
[0020]第四方面,本申请提供一种计算机可读存储介质,计算机可读存储介质中存储有
计算机执行指令,计算机执行指令被执行时实现第一方面的程序插桩方法。
[0021]第五方面,本申请提供一种计算机程序产品,计算机程序产品包含计算机程序,计算机程序被执行时用于实现第一方面的程序插桩方法。
[0022]本申请提供的程序插桩方法、装置、设备和存储介质,通过获取待分析程序,待分析程序为二进制程序;基于分析需求,识别待分析程序中的冗余指令以及待插入的桩函数,冗余指令为与待分析程序的原始语义和/或分析需求无关的代码,冗余指令的位置为桩函数的插桩点,桩函数用于向待分析程序中增加与分析需求对应的功能、保存待分析程序执行的上下文信息以及基于上下文信息恢复执行待分析程序;根据桩函数所在的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种程序插桩方法,其特征在于,包括:获取待分析程序,所述待分析程序为二进制程序;基于分析需求,识别所述待分析程序中的冗余指令,确定待插入的桩函数,所述冗余指令为与所述待分析程序的原始语义和/或所述分析需求无关的代码,所述冗余指令的位置为所述桩函数的插桩点,所述桩函数用于向所述待分析程序中增加符合所述分析需求的功能、保存所述待分析程序执行的上下文信息以及基于所述上下文信息恢复执行所述待分析程序;根据所述桩函数所在的位置和所述插桩点之间的偏移量,对函数调用指令中的地址偏移量进行赋值;将所述冗余指令替换为函数调用指令。2.根据权利要求1所述的程序插桩方法,其特征在于,所述基于分析需求,识别所述待分析程序中的冗余指令,包括:基于所述分析需求,确定所述冗余指令;对所述待分析程序中的冗余指令进行扫描与记录。3.根据权利要求2所述的程序插桩方法,其特征在于,对所述待分析程序中的冗余指令进行扫描,包括:对于定长指令集,通过指令字节码扫描所述冗余指令;对于非定长的指令集,通过反汇编工具扫描所述冗余指令。4.根据权利要求1至3中任一项所述的程序插桩方法,其特征在于,还包括:若所述桩函数与所述待分析程序之间以动态链接库的形式进行链接,则所述函数调用指令基于位置无关函数的跳转表调用所述桩函数,所述跳转表包括程序链接表或桩函数表;若所述待分析程序的文件结构无法增加位置无关函数的跳转表,则所述函数调用指令基于非关键函数的表项调用所述桩函数,所述非关键函数包括日志函数。5.根据权利要求1至3中任一项所述的程序插桩方法,其特征在于,所述将所述冗余指令替换为函数调用指令之后,还包括...

【专利技术属性】
技术研发人员:张超殷婷婷
申请(专利权)人:清华大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1