一种单步调试的检测方法、装置和计算机可读存储介质与流程

文档序号:23589888发布日期:2021-01-08 14:25阅读:83来源:国知局
一种单步调试的检测方法、装置和计算机可读存储介质与流程

本发明涉及调试检测技术领域,特别是涉及一种单步调试的检测方法、装置和计算机可读存储介质。



背景技术:

单步调试是指程序开发中,为了找到程序的缺陷(bug),通常采用的一种调试手段,一步一步跟踪程序执行的流程,根据变量的值,找到错误的原因。

但是目前在保护个人/公司软件的场景下,存在被人恶意通过单步调试来实现软件破解的问题,该问题不解决可能会带来个人/公司收费软件被免费使用,甚至被人插入恶意代码造成社会范围内恶意软件传播的风险。

常规的反调试方法基于windows官方应用程序编程接口(applicationprogramminginterface,api)实现调试检测,但是此方法并不能检测单步调试。

可见,如何识别单步调试,是本领域技术人员需要解决的问题。



技术实现要素:

本发明实施例的目的是提供一种单步调试的检测方法、装置和计算机可读存储介质,可以识别单步调试。

为解决上述技术问题,本发明实施例提供一种单步调试的检测方法,包括:

在内存的自修改区域上预先存储自修改机器码;其中,在全速调试模式下,先执行应用程序的原始机器码,以便于将指定地址的数据缓存至预设的高速缓存器中;在单步调试模式下,先调用所述自修改机器码将所述原始机器码替换为被修改机器码,所述指定地址的数据未被缓存至所述高速缓存器中;

获取加载指定地址的数据所消耗的时钟周期;

判断所述时钟周期是否大于预设阈值;

若所述时钟周期大于预设阈值,则输出所述应用程序执行单步调试的检测结果。

可选地,在所述输出所述应用程序执行单步调试的检测结果之后还包括:

将所述应用程序的原始机器码替换为预设的被修改机器码,并将所述高速缓存器中的数据清除;其中,所述被修改机器码执行时不会将所述指定地址的数据缓存至预设的高速缓存器中。

可选地,在所述输出所述应用程序执行单步调试的检测结果之后还包括:

将所述应用程序删除。

可选地,在所述输出所述应用程序执行单步调试的检测结果之后还包括:

控制所述应用程序退出当前的单步调试流程。

可选地,在所述输出所述应用程序执行单步调试的检测结果之后还包括

向终端设备传输告警信息;其中,所述告警信息中携带有所述应用程序执行单步调试的日志数据。

本发明实施例还提供了一种单步调试的检测装置,包括存储单元、获取单元、判断单元和输出单元;

所述存储单元,用于在内存的自修改区域上预先存储自修改机器码;其中,在全速调试模式下,先执行应用程序的原始机器码,以便于将指定地址的数据缓存至预设的高速缓存器中;在单步调试模式下,先调用所述自修改机器码将所述原始机器码替换为被修改机器码,所述指定地址的数据未被缓存至所述高速缓存器中;

所述获取单元,用于获取加载指定地址的数据所消耗的时钟周期;

所述判断单元,用于判断所述时钟周期是否大于预设阈值;

所述输出单元,用于若所述时钟周期大于预设阈值,则输出所述应用程序执行单步调试的检测结果。

可选地,还包括替换单元和清除单元;

所述替换单元,用于在所述输出所述应用程序执行单步调试的检测结果之后,将所述应用程序的原始机器码替换为预设的被修改机器码;其中,所述被修改机器码执行时不会将所述指定地址的数据缓存至预设的高速缓存器中;

所述清除单元,用于将所述高速缓存器中的数据清除。

可选地,还包括删除单元;

所述删除单元,用于在所述输出所述应用程序执行单步调试的检测结果之后,将所述应用程序删除。

可选地,还包括退出单元;

所述退出单元,用于在所述输出所述应用程序执行单步调试的检测结果之后,控制所述应用程序退出当前的单步调试流程。

可选地,还包括传输单元;

所述传输单元,用于在所述输出所述应用程序执行单步调试的检测结果之后,向终端设备传输告警信息;其中,所述告警信息中携带有所述应用程序执行单步调试的日志数据。

本发明实施例还提供了一种单步调试的检测装置,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序以实现如上述任意一项所述单步调试的检测方法的步骤。

本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任意一项所述单步调试的检测方法的步骤。

由上述技术方案可以看出,在内存的自修改区域上预先存储自修改机器码;其中,在全速调试模式下,先执行应用程序的原始机器码,以便于将指定地址的数据缓存至预设的高速缓存器中;在单步调试模式下,先调用自修改机器码将原始机器码替换为被修改机器码,此时指定地址的数据不会被缓存至所述高速缓存器中。因此,在该技术方案中,可以获取加载指定地址的数据所消耗的时钟周期;判断时钟周期是否大于预设阈值。若时钟周期大于预设阈值,则说明指定地址所对应的数据未被缓存至高速缓存器中,此时可以输出应用程序执行单步调试的检测结果。依据全速调试和单步调试对指定地址所对应的数据执行操作的差异性,可以准确的识别出应用程序是否被执行了单步调试,解决了现有技术中无法实现单步调试检测的问题。

附图说明

为了更清楚地说明本发明实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种单步调试的检测方法的流程图;

图2为本发明实施例提供的一种单步调试的检测装置的结构示意图;

图3为本发明实施例提供的一种单步调试的检测装置的硬件结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本发明保护范围。

为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。

接下来,详细介绍本发明实施例所提供的一种单步调试的检测方法。图1为本发明实施例提供的一种单步调试的检测方法的流程图,该方法包括:

s101:在内存的自修改区域上预先存储自修改机器码。

在全速调试模式下,对应用程序进行调试时,首先执行的第一步操作是执行应用程序的原始机器码,从而将指定地址的数据缓存至预设的高速缓存器中。

而在单步调试模式下,由于在内存的自修改区域上存储了自修改机器码,因此cpu会先执行自修改区域上的自修改机器码,自修改机器码的作用是将原始机器码替换为被修改机器码,因此指定地址的数据不会被缓存至高速缓存器中。

以软件场景为例,在实际应用中,当个人或公司开发了收费软件时,在对该软件对应的应用程序进行检测时,往往采用的是全速调试模式。当有人员想要恶意破解软件,从而免费使用该款软件时,会通过单步调试模式实现软件的破解。

全速调试模式的流程包括执行应用程序的原始机器码,通过调用自修改机器码将原始机器码替换为被修改机器码,回滚原始机器码的执行结果,执行被修改机器码。在实际应用中,当原始机器码可以用于加载数据,当执行原始机器码时,会将指定地址的数据缓存至预设的高速缓存器中。在全速调试模式下虽然设置了回滚操作,但是回滚的是原始机器码执行前的结果,并不会回滚高速缓存器的数据。

单步调试模式的流程包括通过调用自修改机器码将原始机器码替换为被修改机器码,并执行被修改机器码。单步调试模式下不会执行应用程序的原始机器码,因此也不涉及将指定地址的数据缓存至预设的高速缓存器的操作。

s102:获取加载指定地址的数据所消耗的时钟周期。

在实际应用中,当应用程序执行全速调试时,会将指定地址的数据缓存至预设的高速缓存器中;当应用程序执行单步调试时,指定地址的数据未被缓存至高速缓存器中。

在本发明实施例中,基于全速调试和单步调试对指定地址所对应的数据执行操作的差异性,可以获取加载指定地址的数据所消耗的时钟周期,依赖于时钟周期检测应用程序是否被执行了单步调试。

s103:判断时钟周期是否大于预设阈值。

预设阈值可以根据从高速缓存器中读取数据所花费的时间设置。

当时钟周期小于或等于预设阈值时,则说明指定地址所对应的数据被缓存至了高速缓存器中,因此可以在较短时间内获取到指定地址的数据,此时应用程序上执行的操作属于正常操作流程。

当时钟周期大于预设阈值时,则说明指定地址所对应的数据未被缓存至高速缓存器中,此时可以执行s103。

s104:输出应用程序执行单步调试的检测结果。

由上述技术方案可以看出,在内存的自修改区域上预先存储自修改机器码;其中,在全速调试模式下,先执行应用程序的原始机器码,以便于将指定地址的数据缓存至预设的高速缓存器中;在单步调试模式下,先调用自修改机器码将原始机器码替换为被修改机器码,此时指定地址的数据不会被缓存至所述高速缓存器中。因此,在该技术方案中,可以获取加载指定地址的数据所消耗的时钟周期;判断时钟周期是否大于预设阈值。若时钟周期大于预设阈值,则说明指定地址所对应的数据未被缓存至高速缓存器中,此时可以输出应用程序执行单步调试的检测结果。依据全速调试和单步调试对指定地址所对应的数据执行操作的差异性,可以准确的识别出应用程序是否被执行了单步调试,解决了现有技术中无法实现单步调试检测的问题。

在本发明实施例中,在输出应用程序执行单步调试的检测结果之后,为了阻断自动化工具对应用程序的分析,可以采取死循环等操作来达到保护应用程序的目的。

在具体实现中,可以将应用程序的原始机器码替换为预设的被修改机器码,并将高速缓存器中的数据清除;其中,被修改机器码执行时不会将指定地址的数据缓存至预设的高速缓存器中。

除此之外,也可以将应用程序删除或者是控制应用程序退出当前的单步调试流程,从而起到阻断自动化工具对应用程序进行单步调试的操作。

在发现应用程序执行单步调试之后,及时阻断自动化工具对应用程序的单步调试操作,可以避免应用程序被非法破解,有效的提升了应用程序的安全性。

在本发明实施例中,为了便于管理人员及时获知应用程序当前的安全状态,在输出应用程序执行单步调试的检测结果之后,可以向终端设备传输告警信息;其中,告警信息中携带有应用程序执行单步调试的日志数据。

在本发明实施例中,通过向终端设备传输携带日志数据的告警信息,一方面可以便于管理人员及时发现应用程序被恶意破解的风险,另一方面可以便于管理人员了解自动化工具对应用程序执行的操作,从而制定出更加有效防护手段以防止自动化工具对应用程序的破解。

图2为本发明实施例提供的一种单步调试的检测装置的结构示意图,包括存储单元21、获取单元22、判断单元23和输出单元24;

存储单元21,用于在内存的自修改区域上预先存储自修改机器码;其中,在全速调试模式下,先执行应用程序的原始机器码,以便于将指定地址的数据缓存至预设的高速缓存器中;在单步调试模式下,先调用自修改机器码将原始机器码替换为被修改机器码,指定地址的数据未被缓存至所述高速缓存器中;

获取单元21,用于获取加载指定地址的数据所消耗的时钟周期;其中,当应用程序执行全速调试时,则将指定地址的数据缓存至预设的高速缓存器中;当应用程序执行单步调试时,指定地址的数据未被缓存至高速缓存器中;

判断单元22,用于判断时钟周期是否大于预设阈值;

输出单元23,用于若时钟周期大于预设阈值,则输出应用程序执行单步调试的检测结果。

可选地,还包括替换单元和清除单元;

替换单元,用于在输出应用程序执行单步调试的检测结果之后,将应用程序的原始机器码替换为预设的被修改机器码;其中,被修改机器码执行时不会将指定地址的数据缓存至预设的高速缓存器中;

清除单元,用于将高速缓存器中的数据清除。

可选地,还包括删除单元;

删除单元,用于在输出应用程序执行单步调试的检测结果之后,将应用程序删除。

可选地,还包括退出单元;

退出单元,用于在输出应用程序执行单步调试的检测结果之后,控制应用程序退出当前的单步调试流程。

可选地,还包括传输单元;

传输单元,用于在输出应用程序执行单步调试的检测结果之后,向终端设备传输告警信息;其中,告警信息中携带有应用程序执行单步调试的日志数据。

图2所对应实施例中特征的说明可以参见图1所对应实施例的相关说明,这里不再一一赘述。

由上述技术方案可以看出,在内存的自修改区域上预先存储自修改机器码;其中,在全速调试模式下,先执行应用程序的原始机器码,以便于将指定地址的数据缓存至预设的高速缓存器中;在单步调试模式下,先调用自修改机器码将原始机器码替换为被修改机器码,此时指定地址的数据不会被缓存至所述高速缓存器中。因此,在该技术方案中,可以获取加载指定地址的数据所消耗的时钟周期;判断时钟周期是否大于预设阈值。若时钟周期大于预设阈值,则说明指定地址所对应的数据未被缓存至高速缓存器中,此时可以输出应用程序执行单步调试的检测结果。依据全速调试和单步调试对指定地址所对应的数据执行操作的差异性,可以准确的识别出应用程序是否被执行了单步调试,解决了现有技术中无法实现单步调试检测的问题。

图3为本发明实施例提供的一种单步调试的检测装置30的硬件结构示意图,包括:

存储器31,用于存储计算机程序;

处理器32,用于执行计算机程序以实现如上述任意实施例所述的单步调试的检测方法的步骤。

本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述任意实施例所述的单步调试的检测方法的步骤。

以上对本发明实施例所提供的一种单步调试的检测方法、装置和计算机可读存储介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1