应用程序反调试的方法、装置及电子设备制造方法及图纸

技术编号:20993017 阅读:40 留言:0更新日期:2019-04-29 22:52
本申请公开了一种应用程序反调试的方法,包括:在应用程序启动时,启动线程检测应用程序所在的内存空间中是否存在断点指令;若否,则检测应用程序的核心代码所在的地址空间中是否存在断点指令;当应用程序的核心代码所在的地址空间中存在断点指令时,调用安全终止流程令应用程序停止运行。本申请所提供的技术方案,能够准确的检测应用程序被调试的状态,使得攻击者无法通过修改运行环境来避开调试检测,检测到被调试后终止应用程序的运行,能很好的保护反调试代码,进而保护应用程序的代码安全。本申请同时还提供了一种应用程序反调试的装置、电子设备及计算机可读存储介质,具有上述有益效果。

Application Debugging Method, Device and Electronic Equipment

This application discloses a method of application anti-debugging, including: when the application is started, the start thread detects whether there is a breakpoint instruction in the memory space where the application is located; if not, whether there is a breakpoint instruction in the address space where the core code of the application is located; and when there is a breakpoint instruction in the address space where the core code of the application is located, Call the secure termination process to stop the application. The technical scheme provided by this application can accurately detect the debugged status of the application, which makes it impossible for an attacker to avoid debugging detection by modifying the running environment, and terminate the operation of the application after detection of debugging. It can protect the anti-debugging code well, thus protecting the code security of the application. The application also provides a device for application program debugging, an electronic device and a computer readable storage medium, which have the above beneficial effects.

【技术实现步骤摘要】
应用程序反调试的方法、装置及电子设备
本申请涉及应用程序调试领域,具体地,涉及一种应用程序反调试的方法、装置、电子设备及计算机可读存储介质。
技术介绍
随着智能手机的普及,各类应用程序逐渐进入人们的工作、生活、娱乐,和金融支付相关的应用程序也被广使用。这也带来了安全问题,攻击者可以通过分析应用程序的代码,查找漏洞,制作病毒,窃取用户的信息。对应用程序代码的有效保护可以很好的提高应用程序的安全性,而反调试技术能有效的阻止攻击者对应用程序的调试分析,达到有效保护应用程序的目的。相关反调试技术主要是通过检查进程调试状态,运行环境调试服务的方式确定应用程序是否正在被调试攻击,然后通过结束进程或运行一段错误逻辑的方式结束应用程序,以防止应用程序被调试分析。然而,相关反调试技术不能准确的检测应用程序是否被调试,攻击者能够通过修改内核代码来改变进程调试状态为固定值,或修改调试服务的名称、使用端口号方式来规避应用程序对调试状态的检查,使反调试代码失效。因此,如何实现应用程序的反调试是本领域技术人员目前需要解决的技术问题。
技术实现思路
本申请的目的是提供应用程序反调试的方法、装置、电子设备及计算机可读存储介质,用于实现应用程序的反调试。为解决上述技术问题,本申请提供一种应用程序反调试的方法,该方法包括:在应用程序启动时,启动线程检测所述应用程序所在的内存空间中是否存在断点指令;当所述应用程序所在的内存空间中不存在所述断点指令时,检测所述应用程序的核心代码所在的地址空间中是否存在所述断点指令;当所述应用程序的核心代码所在的地址空间中存在所述断点指令时,调用安全终止流程令所述应用程序停止运行。可选的,当所述应用程序所在的内存空间中存在所述断点指令时,还包括:调用所述安全终止流程令所述应用程序停止运行。可选的,调用所述安全终止流程令所述应用程序停止运行,包括:获取所述应用程序进程的栈指针;根据所述栈指针清空栈上函数调用的信息,并向程序计数器赋随机值,以使所述应用程序运行时出现崩溃错误,进而停止运行。可选的,检测所述应用程序的核心代码所在的地址空间中是否存在所述断点指令,包括:在所述应用程序运行的逻辑中插入断点检查代码;其中,所述断点检测代码在所述应用程序运行时随着程序逻辑的执行被调用;调用所述断点检测代码检测所述应用程序的核心代码所在的地址空间是否存在所述断点指令。本申请还提供一种应用程序反调试的装置,该装置包括:第一检测模块,用于在应用程序启动时,启动线程检测所述应用程序所在的内存空间中是否存在断点指令;第二检测模块,用于当所述应用程序所在的内存空间中不存在所述断点指令时,检测所述应用程序的核心代码所在的地址空间中是否存在所述断点指令;调用模块,用于当所述应用程序的核心代码所在的地址空间中存在所述断点指令时,调用安全终止流程令所述应用程序停止运行。可选的,所述调用模块还用于当所述应用程序所在的内存空间中存在所述断点指令时,调用所述安全终止流程令所述应用程序停止运行。可选的,所述调用模块包括:获取子模块,用于获取所述应用程序进程的栈指针;赋值子模块,用于根据所述栈指针清空栈上函数调用的信息,并向程序计数器赋随机值,以使所述应用程序运行时出现崩溃错误,进而停止运行。可选的,所述第二检测模块包括:插入子模块,用于在所述应用程序运行的逻辑中插入断点检查代码;其中,所述断点检测代码在所述应用程序运行时随着程序逻辑的执行被调用;调用子模块,用于调用所述断点检测代码检测所述应用程序的核心代码所在的地址空间是否存在所述断点指令。本申请还提供一种电子设备,该电子设备包括:存储器,用于存储计算机程序;处理器,用于执行所述计算机程序时实现如上述任一项所述应用程序反调试的方法的步骤。本申请还提供一种计算机可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述应用程序反调试的方法的步骤。本申请所提供应用程序反调试的方法,包括:在应用程序启动时,启动线程检测应用程序所在的内存空间中是否存在断点指令;当应用程序所在的内存空间中不存在断点指令时,检测应用程序的核心代码所在的地址空间中是否存在断点指令;当应用程序的核心代码所在的地址空间中存在断点指令时,调用安全终止流程令应用程序停止运行。本申请所提供的技术方案,通过在应用程序启动时,启动线程检测应用程序所在的内存空间中是否存在断点指令;若不存在,则检测应用程序的核心代码所在的地址空间中是否存在断点指令;当应用程序的核心代码所在的地址空间中存在断点指令时,调用安全终止流程令应用程序停止运行,该方法能够准确的检测应用程序被调试的状态,使得攻击者无法通过修改运行环境来避开调试检测,检测到被调试后终止应用程序的运行,能很好的保护反调试代码,进而保护应用程序的代码安全。本申请同时还提供了一种应用程序反调试的装置、电子设备及计算机可读存储介质,具有上述有益效果,在此不再赘述。附图说明为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。图1为本申请实施例所提供的一种应用程序反调试的方法的流程图;图2为本申请实施例所提供的一种断点检查代码在应用进程空间中的位置示意图;图3为图1所提供的一种应用程序反调试的方法中S103的一种实际表现方式的流程图;图4为本申请实施例所提供的一种应用程序反调试的装置400的结构图;图5为本申请实施例所提供的另一种应用程序反调试的装置400的结构图;图6为本申请根据一示例性实施例示出的一种电子设备600的框图。具体实施方式本申请的核心是提供一种应用程序反调试的方法、装置、电子设备及计算机可读存储介质,用于实现应用程序的反调试。为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。请参考图1,图1为本申请实施例所提供的一种应用程序反调试的方法的流程图。其具体包括如下步骤:在步骤S101中,在应用程序启动时,启动线程检测应用程序所在的内存空间中是否存在断点指令。基于相关反调试技术不能准确的检测应用程序是否被调试,攻击者能够通过修改内核代码来改变进程调试状态为固定值,或修改调试服务的名称、使用端口号方式来规避应用程序对调试状态的检查,使反调试代码失效,本申请提供了一种应用程序反调试的方法,用于解决上述问题;断点,调试器的功能之一,可以让应用程序中断在需要的地方,从而方便其分析;当应用程序被调试时,调试器会往应用程序所在的内存空间或应用程序的核心代码所在的地址空间写入断点指令,故本申请在应用程序启动时,启动线程检测应用程序所在的内存空间中是否存在断点指令;若应用程序所在的内存空间中不存在断点指令,则进入步骤S102;可选的,当该应用程序所在的内存空间中存在断点指令时,则证明应用程序已经被调试或正在被调试本文档来自技高网...

【技术保护点】
1.一种应用程序反调试的方法,其特征在于,包括:在应用程序启动时,启动线程检测所述应用程序所在的内存空间中是否存在断点指令;当所述应用程序所在的内存空间中不存在所述断点指令时,检测所述应用程序的核心代码所在的地址空间中是否存在所述断点指令;当所述应用程序的核心代码所在的地址空间中存在所述断点指令时,调用安全终止流程令所述应用程序停止运行。

【技术特征摘要】
1.一种应用程序反调试的方法,其特征在于,包括:在应用程序启动时,启动线程检测所述应用程序所在的内存空间中是否存在断点指令;当所述应用程序所在的内存空间中不存在所述断点指令时,检测所述应用程序的核心代码所在的地址空间中是否存在所述断点指令;当所述应用程序的核心代码所在的地址空间中存在所述断点指令时,调用安全终止流程令所述应用程序停止运行。2.根据权利要求1所述的方法,其特征在于,当所述应用程序所在的内存空间中存在所述断点指令时,还包括:调用所述安全终止流程令所述应用程序停止运行。3.根据权利要求1或2所述的方法,其特征在于,调用所述安全终止流程令所述应用程序停止运行,包括:获取所述应用程序进程的栈指针;根据所述栈指针清空栈上函数调用的信息,并向程序计数器赋随机值,以使所述应用程序运行时出现崩溃错误,进而停止运行。4.根据权利要求1所述的方法,其特征在于,检测所述应用程序的核心代码所在的地址空间中是否存在所述断点指令,包括:在所述应用程序运行的逻辑中插入断点检查代码;其中,所述断点检测代码在所述应用程序运行时随着程序逻辑的执行被调用;调用所述断点检测代码检测所述应用程序的核心代码所在的地址空间是否存在所述断点指令。5.一种应用程序反调试的装置,其特征在于,包括:第一检测模块,用于在应用程序启动时,启动线程检测所述应用程序所在的内存空间中是否存在断点指令;第二检测模块,用于当所述应用程序所在的...

【专利技术属性】
技术研发人员:向波李东
申请(专利权)人:成都卫士通信息产业股份有限公司
类型:发明
国别省市:四川,51

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

1