CN111639312B - 反调试方法、装置、存储介质及电子装置 - Google Patents
反调试方法、装置、存储介质及电子装置 Download PDFInfo
- Publication number
- CN111639312B CN111639312B CN202010490794.XA CN202010490794A CN111639312B CN 111639312 B CN111639312 B CN 111639312B CN 202010490794 A CN202010490794 A CN 202010490794A CN 111639312 B CN111639312 B CN 111639312B
- Authority
- CN
- China
- Prior art keywords
- function
- target
- kernel
- target process
- callback
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 271
- 230000008569 process Effects 0.000 claims abstract description 224
- 230000006870 function Effects 0.000 claims description 317
- 230000015654 memory Effects 0.000 claims description 18
- 238000004590 computer program Methods 0.000 claims description 12
- 230000009191 jumping Effects 0.000 claims description 11
- 238000001514 detection method Methods 0.000 description 20
- 238000010586 diagram Methods 0.000 description 12
- 230000005540 biological transmission Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种反调试方法、装置、存储介质及电子装置。该方法包括:在操作系统的第一内核函数中,配置目标进程从内核态返回用户态时所调用的回调函数的函数地址;在内核态返回至用户态的情况下,通过函数地址进入回调函数;在执行回调函数的过程中,在通过目标进程调用第二内核函数,且检测到目标进程附加有调试器的情况下,结束目标进程。本发明能够提高反调试的成功率。
Description
技术领域
本发明涉及计算机领域,具体而言,涉及一种反调试方法、装置、存储介质及电子装置。
背景技术
目前,常用的反调试方法往往是利用inline hook函数,或者利用DbgBreakPoint函数、DbgUiRemoteBreakin函数与DbgUserBreakPoint函数获得调试器的执行时机,用以及时退出调试器附加进程来实现反调试,提高程序的安全性。
在实践中发现,攻击者往往可以利用PCHunter这种现有的Windows系统信息查看工具来感知并摘除inline hook函数,在这种情况下会使得inline hook函数无法获取到调试器的执行时机。又或者,攻击者往往可以自实现调试器的附加流程,从而不必使用操作系统中的DbgBreakPoint函数、DbgUiRemoteBreakin函数与DbgUserBreakPoint函数,在这种情况下会使得DbgBreakPoint函数、DbgUiRemoteBreakin函数与DbgUserBreakPoint函数无法获得调试器的执行时机。可见,当前的反调试方法存在着成功率低的问题。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种反调试方法、装置、存储介质及电子装置,以至少能够提高反调试的成功率。
根据本发明实施例的一个方面,提供了一种反调试方法,包括:在操作系统的第一内核函数中,配置目标进程从内核态返回用户态时所调用的回调函数的函数地址;在上述内核态返回至上述用户态的情况下,通过上述函数地址进入上述回调函数;在执行上述回调函数的过程中,在通过上述目标进程调用第二内核函数,且检测到上述目标进程附加有调试器的情况下,结束上述目标进程。
根据本发明实施例的另一方面,还提供了一种反调试装置,包括:配置单元,用于在操作系统的第一内核函数中,配置目标进程从内核态返回用户态时所调用的回调函数的函数地址;进入单元,用于在上述内核态返回至上述用户态的情况下,通过上述函数地址进入上述回调函数;结束单元,用于在执行上述回调函数的过程中,在通过上述目标进程调用第二内核函数,且检测到上述目标进程附加有调试器的情况下,结束上述目标进程。
根据本发明实施例的又一方面,还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述反调试方法。
根据本发明实施例的又一方面,还提供了一种电子装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,上述处理器通过计算机程序执行上述的反调试方法。
在本发明实施例中,通过在操作系统的第一内核函数中,配置目标进程从内核态返回用户态时所调用的回调函数的函数地址,使得在从内核态返回用户态的情况下,可以通过函数地址进入回调函数,在执行回调函数的过程中,如果目标进程调用第二内核函数并且检测到目标进程附加有调试器的情况下,可以结束目标进程。在目标进程附加调试器的过程中,能够获取目标进程调用第二内核函数前的执行时机,从而实现反调试。这一过程由于未使用inline hook函数,因而不会被PCHunter这种现有的Windows系统信息查看工具来感知并摘除,并且即使在攻击者自实现调试器的附加流程的情况下,也需要目标进程调用第二内核函数,而本发明实施例可以获取目标进程调用第二内核函数前的执行时机,从而能够实现反调试,进而实现提高反调试成功率。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种可选的反调试系统的示意图;
图2是根据本发明实施例的一种可选的反调试方法的流程示意图;
图3是根据本发明实施例的另一种可选的反调试方法的流程示意图;
图4是根据本发明实施例的一种可选的调试器附加的示意图;
图5是根据本发明实施例的另一种可选的反调试方法的流程示意图;
图6是根据本发明实施例的一种可选的进程环境块的目标标志位的检测示意图;
图7是根据本发明实施例的一种可选的反调试装置的示意图;
图8是根据本发明实施例的另一种可选的反调试装置的示意图;
图9是根据本发明实施例的另一种可选的反调试装置的示意图;
图10是根据本发明实施例的一种可选的电子装置的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本发明实施例的一个方面,提供了一种反调试方法,可选地,作为一种可选的实施方式,上述反调试方法可以但不限于应用于如图1所示的反调试系统中,如图1所示,在该反调试系统中,攻击者可以通过将调试器附加到被调试程序中,来调试被调试程序,从而实现程序篡改等恶意攻击操作。具体的,在调试器附加到被调试程序的过程中,需要利用DebugActiveProcess函数103将调试器附加到被调试程序,具体的,在DebugActiveProcess函数103执行的过程中,可以包括以下具体执行步骤:利用NtCreateDebugObject函数104进行初始化操作,在进行初始化操作之后,利用NtDebugActiveProcess函数105挂起被调试程序,也即是挂起目标进程,其中,目标进程是执行被调试程序的过程。在挂起目标进程之后,可以利用CreateRemoteThread函数106创建新线程。进一步的,利用CreateRemoteThread函数106创建新线程可以包括:利用内核态的内核函数PspCreateThread函数112调用LdrInitialize Thunk函数109,在执行LdrInitialize Thunk函数109之后,通过NtContinue函数110返回PspCreateThread函数112。在通过NtContinue函数110返回PspCreateThread函数112之后,线程开始执行,PspCreateThread函数112会调用DbgBreakPoint函数、DbgUiRemoteBreakin函数或者DbgUserBreakPoint函数或者调试器自定义断点函数111引发EXCEPTION_BREAKPOINT异常。在该线程执行后引发EXCEPTION_BREAKPOINT异常后,调试器开始执行反反调试107,并且调试器处理FIRST_EXCEPTION后被调试进程恢复执行108。在这一过程中,从被调试程序被挂起直到处理完FIRST_EXCEPTION即为调试器附加的过程。
在本发明实施例中,被调试程序也即是本发明实施例中的程序101,本发明实施例中的程序101通过调用NtSetInformationProcess函数102实现注册InstrumentationCallback域,使得目标进程在从内核态返回用户态的情况下,返回回调函数,在回调函数中可以获取调试器附加的执行时机,并且获取到的执行时机是在执行LdrIntialize Thunk之前,此时可以采用PEB标志位检测等检测方式来判断是否存在调试器附加,如果存在,则退出目标进程,实现反调试过程。采用本发明实施例中的反调试方法,不需要对被调试程序进行额外的代码添加,只需要调用内核态中的NtSetInformationProcess函数102,实现注册InstrumentationCallback域。从而使得现有的PCHunter等工具无法感知到这种反调试方法,增加了反调试的成功率。此外,本方案是从内核态返回用户态的情况下,首先返回本发明实施例中的回调函数,利用该回调函数判断当前的目标进程是否调用LdrIntialize Thunk,如果判断出目标进程调用LdrIntializeThunk,则检测是否存在调试器附加,可见,这种方式确定出的调试器附加的时机为执行目标进程是否调用LdrIntialize Thunk函数之前,此时利用PEB标志位检测来确定是否存在调试器附加,准确度更高。
可选地,作为一种可选的实施方式,如图2所示,上述反调试方法包括:
S201,在操作系统的第一内核函数中,配置目标进程从内核态返回用户态时所调用的回调函数的函数地址;
S202,在内核态返回至用户态的情况下,通过函数地址进入回调函数;
S203,在执行回调函数的过程中,在通过目标进程调用第二内核函数,且检测到目标进程附加有调试器的情况下,结束目标进程。
本发明实施例中,操作系统可以包括但不限于Windows操作系统等,其中,Windows操作系统中可以包括多个函数,第一内核函数可以为操作系统中用于设置进程属性的内核函数,例如第一内核函数可以为NtSetInformationProcess函数,在第一内核函数中,能够配置目标进程从内核态返回用户态所调用的回调函数的函数地址,从而在目标进程从内核态返回用户态的情况下,会进入本发明实施例中的回调函数,如果目标进程从内核态返回用户态之后需要调用第二内核函数等函数,则需要通过进入本发明实施例中的回调函数去调用第二内核函数等函数。需要说明的是,内核态和用户态为中央处理器的不同工作状态,内核态指的是可以无限制地访问操作系统和外部设备的工作状态,用户态指的是限制执行对于操作系统造成安全隐患的操作的工作状态。此时,目标进程从PspCreateThread函数进入回调函数,在执行回调函数的过程中,可以在回调函数中执行判断逻辑,来判断目标进程从PspCreateThread函数需要调用的函数是否为第二内核函数,如果是,则进一步判断目标进程是否附加有调试器。在检测到目标进程附加有调试器的情况下,结束目标进程,完成反调试过程。其中,第二内核函数可以为创建新线程之后的入口函数,例如可以为LdrIntialize Thunk函数等。如果攻击者需要将调试器附加到被调试程序来对被调试程序进行攻击,则需要先将被调试程序挂起,再创建新线程,此时会调用第二内核函数。本发明实施例可以在执行回调函数的过程中,在调用第二内核函数的情况下,检测目标进程是否附加有调试器,如果目标进程附加有调试器,则结束目标进程实现反调试。
通过实施上述反调试方法,通过在操作系统的第一内核函数中,配置目标进程从内核态返回用户态时所调用的回调函数的函数地址,使得在从内核态返回用户态的情况下,可以通过函数地址进入回调函数,在执行回调函数的过程中,如果目标进程调用第二内核函数并且检测到目标进程附加有调试器的情况下,可以结束目标进程。在目标进程附加调试器的过程中,能够获取目标进程调用第二内核函数前的执行时机,从而实现反调试。由于未使用inline hook函数,通过PCHunter这种现有的Windows系统信息查看工具来感知并摘除,并且即使在攻击者自实现调试器的附加流程的情况下,也需要目标进程调用第二内核函数,而本发明实施例可以获取目标进程调用第二内核函数前的执行时机,从而能够实现反调试,进而实现提高反调试成功率。
可选地,作为一种可选的实施方式,如图3所示,上述反调试方法包括:
S301,将操作系统的第一内核函数的目标参数的值设置为目标数值,以使目标参数对应的信息类型设置为地址配置类型;
S302,在目标参数的值设置为目标数值的情况下,将目标进程从内核态返回用户态时所调用的函数地址配置为回调函数的函数地址;
S303,在内核态返回至用户态的情况下,通过函数地址进入回调函数;
S304,利用回调函数的栈空间保存寄存器,并控制栈空间的栈顶指针对齐至目标字节;
S305,在执行回调函数的过程中,获取目标进程调用的目标函数,在目标函数不为第二内核函数的情况下,从回调函数跳转至目标进程调用的目标函数;
S306,在目标函数为第二内核函数的情况下,获取进程环境块中的目标标志位;
S307,在目标标志位的数值为第一数值的情况下,确定目标进程附加有调试器,并结束目标进程;
S308,在目标标志位为第二数值的情况下,从回调函数跳转至目标进程调用的目标函数。
本发明实施例中,在操作系统的第一内核函数中,配置目标进程从内核态返回用户态时所调用的回调函数的函数地址的方式具体可以为:将操作系统的第一内核函数的目标参数的值设置为目标数值,以使目标参数对应的信息类型设置为地址配置类型;在目标参数的值设置为目标数值的情况下,将目标进程从内核态返回用户态时所调用的函数地址配置为回调函数的函数地址。其中,第一内核函数的目标参数可以为用于设置对数据处理的信息类型的参数,例如,在第一内核函数为NtSetInformationProcess函数的情况下,第一内核函数的目标参数可以为ProcessInformationClass。目标数值可以为预先设置的数值,以使目标参数的值设置为目标数值的情况下,能够实现为该目标数值的目标参数对应的数据处理的信息类型。例如,在目标参数为ProcessInformationClass的情况下,目标数值可以为40,也即是,将NtSetInformationProcess函数中的ProcessInformationClass的值设置为40,来使得ProcessInformationClass对应的信息类型设置为地址配置类型。此外,如果将NtSetInformationProcess函数中的ProcessInformationClass的值设置为7,使得ProcessInformationClass对应的信息类型设置为程序被调试的接口配置类型;如果将NtSetInformationProcess函数中的ProcessInformationClass的值设置为0,使得ProcessInformationClass对应的信息类型设置为进程环境块位置配置类型等,本发明实施例中不做限定。进一步的,在将目标参数的值设置为目标数值的情况下,可以将目标进程从内核态返回用户态时所调用的函数地址配置为回调函数的函数地址。
进一步地,在将目标进程从内核态返回用户态时所调用的函数地址配置为回调函数的函数地址之后,在内核态返回至用户态的情况下,会通过该函数地址进入回调函数。为了使得回调函数的栈空间的字节符合操作系统的标准,需要利用回调函数的栈空间保存寄存器,并控制栈空间的栈顶指针对齐至目标字节。其中,目标字节为符合操作系统的标准的字节。例如,在操作系统为64位的windows系统的情况下,目标字节即为符合64位的windows系统的16字节。这一过程能够通过字节对齐减少进程异常的情况出现的概率,从而提高目标进程运行的可靠性。
再进一步地,在实现字节对齐之后,在执行回调函数的过程中,可以获取目标进程调用的目标函数,目标函数可以包括但不限于第二内核函数以及其他函数。在目标函数不为第二内核函数的情况下,说明此时不存在调试器附加至目标进程,可以直接从回调函数跳转至目标进程调用的目标函数,以完成相应的指令操作。在目标函数为第二内核函数的情况下,可以获取进程环境块中的目标标志位,目标标志位为用于指示是否存在调试器附加的标志位,例如目标标志位可以为PEB中的BeingDebugged标志位。进一步的,目标标志位的数值可以为第一数值或者第二数值,在目标标志位的数值为第一数值的情况下,确定目标进程附加有调试器,可以结束目标进程,在目标标志位的数值为第二数值的情况下,确定目标进程没有附加调试器,此时可以从回调函数跳转至目标进程调用的目标函数。例如,在目标标志位为PEB中的BeingDebugged标志位的情况下,第一数值可以为为1,第二数值可以为0,在PEB中的BeingDebugged标志位的数值为1的情况下,确定目标进程附加有调试器,可以结束目标进程,在PEB中的BeingDebugged标志位的数值为0的情况下,确定目标进程没有附加调试器,可以从回调函数跳转至目标进程调用的目标函数。
作为一种可选的实施方式,在执行回调函数的过程中,获取目标进程调用的目标函数,在目标函数为第二内核函数的情况下,还可以执行以下步骤:
S1,利用操作系统中的目标应用程序接口函数检测目标进程是否附加有调试器,获取检测结果;
S2,在检测结果指示目标进程附加有调试器的情况下,结束目标进程;
S3,在检测结果指示目标进程未附加有调试器的情况下,从回调函数跳转至第二内核函数。
本发明实施例中,目标应用程序接口函数可以为操作系统中用于检测调试器附加的函数,例如可以包括但不限于IsDebuggerPresent函数和CheckRemoteDebuggerPresent函数等,本发明实施例中不做限定。并且利用目标应用程序接口函数获取到的检测结果可以为不同的数值,不同的数值对应不同的检测结果。这一过程可以利用应用程序接口函数检测调试器附加,从而除了使用进程环境块标志位的检测方法来检测是否存在调试器附加,还可以使用这种方法实现调试器附加的检测,提高了检测方法的多样性。
请参阅图4,图4是本发明实施例公开的一种调试器附加的示意图,如图4所示,在需要将调试器附加到被调试程序的情况下,需要利用DebugActiveProcess函数401将调试器附加到被调试程序,以此使得调试器能够附加到被调试程序上,实现对被调试程序的调试,从而达到攻击被调试程序的目的。具体的,在DebugActiveProcess函数401执行的过程中,可以包括以下具体执行步骤:利用NtCreateDebugObject函数402进行初始化操作,例如在NtCreateDebugObject函数402执行的过程中,可以执行创建调试对象、初始化调试事件链表等初始化操作。在进行初始化操作之后,利用NtDebugActiveProcess函数403挂起被调试程序,也即是挂起目标进程,其中,目标进程是执行被调试程序的过程,在目标进程被挂起的情况下,目标进程将暂停执行。并且在挂起目标进程之后,还可以利用CreateRemoteThread函数404创建新线程。其中,CreateRemoteThread函数404是操作系统中的应用程序接口函数,可以用于创建在其它进程地址空间中运行的线程。在本发明实施例中,CreateRemoteThread函数404可以用于在调试器自定义断点函数中创建新线程,调试器自定义断点函数为调试器中会引发异常断点的函数。具体的,CreateRemoteThread函数404创建的新线程会在内核态的内核函数PspCreateThread函数407中完成创建。在内核函数PspCreateThread函数407中完成创建之后,内核函数PspCreateThread函数407会调用LdrInitialize Thunk函数408,在执行LdrInitialize Thunk函数408之后,通过NtContinue函数409返回PspCreateThread函数407。其中,NtContinue函数409为用于返回内核态的跳板函数。在在通过NtContinue函数409返回PspCreateThread函数407之后,从创建的新线程的起始位置开始执行程序。在从创建的新线程的起始位置开始执行程序的过程中,该新线程会通过DbgBreakPoint函数、DbgUiRemoteBreakin函数或者DbgUserBreakPoint函数或者调试器自定义断点函数410引发异常,在该线程执行后引发EXCEPTION_BREAKPOINT异常之后,调试器开始执行反反调试405,并且调试器处理FIRST_EXCEPTION之后被调试进程恢复执行406。在这一过程中,从被调试程序被挂起直到处理完FIRST_EXCEPTION即为调试器附加的过程。
请参阅图5,图5是本发明实施例公开的另一种反调试方法的流程示意图,如图5所示,可以执行以下步骤:
S501,注册InstrumentationCallback;
S502,在执行回调函数的过程中,保存寄存器;
S503,对齐栈到16字节对齐;
S504,判断目标进程是否调用LdrInitialize Thunk,如果是,执行步骤S505,如果否,执行步骤S506;
S505,判断是否目标进程存在调试器附加,如果是,执行步骤S507,如果否,执行步骤S506;
S506,跳转至目标进程调用的目标函数;
S507,上报服务器并退出目标进程。
本发明实施例中,可以首先利用NtSetInformationProcess函数注册InstrumentationCallback域,具体的,可以在NtSetInformationProcess函数中将ProcessInformationClass的值设置为40,从而实现注册InstrumentationCallback域。在注册InstrumentationCallback域之后,可以在从内核态返回用户态的情况下,执行回调函数。具体的,执行回调函数的流程可以包括:保存寄存器,并对齐栈到16字节;判断目标进程是否调用LdrInitialize Thunk;如果是,判断是否目标进程存在调试器附加,如果是,上报服务器并退出目标进程。其中,通过在回调函数中保存寄存器以及对齐栈到16字节能够实现使得处理后的数据符合操作系统的标准,例如,使得处理之后的数据符合64位的windows操作系统的标准。在判断出目标进程未调用LdrInitialize Thunk的情况下,确认不存在调试器附加,此时可以跳转至目标进程调用的目标函数。在判断出目标进程调用LdrInitialize Thunk的情况下,有可能存在调试器附加的情况,此时可以进一步判断目标进程是否存在调试器附加,具体的,用于判断目标进程是否存在调试器附加的方法可以包括但不限于进程环境块标志位检测方法、应用程序接口函数检测方法等,本发明实施例中不做限定。由于此时获取到的目标进程的执行时机是在目标进程未执行LdrInitializeThunk函数的时机,从而在该执行时机利用进程环境块标志位检测方法、应用程序接口函数检测方法等方法获取到的检测结果不会被反反调试干扰,获得到的检测结果更加准确,提高了反调试的成功率。
请参阅图6,图6是本发明实施例公开的一种进程环境块的目标标志位的检测示意图,如图6所示,可以执行以下步骤
S601,获取PEB;
S602,将PEB的BeingDebugged标志位与第一数值和第二数值进行比较;
S603,在PEB的BeingDebugged标志位为第一数值的情况下,确定检测到调试器附加;
S604,在PEB的BeingDebugged标志位为第二数值的情况下,确定未检测到调试器附加。
本发明实施例中,利用进程环境块标志位检测的方法来判断是否存在调试器附加,可以首先获取进程环境块(Process Environment Block,PEB),其中,PEB可以包括但不限于映像加载器、堆管理器等操作系统信息,还可以包括进程信息。在PEB中具有BeingDebugged标志位,BeingDebugged标志位用于表示目标进程是否被调试器附加。在目标进程被调试器附加的情况下,操作系统会自动将BeingDebugged标志位的数值设置为第一数值,在目标进程没有被调试器附加的情况下,操作系统会将BeingDebugged标志位的数值默认设置为第二数值。其中,第一数值可以为1,第二数值可以为0。也即是,通过获取PEB中具有的BeingDebugged标志位,可以根据BeingDebugged标志位的数值来判断目标进程是否被调试器附加。在实践中发现,如果附加到目标进程的调试器具有反反调试功能,可能存在调试器通过反反调试功能将PEB中的BeingDebugged标志位进行篡改的可能。例如在目标进程被调试器附加的情况下,操作系统会自动将BeingDebugged标志位设置为1,但是调试器的反反调试功能可以对BeingDebugged标志位进行篡改,将其数值改为0。因此,在利用PEB标志位检测调试器附加的情况下,如果检测的时机是在调试器执行反反调试之后,则会导致获取到的BeingDebugged标志位数值不准确,从而导致根据PEB标志位检测调试器附加的准确率低的问题。针对这一问题,本发明实施例中获取到的执行时机是检测到目标进程调用LdrInitialize Thunk,尚未执行LdrInitialize Thunk函数的时机,此时调试器还未进入反反调试阶段,此时采用这种PEB标志位检测方法能够准确地获得是否存在调试器附加的检测结果,从而提高了检测调试器附加的准确率。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
根据本发明实施例的另一个方面,还提供了一种用于实施上述反调试方法的反调试装置。如图7所示,该装置包括:
配置单元701,用于在操作系统的第一内核函数中,配置目标进程从内核态返回用户态时所调用的回调函数的函数地址;
进入单元702,用于在内核态返回至用户态的情况下,通过函数地址进入回调函数;
结束单元703,用于在执行回调函数的过程中,在通过目标进程调用第二内核函数,且检测到目标进程附加有调试器的情况下,结束目标进程。
通过实施上述反调试装置,通过在操作系统的第一内核函数中,配置目标进程从内核态返回用户态时所调用的回调函数的函数地址,使得在从内核态返回用户态的情况下,可以通过函数地址进入回调函数,在执行回调函数的过程中,如果目标进程调用第二内核函数并且检测到目标进程附加有调试器的情况下,可以结束目标进程。在目标进程附加调试器的过程中,能够获取目标进程调用第二内核函数前的执行时机,从而实现反调试。由于未使用inline hook函数,通过PCHunter这种现有的Windows系统信息查看工具来感知并摘除,并且即使在攻击者自实现调试器的附加流程的情况下,也需要目标进程调用第二内核函数,而本发明实施例可以获取目标进程调用第二内核函数前的执行时机,从而能够实现反调试,进而实现提高反调试成功率。
作为另一种可选的实施方式,本发明实施例提供了另一种用于实施上述反调试方法的反调试装置,如图8所示,图8所示的反调试装置是在图7所示的反调试装置的基础上改进得到的,与图7所示的反调试装置相比,在图8所示的反调试装置中,配置单元701可以包括:
设置子单元7011,用于将操作系统的第一内核函数的目标参数的值设置为目标数值,以使目标参数对应的信息类型设置为地址配置类型;
配置子单元7012,用于在目标参数的值设置为目标数值的情况下,将目标进程从内核态返回用户态时所调用的函数地址配置为回调函数的函数地址。
可选的,在图8所示的反调试装置中,还可以包括:
第一获取单元704,用于在执行回调函数的过程中,获取目标进程调用的目标函数;
第一跳转单元705,用于在目标函数不为第二内核函数的情况下,从回调函数跳转至目标进程调用的目标函数。
进一步可选的,在图8所示的反调试装置中,还可以包括:
第二获取单元706,用于在目标函数为第二内核函数的情况下,获取进程环境块中的目标标志位;
确定单元707,用于在目标标志位的数值为第一数值的情况下,确定目标进程附加有调试器,并结束目标进程。
作为另一种可选的实施方式,本发明实施例提供了另一种用于实施上述反调试方法的反调试装置,如图9所示,图9所示的反调试装置是在图8所示的反调试装置的基础上改进得到的,与图8所示的反调试装置相比,在图9所示的反调试装置中,还可以包括:
第二跳转单元708,用于在目标标志位为第二数值的情况下,从回调函数跳转至目标进程调用的目标函数。
可选的,图9所示的反调试装置还可以包括:
控制单元709,用于在通过函数地址进入回调函数之后,在利用返回地址返回至回调函数之后,利用回调函数的栈空间保存寄存器,并控制栈空间的栈顶指针对齐至目标字节。
根据本发明实施例的又一个方面,还提供了一种用于实施上述反调试方法的电子装置,如图10所示,该电子装置包括存储器1002和处理器1004,该存储器1002中存储有计算机程序,该处理器1004被设置为通过计算机程序执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述电子装置可以位于计算机网络的多个网络设备中的至少一个网络设备。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,在操作系统的第一内核函数中,配置目标进程从内核态返回用户态时所调用的回调函数的函数地址;
S2,在内核态返回至用户态的情况下,通过函数地址进入回调函数;
S3,在执行回调函数的过程中,在通过目标进程调用第二内核函数,且检测到目标进程附加有调试器的情况下,结束目标进程。
可选地,本领域普通技术人员可以理解,图10所示的结构仅为示意,电子装置也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(Mobile Internet Devices,MID)、PAD等终端设备。图10其并不对上述电子装置的结构造成限定。例如,电子装置还可包括比图10中所示更多或者更少的组件(如网络接口等),或者具有与图10所示不同的配置。
其中,存储器1002可用于存储软件程序以及模块,如本发明实施例中的反调试方法和装置对应的程序指令/模块,处理器1004通过运行存储在存储器1002内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的反调试方法。存储器1002可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器1002可进一步包括相对于处理器1004远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。其中,存储器1002具体可以但不限于用于存储操作指令等信息。作为一种示例,如图10所示,上述存储器1002中可以但不限于包括上述反调试装置中的配置单元701、进入单元702和结束单元703。此外,还可以包括但不限于上述反调试装置中的其他模块单元,本示例中不再赘述。
可选地,上述的传输装置1006用于经由一个网络接收或者发送数据。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置1006包括一个网络适配器(Network Interface Controller,NIC),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置1006为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
此外,上述电子装置还包括:和连接总线1008,用于连接上述电子装置中的各个模块部件。
根据本发明的实施例的又一方面,还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S1,在操作系统的第一内核函数中,配置目标进程从内核态返回用户态时所调用的回调函数的函数地址;
S2,在内核态返回至用户态的情况下,通过函数地址进入回调函数;
S3,在执行回调函数的过程中,在通过目标进程调用第二内核函数,且检测到目标进程附加有调试器的情况下,结束目标进程。
可选地,在本实施例中,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(Random Access Memory,RAM)、磁盘或光盘等。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (14)
1.一种反调试方法,其特征在于,包括:
在操作系统的第一内核函数中,配置目标进程从内核态返回用户态时所调用的回调函数的函数地址;
在所述内核态返回至所述用户态的情况下,通过所述函数地址进入所述回调函数;
在执行所述回调函数的过程中,在通过所述目标进程调用第二内核函数,且检测到所述目标进程附加有调试器的情况下,结束所述目标进程。
2.根据权利要求1所述的方法,其特征在于,所述在操作系统的第一内核函数中,配置目标进程从内核态返回用户态时所调用的回调函数的函数地址,包括:
将所述操作系统的所述第一内核函数的目标参数的值设置为目标数值,以使所述目标参数对应的信息类型设置为地址配置类型;
在所述目标参数的值设置为所述目标数值的情况下,将所述目标进程从所述内核态返回所述用户态时所调用的函数地址配置为所述回调函数的函数地址。
3.根据权利要求1所述的方法,其特征在于,在执行所述回调函数的过程中,还包括:
获取所述目标进程调用的目标函数;
在所述目标函数不为所述第二内核函数的情况下,从所述回调函数跳转至所述目标进程调用的所述目标函数。
4.根据权利要求3所述的方法,其特征在于,在所述获取所述目标进程调用的目标函数之后,还包括:
在所述目标函数为所述第二内核函数的情况下,获取进程环境块中的目标标志位;
在所述目标标志位的数值为第一数值的情况下,确定所述目标进程附加有调试器,并结束所述目标进程。
5.根据权利要求4所述的方法,其特征在于,在所述获取进程环境块中的目标标志位之后,还包括:
在所述目标标志位为第二数值的情况下,从所述回调函数跳转至所述目标进程调用的所述目标函数。
6.根据权利要求1至5任一项所述的方法,其特征在于,在通过所述函数地址进入所述回调函数之后,还包括:
利用所述回调函数的栈空间保存寄存器,并控制所述栈空间的栈顶指针对齐至目标字节。
7.一种反调试装置,其特征在于,包括:
配置单元,用于在操作系统的第一内核函数中,配置目标进程从内核态返回用户态时所调用的回调函数的函数地址;
进入单元,用于在所述内核态返回至所述用户态的情况下,通过所述函数地址进入所述回调函数;
结束单元,用于在执行所述回调函数的过程中,在通过所述目标进程调用第二内核函数,且检测到所述目标进程附加有调试器的情况下,结束所述目标进程。
8.根据权利要求7所述的装置,其特征在于,所述配置单元包括:
设置子单元,用于将所述操作系统的所述第一内核函数的目标参数的值设置为目标数值,以使所述目标参数对应的信息类型设置为地址配置类型;
配置子单元,用于在所述目标参数的值设置为所述目标数值的情况下,将所述目标进程从所述内核态返回所述用户态时所调用的函数地址配置为所述回调函数的函数地址。
9.根据权利要求7所述的装置,其特征在于,所述反调试装置还包括:
第一获取单元,用于在执行所述回调函数的过程中,获取所述目标进程调用的目标函数;
第一跳转单元,用于在所述目标函数不为所述第二内核函数的情况下,从所述回调函数跳转至所述目标进程调用的所述目标函数。
10.根据权利要求9所述的装置,其特征在于,所述反调试装置还包括:
第二获取单元,用于在所述目标函数为所述第二内核函数的情况下,获取进程环境块中的目标标志位;
确定单元,用于在所述目标标志位的数值为第一数值的情况下,确定所述目标进程附加有调试器,并结束所述目标进程。
11.根据权利要求10所述的装置,其特征在于,所述反调试装置还包括:
第二跳转单元,用于在所述目标标志位为第二数值的情况下,从所述回调函数跳转至所述目标进程调用的所述目标函数。
12.根据权利要求7至11任一项所述的装置,其特征在于,所述反调试装置还包括:
控制单元,用于在通过所述函数地址进入所述回调函数之后,利用所述回调函数的栈空间保存寄存器,并控制所述栈空间的栈顶指针对齐至目标字节。
13.一种计算机可读的存储介质,所述存储介质包括存储的程序,其中,所述程序运行时执行上述权利要求1至6任一项中所述的方法。
14.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为通过所述计算机程序执行所述权利要求1至6任一项中所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010490794.XA CN111639312B (zh) | 2020-06-02 | 2020-06-02 | 反调试方法、装置、存储介质及电子装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010490794.XA CN111639312B (zh) | 2020-06-02 | 2020-06-02 | 反调试方法、装置、存储介质及电子装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111639312A CN111639312A (zh) | 2020-09-08 |
CN111639312B true CN111639312B (zh) | 2023-04-14 |
Family
ID=72331377
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010490794.XA Active CN111639312B (zh) | 2020-06-02 | 2020-06-02 | 反调试方法、装置、存储介质及电子装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111639312B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112948241B (zh) * | 2021-02-09 | 2024-02-06 | 北京奇艺世纪科技有限公司 | 应用程序的反调试方法、装置、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105224454A (zh) * | 2015-09-25 | 2016-01-06 | 华为技术有限公司 | 一种调试方法、多核处理器和调试设备 |
CN107590388A (zh) * | 2017-09-12 | 2018-01-16 | 南方电网科学研究院有限责任公司 | 恶意代码检测方法和装置 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101446918B (zh) * | 2008-12-10 | 2011-12-28 | 中兴通讯股份有限公司 | 一种实现用户态调试器调试单个函数的方法及系统 |
CN102346708B (zh) * | 2010-08-03 | 2014-07-16 | 中兴通讯股份有限公司 | 一种调试器及其调试方法 |
EP2831800B1 (en) * | 2012-03-26 | 2020-05-06 | Irdeto B.V. | Method for protecting data |
CN103345602B (zh) * | 2013-06-14 | 2015-08-19 | 腾讯科技(深圳)有限公司 | 一种客户端代码完整性检测方法、装置和系统 |
KR101519845B1 (ko) * | 2013-11-14 | 2015-05-13 | (주)잉카엔트웍스 | 안티디버깅 방법 |
CN109101416B (zh) * | 2014-09-28 | 2022-01-14 | 华为技术有限公司 | 一种内核故障注入方法及电子设备 |
CN109145534B (zh) * | 2018-07-24 | 2022-11-11 | 上海交通大学 | 针对软件虚拟机保护的反混淆系统及方法 |
CN110046479B (zh) * | 2019-03-21 | 2023-02-28 | 腾讯科技(深圳)有限公司 | 一种基于安卓操作系统的链接库文件反调试方法及装置 |
CN112231198B (zh) * | 2019-07-15 | 2024-04-12 | 腾讯科技(深圳)有限公司 | 一种恶意进程调试方法、装置、电子设备及介质 |
-
2020
- 2020-06-02 CN CN202010490794.XA patent/CN111639312B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105224454A (zh) * | 2015-09-25 | 2016-01-06 | 华为技术有限公司 | 一种调试方法、多核处理器和调试设备 |
CN107590388A (zh) * | 2017-09-12 | 2018-01-16 | 南方电网科学研究院有限责任公司 | 恶意代码检测方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111639312A (zh) | 2020-09-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105843741B (zh) | 应用程序的信息处理方法和装置 | |
CN109117250B (zh) | 一种模拟器识别方法、识别设备及计算机可读介质 | |
EP2426618B1 (en) | Information device, program, method for preventing execution of unauthorized program code, and computer readable recording medium | |
CN106709325B (zh) | 一种监控程序的方法及装置 | |
CN107145782B (zh) | 一种异常应用程序的识别方法、移动终端及服务器 | |
WO2020019483A1 (zh) | 一种模拟器识别方法、识别设备及计算机可读介质 | |
CN110442502B (zh) | 一种埋点的方法、装置、设备及存储介质 | |
CN114003538B (zh) | 一种智能网卡的识别方法及智能网卡 | |
CN113742237A (zh) | 程序调试方法、装置、设备以及存储介质 | |
CN108021791B (zh) | 数据保护方法及装置 | |
CN109508546A (zh) | 一种基于软件基因的软件同源性分析方法和装置 | |
CN111639312B (zh) | 反调试方法、装置、存储介质及电子装置 | |
CN111464513A (zh) | 数据检测方法、装置、服务器及存储介质 | |
CN112231198B (zh) | 一种恶意进程调试方法、装置、电子设备及介质 | |
CN106997313B (zh) | 一种应用程序的信号处理方法、系统及终端设备 | |
CN111488576B (zh) | 一种首页篡改的保护方法、系统、电子设备及存储介质 | |
CN113626276A (zh) | 服务器hba卡型号的识别方法、系统、终端及存储介质 | |
CN106445698B (zh) | 计步数据的获取方法及装置 | |
CN112307402A (zh) | 网页组件创建方法、装置、电子设备及可读存储介质 | |
CN106682512A (zh) | 一种防止程序被修改的方法及其装置、系统 | |
CN107544896B (zh) | 一种函数调用次数的统计方法、存储介质及终端设备 | |
CN106372498A (zh) | 一种软件保护的方法和装置 | |
CN114610577A (zh) | 一种目标资源的锁定方法、装置、设备和介质 | |
CN113190491B (zh) | 一种串口信息显示方法、系统及介质 | |
CN114461471A (zh) | 一种判断pcie链路训练过程状态的方法、装置及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |