[发明专利]程序退出方法、装置、计算机设备和存储介质有效
申请号: | 202010200911.4 | 申请日: | 2020-03-20 |
公开(公告)号: | CN111427623B | 公开(公告)日: | 2023-06-30 |
发明(设计)人: | 周亚桥 | 申请(专利权)人: | 北京奇艺世纪科技有限公司 |
主分类号: | G06F9/445 | 分类号: | G06F9/445;G06F9/448 |
代理公司: | 北京华夏泰和知识产权代理有限公司 11662 | 代理人: | 杜欣;刘蔓莉 |
地址: | 100080 北京市海淀区*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 程序 退出 方法 装置 计算机 设备 存储 介质 | ||
本申请涉及一种程序退出方法、装置、计算机设备和存储介质,方法包括:获取线程功能程序,线程功能程序包含预设退出函数;利用等效代码替换预设退出函数对应的代码,得到修改后的预设退出函数,等效代码包括间接访问空指针的代码;将线程功能程序作为父进程,根据分叉函数创建一个子进程,子进程为父进程的副本,子进程通过追踪函数调试父进程;判断父进程是否被子进程成功调试,父进程同时只能被一个追踪函数进行调试;若父进程没有被子进程成功调试时,调用修改后的预设退出函数退出程序。根据上述方法通过反静态调试和反动态调试相结合,避免程序被攻击者非法调试并获取程序运行信息,保证了程序安全退出的可靠性。
技术领域
本申请涉及计算机技术领域,尤其涉及一种程序退出方法、装置、计算机设备和存储介质。
背景技术
C语言标准库提供了exit函数实现程序的退出,一般情况下,程序执行完主函数main的所有逻辑后,遇到return语句就会结束程序,而遇到异常情况希望提前结束程序才会使用exit函数。如果exit函数被攻击者恶意利用,本应退出的程序如果继续运行,可能泄漏攻击者本不应该得到的数据或者信息,也可能使攻击者获得本不该拥有的权限,造成商业损失。
发明内容
为了解决上述技术问题,本申请提供了一种程序退出方法、装置、计算机设备和存储介质。
第一方面,本实施例提供了一种程序退出方法,所述方法包括:
获取线程功能程序,所述线程功能程序包含预设退出函数;
利用等效代码替换所述预设退出函数对应的代码,得到修改后的预设退出函数,所述等效代码包括间接访问空指针的代码;
将所述线程功能程序作为父进程,根据分叉函数创建一个子进程,所述子进程为所述父进程的副本,所述子进程通过追踪函数调试所述父进程;
判断所述父进程是否被子进程成功调试,所述父进程同时只能被一个追踪函数进行调试;
若所述父进程没有被所述子进程成功调试时,调用所述修改后的预设退出函数退出程序。
可选地,所述等效代码还包括修改寄存器值的代码,所述寄存器值包括rsp寄存器值、rbp寄存器值和通用寄存器值,所述rsp寄存器值、rbp寄存器值和通用寄存器值为合法区间内的任意值。
可选地,所述判断所述父进程是否被子进程成功调试,包括:
选择所述子进程中的任意变量作为目标变量,所述目标变量的值为特定值;
根据所述父进程中对应的目标变量的值判断所述父进程是否被子进程成功调试;
所述若所述父进程没有被所述子进程成功调试时,调用所述修改后的预设退出函数退出程序,包括:
当所述父进程中对应的目标变量的值不为特定值时,所述子进程调试所述父进程失败,调用所述修改后的预设退出函数退出程序。
可选地,所述方法还包括:
当所述父进程中对应的目标变量的值与所述特定值相等时,判定所述父进程被子进程成功调试,继续程序运行。
第二方面,本实施例提供了一种程序退出装置,所述装置包括:
程序获取模块,用于获取线程功能程序,所述线程功能程序包含预设退出函数;
函数修改模块,用于利用等效代码替换所述预设退出函数对应的代码,得到修改后的预设退出函数,所述等效代码包括间接访问空指针的代码;
关联模块,用于将所述线程功能程序作为父进程,根据分叉函数创建一个子进程,所述子进程为所述父进程的副本,所述子进程通过追踪函数调试所述父进程;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京奇艺世纪科技有限公司,未经北京奇艺世纪科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010200911.4/2.html,转载请声明来源钻瓜专利网。