1.一种程序退出的方法,其特征在于,包括:
将加解密函数的关键数据和同步互斥锁保存到全局变量,所述加解密函数用于在进行网络协议通信时对数据进行加解密操作,所述同步互斥锁用于对所述数据进行加锁,所述关键数据为执行所述加解密函数所必需的数据;
通过调用Windows系统的应用程序编程接口API中的LoadLibraryA函数获取核心代码的内存地址;
通过调用所述API中的GetModuleInformation函数获取所述核心代码的占用内存大小,以将所述核心代码保存到所述全局变量;
确定当前程序是否被调试;
若所述当前程序被调试,则修改所述加解密函数的关键数据,通过调用循环函数占用所述同步互斥锁,并删除所述当前程序的核心代码,以退出所述当前程序。
2.根据权利要求1所述的方法,其特征在于,所述将加解密函数的关键数据和同步互斥锁保存到全局变量包括:将所述加解密函数的关键数据保存到g_kCrc32Table全局变量中;
通过调用系统API函数CreatMutex创建所述同步互斥锁;
当所述同步互斥锁被使用时,通过调用API函数WaitForSingleObject等待所述同步互斥锁;
将所述同步互斥锁保存到g_hMutex全局变量中。
3.根据权利要求1或2所述的方法,其特征在于,所述确定当前程序是否被调试包括:通过调用Windows系统的应用程序编程接口API中的IsDebuggerPresent函数确定所述当前程序是否被调用;
当所述IsDebuggerPresent函数的返回值为1时,确定所述当前程序被调试;
当所述IsDebuggerPresent函数的返回值为0时,确定所述当前程序未被调试。
4.根据权利要求1或2所述的方法,其特征在于,所述确定当前程序是否被调试包括:加载系统的ntdll .dll模 块,并 根据所述ntdll .dll模块获取NtQueryInformationProcess接口;
调用所述NtQueryInformationProcess接口,得到所述当前进程的信息;
根据所述当前进程的信息确定所述当前程序是否被调试。
5.根据权利要求4所述的方法,其特征在于,所述加载系统的ntdll.dll模块,并根据所述ntdll.dll模块获取NtQueryInformationProcess接口包括:通过调用API中的LoadLibraryA函数加载所述ntdll.dll模块,所述LoadLibraryA函数的输入参数包括所述ntdll.dll模块的标识信息,所述LoadLibraryA函数的输出参数为所述ntdll.dll模块的内存地址;
通过API中的GetProcAddress函数获取所述NtQueryInformationProcess接口在所述ntdll.dll模块的内存地址,所述GetProcAddress函数的输入函数包括所述ntdll.dll模块的内存地址。
6.一种程序退出设备,其特征在于,包括:
保存单元,用于将加解密函数的关键数据和同步互斥锁保存到全局变量,所述加解密函数用于在进行网络协议通信时对数据进行加解密操作,所述同步互斥锁用于对所述数据进行加锁,所述关键数据为执行所述加解密函数所必需的数据;
获取单元,用于通过调用Windows系统的应用程序编程接口API中的LoadLibraryA函数获取核心代码的内存地址;通过调用所述API中的GetModuleInformation函数获取所述核心代码的占用内存大小,以将所述核心代码保存到所述全局变量;
判断单元,用于确定当前程序是否被调试;
执行单元,用于若所述当前程序被调试,则修改所述加解密函数的关键数据,通过调用循环函数占用所述同步互斥锁,并删除所述当前程序的核心代码,以退出所述当前程序。
7.根据权利要求6所述的程序退出设备,其特征在于,所述保存单元包括:保存模块,用于将所述加解密函数的关键数据保存到g_kCrc32Table全局变量中;
第一调用模块,用于通过调用系统API函数CreatMutex创建所述同步互斥锁;当所述同步互斥锁被使用时,通过调用API函数WaitForSingleObject等待所述同步互斥锁;
所述保存模块还用于将所述同步互斥锁保存到g_hMutex全局变量中。
8.根据权利要求6所述的程序退出设备,其特征在于,所述获取单元包括:第二调用模块,用于通过调用Windows系统的应用程序编程接口API中的LoadLibraryA获取所述核心代码的内存地址;通过调用API中的GetModuleInformation获取所述核心代码的占用内存大小。
9.一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如权利要求1-5任意一项所述的方法。
10.一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行如权利要求1-5任意一项所述的方法。