一种程序退出的方法及相关设备技术

技术编号:23239194 阅读:33 留言:0更新日期:2020-02-04 18:32
本发明专利技术实施例公开了一种程序退出的方法及相关设备,用于在检测到程序被调试后,强行退出程序以提高程序的安全性。本发明专利技术实施例方法包括:编写while循环函数,所述while循环函数用于调用系统内存分配函数持续分配内存,所述系统内存分配函数包括分配的内存的大小;编写for循环函数,所述for循环函数用于在所述分配的内存中插入随机数据;确定当前程序是否被调试;若所述当前程序被调试,则在编写的所述while循环函数中调用Windows系统的应用程序编程接口API中的系统内存分配函数malloc分配内存;通过调用所述API中的rand函数生成所述随机数据;根据所述for循环函数将所述随机数据插入所述分配的内存中,直至分配内存失败以退出所述当前程序。

A method of program exit and related equipment

【技术实现步骤摘要】
一种程序退出的方法及相关设备
本专利技术涉及控制
,尤其涉及一种程序退出的方法及相关设备。
技术介绍
目前,对于Windows平台开发的一部分软件来说,需要对软件的安全性进行保护,例如一些只有注册才能使用的软件、电影游戏程序或者收费软件等,这些软件都希望能安全的运行与用户电脑上,另外,最重要的则是防止黑客破解软件中的收费功能,或者破解软件的安全算法,以避免软件开发厂商的损失。对于黑客来说,通常首先是通过对软件的破解,然后才是利用破解的漏洞来获得利益。而黑客破解软件则是先通过使用一些调试器来调试程序,从而弄清楚软件的安全策略以及实现原理。因此,对于任何客户端软件来说,检测当前客户端程序是否有被调试是比较重要的,能阻止黑客进行调试,保护软件不被破解。故,如何检测软件是否被调试,同时如何在检测到被调试后强行退出程序以防止黑客进一步调试是一个急需解决的问题。
技术实现思路
本专利技术实施例提供了一种程序退出的方法及相关设备,用于在检测到程序被调试后,强行退出程序以提高程序的安全性。本专利技术实施例的第一方面提供了一种程序退出的方法,包括:编写while循环函数,所述while循环函数用于调用系统内存分配函数持续分配内存,所述系统内存分配函数包括分配的内存的大小;编写for循环函数,所述for循环函数用于在所述分配的内存中插入随机数据;确定当前程序是否被调试;若所述当前程序被调试,则在编写的所述while循环函数中调用Windows系统的应用程序编程接口API中的系统内存分配函数malloc分配内存;通过调用所述API中的rand函数生成所述随机数据;根据所述for循环函数将所述随机数据插入所述分配的内存中,直至分配内存失败以退出所述当前程序。本专利技术实施例中,通过检测当前程序是否被调试,当检测到该当前程序确定被调试时,会不断的分配内存,当内存耗尽时,导致内存分配失败,使得在写入随机数据时导致当前程序异常,产生崩溃,起到了退出当前程序的目的,提高了程序的安全性。在一种可能的实施例中,所述确定当前程序是否被调试包括:通过调用Windows系统的应用程序编程接口API中的IsDebuggerPresent函数确定所述当前程序是否被调用;当所述IsDebuggerPresent函数的返回值为1时,确定所述当前程序被调试;当所述IsDebuggerPresent函数的返回值为0时,确定所述当前程序未被调试。本实现方式中,提供了确定当前程序是否被调度的具体方法,包括通过调用Windows系统的应用程序编程接口API中的IsDebuggerPresent函数确定所述当前程序是否被调用,若返回值为1,则表示当前程序被调试;若返回值为0,则表示当前程序未被调试;使得本专利技术实施例更加具有可操作性。在一种可能的实施例中,所述确定当前程序是否被调试包括:加载系统的ntdll.dll模块,并根据所述ntdll.dll模块获取NtQueryInformationProcess接口;调用所述NtQueryInformationProcess接口,得到所述当前进程的信息;根据所述当前进程的信息确定所述当前程序是否被调试。本实现方式中,提供了确定当前程序是否被调度的另一种方法,包括调用Windows系统的API中的NtQueryInformationProcess来获取当前进程的信息;根据所述当前进程的信息确定所述当前程序是否被调试,增加了本专利技术实施例的可实现方式。在一种可能的实施例中,所述加载系统的ntdll.dll模块,并根据所述ntdll.dll模块获取NtQueryInformationProcess接口包括:通过调用API中的LoadLibraryA函数加载所述ntdll.dll模块,所述LoadLibraryA函数的输入参数包括所述ntdll.dll模块的标识信息,所述LoadLibraryA函数的输出参数为所述ntdll.dll模块的内存地址;通过API中的GetProcAddress函数获取所述NtQueryInformationProcess接口在所述ntdll.dll模块的内存地址,所述GetProcAddress函数的输入函数包括所述ntdll.dll模块的内存地址。本专利技术实施例的第二方面提供了一种程序退出设备,包括:编写单元,用于编写while循环函数,所述while循环函数用于调用系统内存分配函数持续分配内存,所述系统内存分配函数包括分配的内存的大小;编写for循环函数,所述for循环函数用于在所述分配的内存中插入随机数据;判断单元,用于确定当前程序是否被调试;调用单元,若所述判断单元确定所述当前程序被调试,用于则在编写的所述while循环函数中调用Windows系统的应用程序编程接口API中的系统内存分配函数malloc分配内存;通过调用所述API中的rand函数生成所述随机数据;插入单元,用于根据所述for循环函数将所述随机数据插入所述分配的内存中,直至分配内存失败以退出所述当前程序。本专利技术实施例中,判断单元通过检测当前程序是否被调试,当判断单元检测到该当前程序确定被调试时,则调用单元会根据编写好的线程功能函数退出程序,提高了程序的安全性。本专利技术实施例中,通过判断单元检测当前程序是否被调试,当判断单元检测到该当前程序确定被调试时,调用单元会根据编写好的线程功能函数退出程序,提高了程序的安全性。在一种可能的实施例中,所述判断单元包括:获取模块,用于通过调用Windows系统的应用程序编程接口API中的IsDebuggerPresent函数确定所述当前程序是否被调用;确定模块,用于当所述IsDebuggerPresent函数的返回值为1时,确定所述当前程序被调试;当所述IsDebuggerPresent函数的返回值为0时,确定所述当前程序未被调试。本实现方式中,细化了判断单元如何判断当前程序是否被调试的方式,使得本专利技术实施例更加具有可操作性。在一种可能的实施例中,所述判断单元包括:所述获取模块,用于加载系统的ntdll.dll模块,并根据所述ntdll.dll模块获取NtQueryInformationProcess接口;调用所述NtQueryInformationProcess接口,得到所述当前进程的信息;所述调用模块,用于根据所述当前进程的信息确定所述当前程序是否被调试。本实现方式中,细化了判断单元如何判断当前程序是否被调试的另一种方式,增加了本专利技术实施例的可实现方式。在一种可能的实施例中,所述获取模块具体用于:通过调用API中的LoadLibraryA函数加载所述ntdll.dll模块,所述LoadLibraryA函数的输入参数包括所述ntdll.dll模块的标识信息,所述LoadLibraryA函数的输出参数为所述ntdll.dll模块的内存地址;通过API中的GetProcAddress函数获取所述NtQueryInformationProcess接口在所述ntdll.dll模块的内存地址,所述GetProcAddress函数的输入函数包括所述ntdll.dll模本文档来自技高网...

【技术保护点】
1.一种程序退出的方法,其特征在于,包括:/n编写while循环函数,所述while循环函数用于调用系统内存分配函数持续分配内存,所述系统内存分配函数包括分配的内存的大小;/n编写for循环函数,所述for循环函数用于在所述分配的内存中插入随机数据;/n确定当前程序是否被调试;/n若所述当前程序被调试,则在编写的所述while循环函数中调用Windows系统的应用程序编程接口API中的系统内存分配函数malloc分配内存;/n通过调用所述API中的rand函数生成所述随机数据;/n根据所述for循环函数将所述随机数据插入所述分配的内存中,直至分配内存失败以退出所述当前程序。/n

【技术特征摘要】
1.一种程序退出的方法,其特征在于,包括:
编写while循环函数,所述while循环函数用于调用系统内存分配函数持续分配内存,所述系统内存分配函数包括分配的内存的大小;
编写for循环函数,所述for循环函数用于在所述分配的内存中插入随机数据;
确定当前程序是否被调试;
若所述当前程序被调试,则在编写的所述while循环函数中调用Windows系统的应用程序编程接口API中的系统内存分配函数malloc分配内存;
通过调用所述API中的rand函数生成所述随机数据;
根据所述for循环函数将所述随机数据插入所述分配的内存中,直至分配内存失败以退出所述当前程序。


2.根据权利要求1所述的方法,其特征在于,所述确定当前程序是否被调试包括:
通过调用Windows系统的应用程序编程接口API中的IsDebuggerPresent函数确定所述当前程序是否被调用;
当所述IsDebuggerPresent函数的返回值为1时,确定所述当前程序被调试;
当所述IsDebuggerPresent函数的返回值为0时,确定所述当前程序未被调试。


3.根据权利要求1所述的方法,其特征在于,所述确定当前程序是否被调试包括:
加载系统的ntdll.dll模块,并根据所述ntdll.dll模块获取NtQueryInformationProcess接口;
调用所述NtQueryInformationProcess接口,得到所述当前进程的信息;
根据所述当前进程的信息确定所述当前程序是否被调试。


4.根据权利要求3所述的方法,其特征在于,所述加载系统的ntdll.dll模块,并根据所述ntdll.dll模块获取NtQueryInformationProcess接口包括:
通过调用API中的LoadLibraryA函数加载所述ntdll.dll模块,所述LoadLibraryA函数的输入参数包括所述ntdll.dll模块的标识信息,所述LoadLibraryA函数的输出参数为所述ntdll.dll模块的内存地址;
通过API中的GetProcAddress函数获取所述NtQueryInformationProcess接口在所述ntdll.dll模块的内存地址,所述GetProcAddress函数的输入函数包括所述ntdll.dll模块的内存地址。


5.一种程序退出设备,其特征在于,包括:
编写单元,用于编写while循环函数,所述while循环函数用于...

【专利技术属性】
技术研发人员:周志刚
申请(专利权)人:武汉斗鱼网络科技有限公司
类型:发明
国别省市:湖北;42

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

1