一种基于动态符号执行的调试方法、系统和介质技术方案

技术编号:33468676 阅读:11 留言:0更新日期:2022-05-19 00:46
本公开提供一种基于动态符号执行的调试方法、系统和介质。所述调试方法包括:步骤S1、启动调试服务端的目标程序,对所述目标程序执行具体

【技术实现步骤摘要】
一种基于动态符号执行的调试方法、系统和介质


[0001]本公开涉及软件调试领域,尤其是涉及一种基于动态符号执行的调试方法、系统和介质。

技术介绍

[0002]符号执行是指一种基于约束求解技术的程序分析方法。将程序的输入由具体值替换为符号变元,将程序中每条指令本身的具体计算语义映射为相应的符号计算语义,沿着程序的控制流累积计算程序中各个变量关于符号变元的表示形式,并收集分支程序点对应的谓词条件,形成关于该路径的约束条件。
[0003]二进制软件调试是对实际部署应用程序的运行机理深入理解的一种动态分析方法。依托于动态调试器,安全分析人员可以通过设置断点、单步执行等方式对目标软件的运行过程动态监控,对程序的执行状态进行观察分析。该方法当前在软件逆向、漏洞分析方面等具有较为广泛的应用。尽管现有二进制软件调试器具备完善的对目标程序执行过程动态监控和数据查看的能力,程序变量和外部输入之间的依赖关系仍需专业的分析人员经花费较长时间人工推导得到。
[0004]当前应用较为广泛的二进制软件调试器包括Windows平台下的windbg、Linux平台下的gdb。这两型调试器或使用宿主机操作系统内置的调试功能对目标程序进行本地调试,或与安装在客户机操作系统内的调试插桩代码进行通信,进行远程调试。上述调试技术都可以用于对目标程序挂设断点进行执行监控并实时查看执行状态信息,但都无法显示提供程序变量关于外部输入的依赖关系。安全分析人员需要基于多次调试分析,结合对目标程序的深度理解才能计算出上述关系,由此制约调试分析的效率。/>[0005]公开内容
[0006]针对上述问题,鉴于符号执行技术在刻画数据之间依赖关系的应用有效性,本公开提供一种基于动态符号执行的调试方案,其依托于软件虚拟机,在动态二进制翻译过程中加入动态符号执行机制,同时在程序的仿真执行过程中引入断点监控机制,由此使用户能够在预定义断点触发时,得到关注程序变量对于外部输入的显示依赖关系,由此提升软件调试的效率。本方案的核心思想在于,在目标程序的具体执行过程中同时进行符号执行,由此在数据查看时刻能够以一阶逻辑符号表达式的提供关注变量关于外部输入的依赖信息,从而根据用户需求,实时计算并提供给程序分析人员直观的任一程序变量对于外部输入的依赖关系。
[0007]本公开第一方面提供了一种基于动态符号执行的调试方法,所述调试方法包括:步骤S1、启动调试服务端的目标程序,对所述目标程序执行具体

符号执行,所述具体

符号执行同时对所述目标程序执行具体执行和符号执行;步骤S2、经由所述调试服务端和调试客户端之间的连接,接收来自所述调试客户端由用户输入的命令,并基于所述命令的类别确定对应的模块,由所述模块利用所述具体

符号执行来执行所述命令;以及步骤S3、采集执行结果,将所述执行结果发送至所述调试客户端。
[0008]具体地,所述具体

符号执行包括:从所述目标程序中提取基本块,并生成微指令序列;扫描所述微指令序列中寄存器对应的机器状态;当寄存器为符号状态时,提升微指令块至中间语言以执行所述符号执行;否则,提取下一条微指令,判断所述微指令的访问内存是否为符号状态,若是,则提升所述微指令块至所述中间语言以执行所述符号执行,若否,则继续提取后续的微指令。
[0009]具体地,所述命令包括:操作系统执行监控命令、指令控制流监控命令和机器状态读取/修改命令。
[0010]具体地,与所述操作系统执行监控命令对应的模块被配置为,对所述目标程序内的指令执行时刻进行挂钩;与所述指令控制流监控命令对应的模块被配置为,对所述目标程序内的系统运行时刻进行挂钩;以及与所述机器状态读取/修改命令对应的模块被配置为,对所述目标程序内的数据状态进行读取/修改。
[0011]本公开第二方面提供了一种基于动态符号执行的调试系统,所述调试系统包括:第一模块,被配置为,启动调试服务端的目标程序,对所述目标程序执行具体

符号执行,所述具体

符号执行同时对所述目标程序执行具体执行和符号执行;第二模块,被配置为,经由所述调试服务端和调试客户端之间的连接,接收来自所述调试客户端由用户输入的命令,并基于所述命令的类别确定对应的模块,由所述模块利用所述具体

符号执行来执行所述命令;以及第三模块,被配置为,采集执行结果,将所述执行结果发送至所述调试客户端。
[0012]具体地,所述具体

符号执行包括:从所述目标程序中提取基本块,并生成微指令序列;扫描所述微指令序列中寄存器对应的机器状态;当寄存器为符号状态时,提升微指令块至中间语言以执行所述符号执行;否则,提取下一条微指令,判断所述微指令的访问内存是否为符号状态,若是,则提升所述微指令块至所述中间语言以执行所述符号执行,若否,则继续提取后续的微指令。
[0013]具体地,所述命令包括:操作系统执行监控命令、指令控制流监控命令和机器状态读取/修改命令。
[0014]具体地,与所述操作系统执行监控命令对应的模块被配置为,对所述目标程序内的指令执行时刻进行挂钩;与所述指令控制流监控命令对应的模块被配置为,对所述目标程序内的系统运行时刻进行挂钩;以及与所述机器状态读取/修改命令对应的模块被配置为,对所述目标程序内的数据状态进行读取/修改。
[0015]本公开第三方面提供了一种存储有指令的非暂时性计算机可读介质,当所述指令由处理器执行时,执行根据本公开第一方面的基于动态符号执行的调试方法中的步骤。
[0016]综上,本公开的技术方案依托于软件虚拟机,在动态二进制翻译过程中加入动态符号执行机制,同时在程序的仿真执行过程中引入断点监控机制,由此使用户能够在预定义断点触发时,得到关注程序变量对于外部输入的显示依赖关系,由此提升软件调试的效率。本方案的核心思想在于,在目标程序的具体执行过程中同时进行符号执行,由此在数据查看时刻能够以一阶逻辑符号表达式的提供关注变量关于外部输入的依赖信息,从而根据用户需求,实时计算并提供给程序分析人员直观的任一程序变量对于外部输入的依赖关系。
附图说明
[0017]为了更清楚地说明本公开具体实施方式或现有技术中的技术方案下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本公开的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0018]图1为根据本公开实施例的基于动态符号执行的调试方法的流程图;
[0019]图2为根据本公开实施例的基于具体

符号执行的二进制程序全系统动态调试器框架图;
[0020]图3为根据本公开实施例的具体

符号执行的流程图;以及
[0021]图4为根据本公开实施例的基于动态符号执行的调试系统的机构图。
具体实施方式
[0022]下本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种基于动态符号执行的调试方法,其特征在于,所述调试方法包括:步骤S1、启动调试服务端的目标程序,对所述目标程序执行具体

符号执行,所述具体

符号执行同时对所述目标程序执行具体执行和符号执行;步骤S2、经由所述调试服务端和调试客户端之间的连接,接收来自所述调试客户端由用户输入的命令,并基于所述命令的类别确定对应的模块,由所述模块利用所述具体

符号执行来执行所述命令;以及步骤S3、采集执行结果,将所述执行结果发送至所述调试客户端。2.根据权利要求1所述的基于动态符号执行的调试方法,其特征在于,所述具体

符号执行包括:从所述目标程序中提取基本块,并生成微指令序列;扫描所述微指令序列中寄存器对应的机器状态;当寄存器为符号状态时,提升微指令块至中间语言以执行所述符号执行;否则,提取下一条微指令,判断所述微指令的访问内存是否为符号状态,若是,则提升所述微指令块至所述中间语言以执行所述符号执行,若否,则继续提取后续的微指令。3.根据权利要求1所述的基于动态符号执行的调试方法,其特征在于,所述命令包括:操作系统执行监控命令、指令控制流监控命令和机器状态读取/修改命令。4.根据权利要求3所述的基于动态符号执行的调试方法,其特征在于,其中:与所述操作系统执行监控命令对应的模块被配置为,对所述目标程序内的指令执行时刻进行挂钩;与所述指令控制流监控命令对应的模块被配置为,对所述目标程序内的系统运行时刻进行挂钩;以及与所述机器状态读取/修改命令对应的模块被配置为,对所述目标程序内的数据状态进行读取/修改。5.一种基于动态符号执行的调试系统,其特征在于,所述调试系统包括:第一模块,被配置为,启动调试服务端的目标程序,对...

【专利技术属性】
技术研发人员:黄晖陆余良刘京菊潘祖烈王永杰杨国正赵军赵顺恺
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:

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

1