CN115114594A - 针对Hook调试的反调试方法、装置、电子设备及存储介质 - Google Patents

针对Hook调试的反调试方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN115114594A
CN115114594A CN202210689255.8A CN202210689255A CN115114594A CN 115114594 A CN115114594 A CN 115114594A CN 202210689255 A CN202210689255 A CN 202210689255A CN 115114594 A CN115114594 A CN 115114594A
Authority
CN
China
Prior art keywords
client
target method
debugged
hook
debugging
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.)
Pending
Application number
CN202210689255.8A
Other languages
English (en)
Inventor
秦宏伟
彭飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing 58 Information Technology Co Ltd
Original Assignee
Beijing 58 Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing 58 Information Technology Co Ltd filed Critical Beijing 58 Information Technology Co Ltd
Priority to CN202210689255.8A priority Critical patent/CN115114594A/zh
Publication of CN115114594A publication Critical patent/CN115114594A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Security & Cryptography (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明实施例提供了一种针对Hook调试的反调试方法、装置、电子设备及存储介质。该反调试方法包括:启动客户端,执行客户端的程序代码,获取程序代码中目标方法的执行时间;确定执行时间是否超过预先设置的时间阈值;在确定执行时间超过时间阈值时,获取目标方法的实时地址;比较目标方法的实时地址与目标方法在未被调试情况下的地址是否一致;当目标方法的实时地址与目标方法在未被调试情况下的地址不一致时,确定目标方法被Hook调试,退出客户端。通过本实施例的反调试方法,能够精准确定出客户端中被Hook的目标方法并退出客户端,使得攻击者无法对没有运行能力的客户端进行调试,增加了攻击者的分析和调试难度,加固了客户端的安全性能。

Description

针对Hook调试的反调试方法、装置、电子设备及存储介质
技术领域
本发明涉及计算机技术领域,尤其涉及一种针对Hook调试的反调试方法、装置、电子设备及存储介质。
背景技术
随着计算机技术的不断发展,终端设备上客户端的应用越来越广泛。而为了保证客户端的安全性能,不被攻击者轻易调试或破解,反调试是一种常用且重要的防护手段。
目前,相关技术中的反调试方法基本均被广大喜爱逆向开发人员熟知且破解,通过使用代码注入的方式就可以绕过这些反调试方法,且不会对整个反调试进程造成任何影响,从而绕过安全防护,对客户端进行调试,极大地降低了客户端的安全性能。
发明内容
本发明实施例提供一种针对Hook调试的反调试方法、装置、电子设备及存储介质,以增加攻击者的分析和调试难度,加固客户端的安全性能。
本发明实施例第一方面提供了一种针对Hook调试的反调试方法,应用于客户端,所述反调试方法包括:
启动所述客户端,执行所述客户端的程序代码,获取所述程序代码中目标方法的执行时间;
确定所述执行时间是否超过预先设置的时间阈值,所述时间阈值为所述目标方法在未被调试情况下的最长执行时间;
在确定所述执行时间超过所述时间阈值时,获取所述目标方法的实时地址,所述实时地址为所述程序代码执行过程中所述目标方法对应的可执行文件的存储位置;
比较所述目标方法的实时地址与所述目标方法在未被调试情况下的地址是否一致;
当所述目标方法的实时地址与所述目标方法在未被调试情况下的地址不一致时,确定所述目标方法被Hook调试,退出所述客户端。
可选的,在所述执行所述客户端的程序代码之前,所述反调试方法还包括:
获取所述程序代码中的所有方法,以及,获取被Hook调试的目标方法的相关信息;其中,所述被Hook调试的目标方法的相关信息包括:被Hook调试的目标方法的方法标识、被Hook调试的目标方法所属客户端的客户端标识,以及所属客户端所在终端设备的终端标识;
根据所有方法各自对应的方法标识、所述客户端的客户端标识、所述客户端所在终端设备的终端标识,以及,所述被Hook调试的目标方法的相关信息,确定所述所有方法中是否包括被Hook调试的目标方法;
若所述所有方法中包括被Hook调试的目标方法,直接退出所述客户端;
所述执行所述客户端的程序代码,包括:
若所述所有方法中不包括被Hook调试的目标方法,执行所述客户端的程序代码。
可选的,所述被Hook调试的目标方法的相关信息是在所述确定所述目标方法被Hook调试之后,关联存储在所述被Hook调试的目标方法所属的客户端中,并上报给服务端中的;
所述获取被Hook调试的目标方法的相关信息,包括:
获取所述客户端中存储的被Hook调试的目标方法的相关信息;
在所述客户端的本地数据清空的情况下或所述客户端卸载后重新安装的情况下,在所述获取所述客户端中存储的被Hook调试的目标方法的相关信息之前,所述反调试方法还包括:
向所述服务端请求与所述客户端的客户端标识、所述客户端所在终端设备的终端标识匹配的被Hook调试的目标方法的相关信息;
将所述服务端返回的所述匹配的被Hook调试的目标方法的相关信息存储到所述客户端中。
可选的,在所述客户端的程序代码中,所述目标方法的开始位置和结束位置分别插入有第一代码,所述第一代码用于统计所述程序代码从开始执行至执行到所述第一代码的插入位置的执行时间;
所述获取所述程序代码中目标方法的执行时间,包括:
获取所述程序代码从开始执行至执行到所述目标方法的开始位置的第一执行时间,以及,获取所述程序代码从开始执行至执行到所述目标方法的结束位置的第二执行时间;
根据所述第一执行时间和所述第二执行时间,确定所述程序代码中目标方法的执行时间。
可选的,所述程序代码中包括用于计算所述目标方法的实时地址的第二代码,服务端中事先存储有所述程序代码中所有方法各自对应的在未被调试情况下的地址;
所述获取所述目标方法的实时地址,包括:通过所述第二代码获取所述目标方法的实时地址;
所述反调试方法还包括:
从所述服务端中获取所述目标方法在未被调试情况下的地址。
可选的,所述反调试方法还包括:
检测所述客户端所在的终端设备是否为异常设备;
所述当所述目标方法的实时地址与所述目标方法在未被调试情况下的地址不一致时,确定所述目标方法被Hook调试,包括:
当检测出所述终端设备为异常设备,且所述目标方法的实时地址与所述目标方法在未被调试情况下的地址不一致时,确定所述目标方法被Hook调试。
本发明实施例第二方面提供了一种针对Hook调试的反调试装置,应用于客户端,所述反调试装置包括:
时间获取模块,用于启动所述客户端,执行所述客户端的程序代码,获取所述程序代码中目标方法的执行时间;
时间比较模块,用于确定所述执行时间是否超过预先设置的时间阈值,所述时间阈值为所述目标方法在未被调试情况下的最长执行时间;
地址获取模块,用于在确定所述执行时间超过所述时间阈值时,获取所述目标方法的实时地址,所述实时地址为所述程序代码执行过程中所述目标方法对应的可执行文件的存储位置;
地址比较模块,用于比较所述目标方法的实时地址与所述目标方法在未被调试情况下的地址是否一致;
调试确定模块,用于当所述目标方法的实时地址与所述目标方法在未被调试情况下的地址不一致时,确定所述目标方法被Hook调试,退出所述客户端。
可选的,所述反调试装置还包括:
第一获取模块,用于在所述执行所述客户端的程序代码之前,获取所述程序代码中的所有方法,以及,获取被Hook调试的目标方法的相关信息;其中,所述被Hook调试的目标方法的相关信息包括:被Hook调试的目标方法的方法标识、被Hook调试的目标方法所属客户端的客户端标识,以及所属客户端所在终端设备的终端标识;
方法比较模块,用于根据所有方法各自对应的方法标识、所述客户端的客户端标识、所述客户端所在终端设备的终端标识,以及,所述被Hook调试的目标方法的相关信息,确定所述所有方法中是否包括被Hook调试的目标方法;
第一退出模块,用于若所述所有方法中包括被Hook调试的目标方法,直接退出所述客户端;
所述时间获取模块,包括:
代码执行子模块,用于若所述所有方法中不包括被Hook调试的目标方法,执行所述客户端的程序代码。
可选的,所述被Hook调试的目标方法的相关信息是在所述确定所述目标方法被Hook调试之后,关联存储在所述被Hook调试的目标方法所属的客户端中,并上报给服务端中的;
所述第一获取模块,包括:
第一获取子模块,用于获取所述客户端中存储的被Hook调试的目标方法的相关信息;
在所述客户端的本地数据清空的情况下或所述客户端卸载后重新安装的情况下,所述反调试装置还包括:
请求模块,用于在所述获取所述客户端中存储的被Hook调试的目标方法的相关信息之前,向所述服务端请求与所述客户端的客户端标识、所述客户端所在终端设备的终端标识匹配的被Hook调试的目标方法的相关信息;
存储模块,用于将所述服务端返回的所述匹配的被Hook调试的目标方法的相关信息存储到所述客户端中。
可选的,在所述客户端的程序代码中,所述目标方法的开始位置和结束位置分别插入有第一代码,所述第一代码用于统计所述程序代码从开始执行至执行到所述第一代码的插入位置的执行时间;
所述时间获取模块,包括:
时间获取子模块,用于获取所述程序代码从开始执行至执行到所述目标方法的开始位置的第一执行时间,以及,获取所述程序代码从开始执行至执行到所述目标方法的结束位置的第二执行时间;
时间确定子模块,用于根据所述第一执行时间和所述第二执行时间,确定所述程序代码中目标方法的执行时间。
可选的,所述程序代码中包括用于计算所述目标方法的实时地址的第二代码,服务端中事先存储有所述程序代码中所有方法各自对应的在未被调试情况下的地址;
所述地址获取模块,包括:
第一地址获取子模块,用于通过所述第二代码获取所述目标方法的实时地址;
所述反调试装置还包括:
第二地址获取模块,从所述服务端中获取所述目标方法在未被调试情况下的地址。
可选的,所述反调试装置还包括:
设备检测模块,用于检测所述客户端所在的终端设备是否为异常设备;
所述调试确定模块,包括:
调试确定子模块,用于当检测出所述终端设备为异常设备,且所述目标方法的实时地址与所述目标方法在未被调试情况下的地址不一致时,确定所述目标方法被Hook调试。
本发明实施例第三方面提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述计算机程序被处理器执行时实现本发明第一方面所述的针对Hook调试的反调试方法的步骤。
本发明实施例第四方面提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如本发明第一方面所述的针对Hook调试的反调试方法中的步骤。
采用本发明实施例提供的针对Hook调试的反调试方法,在执行客户端程序代码的过程中获取程序代码中目标方法的执行时间,判断目标方法的执行时间是否超过时间阈值,若超过时间阈值则进一步获取目标方法的实时地址,将目标方法的实时地址与目标方法在未被调试情况下的地址进行比较,当地址不一致时即可确定该目标方法被Hook调试,并退出客户端。如此,通过本实施例的方法,既能精准确定出客户端中被Hook的目标方法并退出客户端,使得攻击者无法对没有运行能力的客户端进行调试,增加了攻击者的分析和调试难度,加固了客户端的安全性能;又无需分析程序代码中的所有目标方法,通过目标方法执行时间的长短进行初筛,只需针对异常的目标方法分析地址从而确定目标方法是否被Hook调试,从而节约了计算资源。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一实施例示出的一种针对Hook调试的反调试方法的流程图;
图2是本发明一实施例示出的一种针对Hook调试的反调试方法的示意图;
图3是本发明一实施例提供的针对Hook调试的反调试装置的结构框图;
图4是本发明一实施例示出的一种电子设备的示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前现有技术中针对客户端的调试可以分为:静态分析和动态调试。其中,静态分析主要是使用IDA、MachOView、HexFiend软件,将已有的客户端(如APP)通过反汇编(Disassembly)的方式转换为汇编代码或者二进制,此过程就是高级语言转换为低级语言、分析原始代码逻辑的过程;而动态调试就是使用Xcode和lldb工具把客户端(如APP)运行起来,通过打断点的方式,查看程序内部参数和变量信息以及分析逻辑过程。
而如前所述,反调试是一种常用且重要的防护手段,其中,反调试为:在程序运行阶段加入反调试代码和检测调试状态等技术,以增加攻击者调试和分析的成本以及难度,保证客户端的安全。针对客户端的反调试方法,目前现有技术中的反调试方法主要分为两类:一类为阻止调试器的附加,另一类是检测调试器是否存在。例如,现有常见的反调试方法如下:
1、通过调用ptrace实现反调试:ptrace是一种对正在运行中的进程跟踪和控制的手段,主要是为了方便客户端的开发和调试。通过ptrace,可以对另一个进程实现调试跟踪,同时,ptrace提供了一个非常有用的参数PT_DENY_ATTACH,这个参数可以告诉系统阻止调试器依附。
2、通过sysctl实现反调试:当一个进程被调试时,该进程中会有一个标记位来标记它正在被调试,通过sysctl函数査看当前进程的信息,查看这个标记位的状态来检査当前调试的状态。
3、通过调用syscall实现反调试:为了实现从用户态到内核态的切换,系统提供了一个系统调用函数syscall,在KernelSyscalls里可以找到对应的编号。
而以上现有的反调试技术,均已经被广大喜爱逆向开发者破解,通过使用代码注入方式就可以绕过以上反调试,并且不会对整个反调试进程造成任何影响,从而极大地降低了客户端的安全性能,导致客户端依旧可以被调试或破解。
为了至少部分地解决上述问题以及其他潜在问题中的一个或者多个,本发明实施例提出了一种新的反调试方法,即针对Hook调试的反调试方法,该反调试方法通过结合程序代码中目标方法的执行时间和地址进行综合判断,以确定目标方法是否被Hook调试,如此既节约了计算资源,又能精准确定出客户端中被Hook的目标方法并退出客户端,使得攻击者无法对没有运行能力的客户端进行调试,从而增加了攻击者的分析和调试难度,加固了客户端的安全性能。
请参考图1,图1是本发明一实施例示出的一种针对Hook调试的反调试方法的流程图。本实施例提供的针对Hook调试的反调试方法可应用于客户端,该客户端可适用于安卓系统或iOS系统,本实施例中的客户端可以是为用户提供本地服务的程序,客户端可以以不同的程序形态来实现同一软件功能:例如,客户端可以是应用软件APP、小程序、网页web浏览器等。如图1所示,本实施例的针对Hook调试的反调试方法可以包括以下步骤:
步骤S11:启动所述客户端,执行所述客户端的程序代码,获取所述程序代码中目标方法的执行时间。
本实施例中,可以是客户端响应于用户的启动客户端的操作,启动(开启)客户端,例如可以是用户对客户端所在终端设备(如手机、电脑、平板、车机、智能手表等设备)上显示的客户端控件进行触控操作(如长按、单击、双击等操作)以开启客户端。而客户端响应于启动客户端的操作,启动所述客户端。客户端启动后,执行该客户端的程序代码,获取程序代码执行过程中,程序代码中目标方法的执行时间。其中,本实施例的目标方法为客户端的程序代码中的任意一个函数或方法,例如可以是Object-C、C++或者C等语言的方法和函数。本实施例在执行程序代码的过程中,每执行完一个函数或方法,就可以获取该函数或方法的执行时间。
其中,程序代码中的函数指的是程序代码中的一段可以直接被另一段程序或代码引用的程序或代码,其是一个独立的代码块,用来实现某个功能。而程序代码中的方法是一种特殊的函数,方法和对象相关,方法是面向对象编程语言中的普遍叫法,方法必须定义在类中,通过持有它的对象去调用,而一个方法内部能够访问到持有它的对象中的各种成员。
步骤S12:确定所述执行时间是否超过预先设置的时间阈值,所述时间阈值为所述目标方法在未被调试情况下的最长执行时间。
当客户端的程序代码执行时,目标方法(即程序代码中的任意一个函数或方法)在正常情况下(即未被调试的情况下)的执行时间是非常快的,几乎都是纳秒或微秒级别;而如果一个方法或函数被调试(如被Hook、打断点调试等)后,其执行时间是会远超合理阈值的。因此,本实施例可以在获得目标方法的执行时间后,确定该执行时间是否超过预先设置的时间阈值,以初步确定程序代码中的目标方法是否被调试。
本实施例预先设置有时间阈值,并将预先设置的时间阈值存储在客户端本地和/或与客户端通信连接的服务端中。其中,可以通过服务端灵活修改设置的时间阈值,而本实施例的服务端可以为客户端的后台服务器,如服务端可以为与客户端通信连接的计算机等。
本实施例的时间阈值为程序代码的执行过程中,目标方法在未被调试情况下的最长执行时间。本实施例的时间阈值可以事先根据人工经验设定,如将时间阈值设定为微秒或毫秒级别,本实施例对时间阈值的具体取值不做任何限制。此外,针对预先设置的时间阈值,可以是程序代码中的任一函数或方法均对应同一个时间阈值,也可以是程序代码中的每个函数或方法均有与其相对应的时间阈值,本实施例对此不作限制。在其中一种可选方式中,由于被调试情况下与未被调试情况下的目标方法的执行时间差异较大,采用同一个时间阈值已经能够满足时间界定需求,因此针对程序代码中的目标方法均只对应同一个时间阈值。
步骤S13:在确定所述执行时间超过所述时间阈值时,获取所述目标方法的实时地址,所述实时地址为所述程序代码执行过程中所述目标方法对应的可执行文件的存储位置。
本实施例中,当客户端确定程序代码中目标方法的执行时间未超过时间阈值时,则可确定目标方法未被调试,此时可继续执行后续的程序代码。而当确定程序代码中目标方法的执行时间超过时间阈值,则可以初步确定该目标方法被Hook调试。因此,在确定程序代码中目标方法的执行时间超过时间阈值的情况下,客户端可以进一步获取该目标方法的实时地址。其中,目标方法的实时地址指的是程序代码执行过程中所述目标方法对应的可执行文件的存储位置。
步骤S14:比较所述目标方法的实时地址与所述目标方法在未被调试情况下的地址是否一致。
本实施例中,针对目标方法被Hook调试的情况,除了目标方法的执行时间会超过时间阈值外,目标方法的地址也会发生变化。因此,当通过目标方法的执行时间筛选出初步怀疑的被Hook的方法后,可以进一步通过比较目标方法的实时地址、与目标方法在未被调试情况下的地址(即该程序代码执行过程中,目标方法在未被Hook调试情况下对应的可执行文件的存储位置)是否一致,来确定目标方法是否被Hook调试。
步骤S15:当所述目标方法的实时地址与所述目标方法在未被调试情况下的地址不一致时,确定所述目标方法被Hook调试,退出所述客户端。
本实施例中,当客户端确定出目标方法的实时地址与目标方法在未被调试情况下的地址不一致时,即目标方法的地址发生了变化,此时则可确定该目标方法已经被Hook调试,也可认为该进程已经被Hook调试,即该客户端已经被Hook调试,立即退出客户端,从而阻止客户端的继续运行,防止攻击者继续调试客户端,破解客户端。
此外,当客户端确定出目标方法的实时地址与目标方法在未被调试情况下的地址完全一致时,此时则可确定该目标方法被调试了,但不是被Hook调试的,此时也可确定该客户端被调试,立即退出客户端,从而阻止客户端的继续运行,防止攻击者继续调试客户端,破解客户端。
在本实施例中,与以往现有的反调试方案不同的是,本实施例不需要系统通过底层方式获取到进程调试状态,而是可以通过时间阈值和地址灵活调整判断。在执行客户端程序代码的过程中获取程序代码中目标方法的执行时间,判断目标方法的执行时间是否超过时间阈值,若超过时间阈值则进一步获取目标方法的实时地址,将目标方法的实时地址与目标方法在未被调试情况下的地址进行比较,当地址不一致时即可确定该目标方法被Hook调试,并退出客户端。通过本实施例中的反调试方法,无需分析所有目标方法的地址,通过目标方法执行时间的长短进行初筛,只需针对异常的目标方法分析地址从而确定目标方法是否被Hook调试,这样既节约了计算资源,又能精准确定出客户端中被Hook的目标方法并退出客户端,使得攻击者无法对没有运行能力的客户端进行调试,从而增加了攻击者的分析和调试难度,减少了对自有项目资源的流失,加固了客户端的安全性能。
结合以上实施例,在一实施方式中,本发明实施例还提供了一种针对Hook调试的反调试方法。在该方法中,在上述步骤S11中的“执行所述客户端的程序代码”之前,该反调试方法还可以包括步骤S21-步骤S24:
步骤S21:获取所述程序代码中的所有方法,以及,获取被Hook调试的目标方法的相关信息。
本实施例中,在启动客户端之后,以及在执行客户端的程序代码之前,客户端还可以获取客户端程序代码中的所有方法,以及,获取事先存储的被Hook调试的目标方法的相关信息。其中,程序代码中的所有方法指的是客户端的程序代码中所包含的所有方法或函数。而本步骤中的客户端获取客户端程序代码中的所有方法:可以是开发人员在编写客户端程序代码的过程中,记录程序代码中所涉及的所有方法,并将所有方法的方法标识存储在客户端中,则客户端可以直接从本地读取即可获取到客户端程序代码中的所有方法;还可以是客户端通过专门用于确定程序代码中方法的脚本,来获取客户端程序代码中包含的所有方法。
而被Hook调试的目标方法的相关信息包括:被Hook调试的目标方法的方法标识、被Hook调试的目标方法所属客户端的客户端标识,以及所属客户端所在终端设备的终端标识;且针对每一个被Hook调试的目标方法,每个被Hook调试的目标方法的方法标识,均与该被Hook调试的目标方法所属客户端的客户端标识,以及该所属客户端所在终端设备的终端标识一一对应。
步骤S22:根据所有方法各自对应的方法标识、所述客户端的客户端标识、所述客户端所在终端设备的终端标识,以及,所述被Hook调试的目标方法的相关信息,确定所述所有方法中是否包括被Hook调试的目标方法。
本实施例中,客户端在获取到程序代码中的所有方法,以及,被Hook调试的目标方法的相关信息后,可以根据该客户端程序代码中所有方法各自对应的方法标识、该客户端的客户端标识、该客户端所在终端设备的终端标识,以及被Hook调试的目标方法的相关信息,确定客户端程序代码中的所有方法中是否包括有被Hook调试的目标方法。
由于客户端程序代码中的某目标方法被调试是跟客户端以及客户端所在的终端设备挂钩的:例如,A终端设备上的客户端B中的C方法被调试,并不代表所有包含C方法的客户端均被调试,也不代表所有客户端B中的C方法均被调试,也可能存在着D终端设备上的客户端B中的C方法未被调试的情况。
因此,当客户端启动后,可以根据客户端自身的客户端标识、该客户端所在终端设备的终端标识以及该客户端程序代码中所有方法各自对应的方法标识,在获取到的被Hook调试的目标方法的相关信息中进行查询,确定被Hook调试的目标方法的相关信息中是否存在有被Hook调试的目标方法的方法标识、被Hook调试的目标方法所属客户端的客户端标识,以及所属客户端所在终端设备的终端标识,与,该客户端自身的客户端标识、该客户端所在终端设备的终端标识以及该客户端程序代码中所有方法各自对应的方法标识一一对应。
步骤S23:若所述所有方法中包括被Hook调试的目标方法,直接退出所述客户端。
本实施例中,若客户端确定出被Hook调试的目标方法的相关信息中,存在有被Hook调试的目标方法的方法标识、被Hook调试的目标方法所属客户端的客户端标识,以及所属客户端所在终端设备的终端标识,与,该客户端自身的客户端标识、该客户端所在终端设备的终端标识以及该客户端程序代码中所有方法中某一个或多个方法的方法标识一一对应,则客户端确定该客户端程序代码的所有方法中包括有被Hook调试的目标方法,此时可证明该客户端所在的终端设备为风险设备或者已被调试设备,此时直接关闭该客户端,即直接退出该客户端,以禁止客户端被调试。
在本实施例中,步骤S11中的“执行所述客户端的程序代码”具体可以包括下述步骤S24:
步骤S24:若所述所有方法中不包括被Hook调试的目标方法,执行所述客户端的程序代码。
当客户端确定出该客户端自身的客户端标识、该客户端所在终端设备的终端标识以及该客户端程序代码中所有方法各自对应的方法标识,均不能与被Hook调试的目标方法的相关信息中,被Hook调试的目标方法的方法标识、被Hook调试的目标方法所属客户端的客户端标识,以及所属客户端所在终端设备的终端标识一一对应时,此时则可以确定该客户端程序代码中的所有方法中不包括被Hook调试的目标方法,则可以开始执行该客户端的程序代码。
在本实施例中,客户端启动后,首先获取程序代码中的所有方法,并判断事先记录的被Hook调试的目标方法是否存在于所有方法中,若存在,则可证明该客户端所在的终端设备为风险设备或已调试设备,则此时直接退出客户端,不再执行客户端的程序代码,以禁止客户端被调试,并且同时支持服务端下发对方法或函数的开启和关闭方案。通过本实施例的反调试方法,可以在客户端启动后直接根据记录的被Hook调试的方法信息确定客户端是否被Hook调试,从而防止重复性检测Hook调试的工作,提高了检测效率。
结合以上实施例,在一实施方式中,本发明实施例还提供了一种针对Hook调试的反调试方法。在该方法中,所述被Hook调试的目标方法的相关信息是在客户端确定目标方法被Hook调试之后,关联存储在所述被Hook调试的目标方法所属的客户端中,并上报给服务端中的。在该方法中,上述步骤S21中的“获取被Hook调试的目标方法的相关信息”可以包括步骤S31:
步骤S31:获取所述客户端中存储的被Hook调试的目标方法的相关信息。
本实施例中,客户端在确定出该客户端程序代码中的目标方法被Hook调试后,还会将该被Hook调试的目标方法的相关信息(即该被Hook调试的目标方法的方法标识、被Hook调试的目标方法所属客户端的客户端标识,以及所属客户端所在终端设备的终端标识)关联存储在该客户端中,并上报给服务端。基于此,当客户端需要获取被Hook调试的目标方法的相关信息时,即可从客户端本地拉取客户端存储的被Hook调试的目标方法的相关信息。
在所述客户端的本地数据清空的情况下或所述客户端卸载后重新安装的情况下,在所述获取所述客户端中存储的被Hook调试的目标方法的相关信息之前,本实施例的反调试方法还可以包括步骤S32和步骤S33:
步骤S32:向所述服务端请求与所述客户端的客户端标识、所述客户端所在终端设备的终端标识匹配的被Hook调试的目标方法的相关信息。
本实施例中,当客户端的本地数据清空的情况下(即清除了客户端的本地缓存),或者,当客户端卸载后重新安装的情况下,若客户端之前存储有被Hook调试的目标方法的相关信息,也已经丢失。因此,此时客户端可以向服务端请求与该客户端的客户端标识、该客户端所在终端设备的终端标识匹配的被Hook调试的目标方法的相关信息。
其中,本实施例中的服务端可以与多个客户端通信,因此服务端可以存储有多个客户端上报的、与该多个客户端的客户端标识和该多个客户端所在终端设备的终端标识相关的被Hook调试的目标方法的相关信息。因此,在步骤S32中,具体的,客户端可以向服务端发送一个携带该客户端的客户端标识和该客户端所在终端设备的终端标识的请求,以向服务端请求与该客户端的客户端标识、该客户端所在终端设备的终端标识所匹配的被Hook调试的目标方法的相关信息。
步骤S33:将所述服务端返回的所述匹配的被Hook调试的目标方法的相关信息存储到所述客户端中。
本实施例中,服务端在接收到客户端发送的请求后,会向客户端返回与该客户端的客户端标识和该客户端所在终端设备的终端标识匹配的被Hook调试的目标方法的相关信息,客户端接收到服务端返回的匹配的被Hook调试的目标方法的相关信息后,可以将该匹配的被Hook调试的目标方法的相关信息存储到客户端中,以供后续客户端可以从本地拉取客户端存储的被Hook调试的目标方法的相关信息。
此外在另一种实施方式中,客户端中存储的被Hook调试的目标方法的相关信息还可以包括:被调试的目标方法的相关信息。其中,被调试的目标方法的相关信息是指被调试、但并非被Hook调试的目标方法的相关信息。被调试的目标方法的相关信息可以包括:被调试、但并非被Hook调试的目标方法的方法标识,被调试、但并非被Hook调试的目标方法所属客户端的客户端标识,以及所属客户端所在终端设备的终端标识。具体的,例如可以是当客户端确定出目标方法的实时地址与目标方法在未被调试情况下的地址完全一致时,此时则可确定该目标方法被调试了,但不是被Hook调试的,此时将该被调试的目标方法的相关信息存储在客户端本地并上报给服务端。
在本实施例中,客户端确定出目标方法被Hook调试后,还会对该被Hook调试的目标方法的方法标识、该客户端的客户端标识以及该客户端所在终端的终端标识加以标记,即将该被Hook调试的目标方法的相关信息进行本地存储并上报服务端,本实施例对确定出的异常方法做好记录储存,并在开启客户端后直接根据记录的被Hook调试的方法信息确定客户端是否被Hook调试,防止了重复性工作,提高了检测效率。
结合以上实施例,在一实施方式中,本发明实施例还提供了一种针对Hook调试的反调试方法。该方法中,在客户端的程序代码中,所述目标方法的开始位置和结束位置分别插入有第一代码,该第一代码用于统计客户端程序代码从开始执行至执行到该第一代码的插入位置的执行时间。具体的,可以是开发人员在编写该客户端的程序代码的过程中,在程序代码中的每个函数或方法的开始位置和结束位置分别插入第一代码。在该方法中,上述步骤S11中的“获取所述程序代码中目标方法的执行时间”具体可以包括步骤S41和步骤S42:
步骤S41:获取所述程序代码从开始执行至执行到所述目标方法的开始位置的第一执行时间,以及,获取所述程序代码从开始执行至执行到所述目标方法的结束位置的第二执行时间。
本实施例中,客户端执行程序代码的过程中,每执行到第一代码均可获得程序代码从开始执行至执行到该第一代码插入位置的执行时间,因此,在执行程序代码的过程中,每执行完一个目标方法(即程序代码中的任意一个函数或方法),就可以获取客户端的程序代码从开始执行至执行到该目标方法的开始位置的第一执行时间,以及,获取客户端的程序代码从开始执行至执行到该目标方法的结束位置的第二执行时间。
步骤S42:根据所述第一执行时间和所述第二执行时间,确定所述程序代码中目标方法的执行时间。
本实施例中,客户端获取到目标方法对应的第一执行时间和第二执行时间后,可以根据该第一执行时间与第二执行时间,确定客户端程序代码中目标方法的执行时间。在其中一种实施方式中,可以是用获取到的第二执行时间减去第一执行时间,以获得程序代码中目标方法的执行时间。
在本实施例中,事先在程序代码中目标方法的开始位置和结束位置插入第一代码,通过调用第一代码快速获取到程序代码执行过程中目标函数的执行时间,从而为后续根据目标方法的执行时间进行目标方法是否被Hook调试的初步筛选提供基础。
结合以上任一实施例,在一实施方式中,本发明实施例还提供了一种针对Hook调试的反调试方法。在该方法中,客户端的程序代码中包括第二代码,该第二代码用于计算客户端程序代码中的目标方法的实时地址。
在本方法中,上述步骤S13中的“获取所述目标方法的实时地址”,具体可包括步骤S51:通过所述第二代码获取所述目标方法的实时地址。即,本实施例中的客户端可以通过程序代码中包括的第二代码来获取当前程序代码运行时的目标方法对应的可执行文件的存储位置。
本实施例的反调试方法除了包括上述步骤外,还包括步骤S52:从所述服务端中获取所述目标方法在未被调试情况下的地址。
本实施例中,与客户端通信连接的服务端中事先存储有客户端程序代码中所有方法各自对应的在未被调试情况下的地址(即客户端程序代码执行过程中,程序代码中所有方法各自在未被Hook调试情况下对应的可执行文件的存储位置)。其中,获取目标方法的实时地址与获取目标方法在未被调试情况下的地址时,客户端程序代码执行过程的运行环境(如客户端的安装位置等)需一致,以避免出现由于客户端安装包的安装位置有差别而导致的地址不一致的情况,进一步确保本实施例的被Hook调试的检测结果。
而在执行步骤S14之前,就可以实行步骤S52,从与该客户端通信连接的服务端中,获取所述目标方法在未被调试情况下的地址(即获取该程序代码执行过程中,目标方法在未被Hook调试情况下对应的可执行文件的存储位置),以进行地址比较。
在本实施例中,通过程序代码中包括的第二代码获取目标方法的实时地址,并与服务端中预先存储的目标方法在未被调试情况下的地址相比较,从而判断目标方法是否被Hook调试,精确判断客户端的程序代码中是否存在方法被Hook的情况,当存在就退出客户端,以使攻击者无法对没有运行能力的客户端进行进一步调试,增加了攻击者的分析和调试难度,提升了客户端的安全性能。
结合以上任一实施例,在一实施方式中,本发明实施例还提供了一种针对Hook调试的反调试方法。在本实施例提供的反调试方法中,除了包括上述步骤外,还包括步骤S61:
步骤S61:检测所述客户端所在的终端设备是否为异常设备。
在一般情况下,可以通过两种方式进行客户端调试,一种情况是使用越狱设备达到调试状态,还有一种情况是不使用越狱设备,设备是正常的,但通过使用重签名APP达到调试状态。因此本实施例中,客户端还可对客户端所在的终端设备进行检测,以检测该客户端所在的终端设备是否为异常设备,其中异常设备可以是指越狱设备或风险设备。
需要说明的是,本实施例中对执行步骤“检测客户端所在的终端设备是否为异常设备”,与,执行步骤“确定执行时间是否超过预先设置的时间阈值;在确定所述执行时间超过所述时间阈值时,获取所述目标方法的实时地址;比较所述目标方法的实时地址与所述目标方法在未被调试情况下的地址是否一致”的先后顺序不做任何限制:例如本实施例可以是检测是否为异常设备在前,检测执行时间和地址在后;也可以是检测执行时间和地址在前,检测是否为异常设备在后。
其中一种实施方式中,可以是客户端通过服务端收集到的客户端所在的终端设备的设备信息以及网络相关信息,分析此网络下的终端设备是否为异常设备,例如可以是根据网络相关信息分析当前网络是否为风险网络,并对风险网络上的设备及时做出应对策略,再判断风险网络下的终端设备参数,确定该终端设备是否为风险异常设备。
在本实施例中,上述步骤S15中的“当所述目标方法的实时地址与所述目标方法在未被调试情况下的地址不一致时,确定所述目标方法被Hook调试”具体可以包括步骤S62:
步骤S62:当检测出所述终端设备为异常设备,且所述目标方法的实时地址与所述目标方法在未被调试情况下的地址不一致时,确定所述目标方法被Hook调试。
本实施例中,当客户端检测出客户端所在的终端设备为异常设备,并且,客户端确定出程序代码中目标方法的实时地址与目标方法在未被调试情况下的地址不一致时,即可准确确定出客户端程序代码中的该目标方法一定被Hook调试了,该目标方法即为被Hook调试的目标方法。
此外,当客户端检测出客户端所在的终端设备为异常设备,并且,客户端确定出程序代码中目标方法的执行时间未超过时间阈值时,则可以确定当前客户端所在的设备虽然是异常设备,但该客户端程序代码中的该目标方法并未被调试,因此可以继续执行后续程序代码,以确定出该客户端程序代码中是否有被Hook调试的目标方法。
当客户端检测出客户端所在的终端设备为异常设备,并且,客户端确定出程序代码中目标方法的执行时间超过时间阈值、但该目标方法的实时地址与所述目标方法在未被调试情况下的地址完全一致时,此时则可确定该目标方法被调试了,但不是被Hook调试的。
当客户端检测出客户端所在的终端设备不是异常设备,并且,客户端确定出程序代码中目标方法的实时地址与目标方法在未被调试情况下的地址不一致时,此时则可以确定当前客户端所在的设备虽然不是异常设备(如越狱设备或风险设备),但该目标方法依旧被Hook调试了,说明该目标方法可能是使用重签名APP被调试的。
当客户端检测出客户端所在的终端设备不是异常设备,并且,客户端确定出程序代码中目标方法的执行时间未超过时间阈值时,此时则可以确定当前客户端所在的设备未被越狱,且该客户端程序代码中的该目标方法并未被调试,因此可以继续执行后续程序代码,以确定出客户端程序代码中是否有被Hook调试的目标方法。
而当客户端检测出客户端所在的终端设备不是异常设备,并且,客户端确定出程序代码中目标方法的执行时间超过时间阈值、但该目标方法的实时地址与所述目标方法在未被调试情况下的地址完全一致时,此时则可确定当前客户端所在的设备虽然不是异常设备(如越狱设备或风险设备),但该目标方法还是被调试了,只是不是被Hook调试的。
在本实施例中,通过增加设备校验,即通过增加客户端检测客户端所在的终端设备是否为异常设备,可以精准识别客户端程序代码中的目标方法是否被Hook调试,因为当检测出目标方法的执行时间超过时间阈值、地址发生变化且终端设备为越狱设备时,该客户端一定被调试,该目标方法一定被Hook调试,从而立即退出客户端,增加攻击者的分析和调试难度,增强客户端的安全性能。
在一实施方式中,参见图2,图2是本发明一实施例示出的一种针对Hook调试的反调试方法的示意图。如图2所示,启动客户端后,判断客户端程序代码中的所有方法中是否包括已标记为异常被调试的方法,如果包括,则直接退出客户端,以禁止调试客户端。如果不包括,从客户端本地或服务端拉取事先设置的时间阈值,开始执行客户端的程序代码并检测客户端所在的终端设备是否为异常设备:
如果检测客户端所在的终端设备是异常设备,则在执行客户端程序代码的过程中,每执行完一个方法或函数,就判断该方法或函数的执行时间是否超过预设的时间阈值,当该方法或函数的执行时间没有超过预设的时间阈值时,证明该终端设备是异常设备但该客户端程序代码中的当前方法或函数没有被调试,可以继续执行程序代码,再次检测客户端所在的终端设备是否为异常设备,并进行下一个函数或方法的执行时间比较;也可以是继续执行程序代码,不再检测客户端所在的终端设备是否为异常设备,直接进行下一个函数或方法的执行时间的比较。当该方法或函数的执行时间超过预设的时间阈值时,判断该方法或函数的地址是否发生了变化,如果发生变化则表明该函数或方法一定被Hook调试,此时客户端存储数据(即存储被Hook调试的目标方法的相关信息)在本地、上报给服务端,并退出客户端,以禁止调试客户端。而当该方法或函数的执行时间超过预设的时间阈值时,且该方法或函数的地址没有发生了变化,则可以证明该函数或方法被调试,只是不是被Hook调试,此时则可以退出客户端,以禁止调试客户端。
如果检测客户端所在的终端设备不是异常设备,则在执行客户端程序代码的过程中,每执行完一个方法或函数,就判断该方法或函数的执行时间是否超过预设的时间阈值,当该方法或函数的执行时间没有超过预设的时间阈值时,证明该方法或函数没有被调试,可以继续执行程序代码,再次检测客户端所在的终端设备是否为异常设备,并进行下一个函数或方法的执行时间比较;也可以是继续执行程序代码,不再检测客户端所在的终端设备是否为异常设备,直接进行下一个函数或方法的执行时间的比较。当该方法或函数的执行时间超过预设的时间阈值时,判断该方法或函数的地址是否发生了变化,如果发生变化则表明该函数或方法被Hook调试,此时客户端存储数据(即存储被Hook调试的目标方法的相关信息)在本地、上报给服务端,并退出客户端,以禁止调试客户端。而当该方法或函数的执行时间超过预设的时间阈值时,且该方法或函数的地址没有发生了变化,则可以证明该函数或方法被调试,只是不是被Hook调试,此时则可以退出客户端,以禁止调试客户端。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
基于同一发明构思,本发明一实施例提供了一种针对Hook调试的反调试装置300,该反调试装置300可应用于客户端。参考图3,图3是本发明一实施例提供的针对Hook调试的反调试装置的结构框图。如图3所示,该反调试装置300包括:
时间获取模块301,用于启动所述客户端,执行所述客户端的程序代码,获取所述程序代码中目标方法的执行时间;
时间比较模块302,用于确定所述执行时间是否超过预先设置的时间阈值,所述时间阈值为所述目标方法在未被调试情况下的最长执行时间;
地址获取模块303,用于在确定所述执行时间超过所述时间阈值时,获取所述目标方法的实时地址,所述实时地址为所述程序代码执行过程中所述目标方法对应的可执行文件的存储位置;
地址比较模块304,用于比较所述目标方法的实时地址与所述目标方法在未被调试情况下的地址是否一致;
调试确定模块305,用于当所述目标方法的实时地址与所述目标方法在未被调试情况下的地址不一致时,确定所述目标方法被Hook调试,退出所述客户端。
可选的,所述反调试装置300还包括:
第一获取模块,用于在所述执行所述客户端的程序代码之前,获取所述程序代码中的所有方法,以及,获取被Hook调试的目标方法的相关信息;其中,所述被Hook调试的目标方法的相关信息包括:被Hook调试的目标方法的方法标识、被Hook调试的目标方法所属客户端的客户端标识,以及所属客户端所在终端设备的终端标识;
方法比较模块,用于根据所有方法各自对应的方法标识、所述客户端的客户端标识、所述客户端所在终端设备的终端标识,以及,所述被Hook调试的目标方法的相关信息,确定所述所有方法中是否包括被Hook调试的目标方法;
第一退出模块,用于若所述所有方法中包括被Hook调试的目标方法,直接退出所述客户端;
所述时间获取模块301,包括:
代码执行子模块,用于若所述所有方法中不包括被Hook调试的目标方法,执行所述客户端的程序代码。
可选的,所述被Hook调试的目标方法的相关信息是在所述确定所述目标方法被Hook调试之后,关联存储在所述被Hook调试的目标方法所属的客户端中,并上报给服务端中的;
所述第一获取模块,包括:
第一获取子模块,用于获取所述客户端中存储的被Hook调试的目标方法的相关信息;
在所述客户端的本地数据清空的情况下或所述客户端卸载后重新安装的情况下,所述反调试装置300还包括:
请求模块,用于在所述获取所述客户端中存储的被Hook调试的目标方法的相关信息之前,向所述服务端请求与所述客户端的客户端标识、所述客户端所在终端设备的终端标识匹配的被Hook调试的目标方法的相关信息;
存储模块,用于将所述服务端返回的所述匹配的被Hook调试的目标方法的相关信息存储到所述客户端中。
可选的,在所述客户端的程序代码中,所述目标方法的开始位置和结束位置分别插入有第一代码,所述第一代码用于统计所述程序代码从开始执行至执行到所述第一代码的插入位置的执行时间;
所述时间获取模块301,包括:
时间获取子模块,用于获取所述程序代码从开始执行至执行到所述目标方法的开始位置的第一执行时间,以及,获取所述程序代码从开始执行至执行到所述目标方法的结束位置的第二执行时间;
时间确定子模块,用于根据所述第一执行时间和所述第二执行时间,确定所述程序代码中目标方法的执行时间。
可选的,所述程序代码中包括用于计算所述目标方法的实时地址的第二代码,服务端中事先存储有所述程序代码中所有方法各自对应的在未被调试情况下的地址;
所述地址获取模块303,包括:
第一地址获取子模块,用于通过所述第二代码获取所述目标方法的实时地址;
所述反调试装置300还包括:
第二地址获取模块,从所述服务端中获取所述目标方法在未被调试情况下的地址。
可选的,所述反调试装置300还包括:
设备检测模块,用于检测所述客户端所在的终端设备是否为异常设备;
所述调试确定模块305,包括:
调试确定子模块,用于当检测出所述终端设备为异常设备,且所述目标方法的实时地址与所述目标方法在未被调试情况下的地址不一致时,确定所述目标方法被Hook调试。
基于同一发明构思,本发明另一实施例提供一种电子设备400,如图4所示。图4是本发明一实施例示出的一种电子设备的示意图。该电子设备包括存储器402、处理器401及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行时实现本发明上述任一实施例所述的针对Hook调试的反调试方法中的步骤。
基于同一发明构思,本发明另一实施例提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现如本发明上述任一实施例所述的针对Hook调试的反调试方法中的步骤。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。
本领域普通技术人员可以意识到,结合本发明实施例中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本发明所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (14)

1.一种针对Hook调试的反调试方法,应用于客户端,其特征在于,所述反调试方法包括:
启动所述客户端,执行所述客户端的程序代码,获取所述程序代码中目标方法的执行时间;
确定所述执行时间是否超过预先设置的时间阈值,所述时间阈值为所述目标方法在未被调试情况下的最长执行时间;
在确定所述执行时间超过所述时间阈值时,获取所述目标方法的实时地址,所述实时地址为所述程序代码执行过程中所述目标方法对应的可执行文件的存储位置;
比较所述目标方法的实时地址与所述目标方法在未被调试情况下的地址是否一致;
当所述目标方法的实时地址与所述目标方法在未被调试情况下的地址不一致时,确定所述目标方法被Hook调试,退出所述客户端。
2.根据权利要求1所述的针对Hook调试的反调试方法,其特征在于,在所述执行所述客户端的程序代码之前,所述反调试方法还包括:
获取所述程序代码中的所有方法,以及,获取被Hook调试的目标方法的相关信息;其中,所述被Hook调试的目标方法的相关信息包括:被Hook调试的目标方法的方法标识、被Hook调试的目标方法所属客户端的客户端标识,以及所属客户端所在终端设备的终端标识;
根据所有方法各自对应的方法标识、所述客户端的客户端标识、所述客户端所在终端设备的终端标识,以及,所述被Hook调试的目标方法的相关信息,确定所述所有方法中是否包括被Hook调试的目标方法;
若所述所有方法中包括被Hook调试的目标方法,直接退出所述客户端;
所述执行所述客户端的程序代码,包括:
若所述所有方法中不包括被Hook调试的目标方法,执行所述客户端的程序代码。
3.根据权利要求2所述的针对Hook调试的反调试方法,其特征在于,所述被Hook调试的目标方法的相关信息是在所述确定所述目标方法被Hook调试之后,关联存储在所述被Hook调试的目标方法所属的客户端中,并上报给服务端中的;
所述获取被Hook调试的目标方法的相关信息,包括:
获取所述客户端中存储的被Hook调试的目标方法的相关信息;
在所述客户端的本地数据清空的情况下或所述客户端卸载后重新安装的情况下,在所述获取所述客户端中存储的被Hook调试的目标方法的相关信息之前,所述反调试方法还包括:
向所述服务端请求与所述客户端的客户端标识、所述客户端所在终端设备的终端标识匹配的被Hook调试的目标方法的相关信息;
将所述服务端返回的所述匹配的被Hook调试的目标方法的相关信息存储到所述客户端中。
4.根据权利要求1所述的针对Hook调试的反调试方法,其特征在于,在所述客户端的程序代码中,所述目标方法的开始位置和结束位置分别插入有第一代码,所述第一代码用于统计所述程序代码从开始执行至执行到所述第一代码的插入位置的执行时间;
所述获取所述程序代码中目标方法的执行时间,包括:
获取所述程序代码从开始执行至执行到所述目标方法的开始位置的第一执行时间,以及,获取所述程序代码从开始执行至执行到所述目标方法的结束位置的第二执行时间;
根据所述第一执行时间和所述第二执行时间,确定所述程序代码中目标方法的执行时间。
5.根据权利要求1所述的针对Hook调试的反调试方法,其特征在于,所述程序代码中包括用于计算所述目标方法的实时地址的第二代码,服务端中事先存储有所述程序代码中所有方法各自对应的在未被调试情况下的地址;
所述获取所述目标方法的实时地址,包括:通过所述第二代码获取所述目标方法的实时地址;
所述反调试方法还包括:
从所述服务端中获取所述目标方法在未被调试情况下的地址。
6.根据权利要求1-5任一所述的针对Hook调试的反调试方法,其特征在于,所述反调试方法还包括:
检测所述客户端所在的终端设备是否为异常设备;
所述当所述目标方法的实时地址与所述目标方法在未被调试情况下的地址不一致时,确定所述目标方法被Hook调试,包括:
当检测出所述终端设备为异常设备,且所述目标方法的实时地址与所述目标方法在未被调试情况下的地址不一致时,确定所述目标方法被Hook调试。
7.一种针对Hook调试的反调试装置,应用于客户端,其特征在于,所述反调试装置包括:
时间获取模块,用于启动所述客户端,执行所述客户端的程序代码,获取所述程序代码中目标方法的执行时间;
时间比较模块,用于确定所述执行时间是否超过预先设置的时间阈值,所述时间阈值为所述目标方法在未被调试情况下的最长执行时间;
地址获取模块,用于在确定所述执行时间超过所述时间阈值时,获取所述目标方法的实时地址,所述实时地址为所述程序代码执行过程中所述目标方法对应的可执行文件的存储位置;
地址比较模块,用于比较所述目标方法的实时地址与所述目标方法在未被调试情况下的地址是否一致;
调试确定模块,用于当所述目标方法的实时地址与所述目标方法在未被调试情况下的地址不一致时,确定所述目标方法被Hook调试,退出所述客户端。
8.根据权利要求7所述的针对Hook调试的反调试装置,其特征在于,所述反调试装置还包括:
第一获取模块,用于在所述执行所述客户端的程序代码之前,获取所述程序代码中的所有方法,以及,获取被Hook调试的目标方法的相关信息;其中,所述被Hook调试的目标方法的相关信息包括:被Hook调试的目标方法的方法标识、被Hook调试的目标方法所属客户端的客户端标识,以及所属客户端所在终端设备的终端标识;
方法比较模块,用于根据所有方法各自对应的方法标识、所述客户端的客户端标识、所述客户端所在终端设备的终端标识,以及,所述被Hook调试的目标方法的相关信息,确定所述所有方法中是否包括被Hook调试的目标方法;
第一退出模块,用于若所述所有方法中包括被Hook调试的目标方法,直接退出所述客户端;
所述时间获取模块,包括:
代码执行子模块,用于若所述所有方法中不包括被Hook调试的目标方法,执行所述客户端的程序代码。
9.根据权利要求8所述的针对Hook调试的反调试装置,其特征在于,所述被Hook调试的目标方法的相关信息是在所述确定所述目标方法被Hook调试之后,关联存储在所述被Hook调试的目标方法所属的客户端中,并上报给服务端中的;
所述第一获取模块,包括:
第一获取子模块,用于获取所述客户端中存储的被Hook调试的目标方法的相关信息;
在所述客户端的本地数据清空的情况下或所述客户端卸载后重新安装的情况下,所述反调试装置还包括:
请求模块,用于在所述获取所述客户端中存储的被Hook调试的目标方法的相关信息之前,向所述服务端请求与所述客户端的客户端标识、所述客户端所在终端设备的终端标识匹配的被Hook调试的目标方法的相关信息;
存储模块,用于将所述服务端返回的所述匹配的被Hook调试的目标方法的相关信息存储到所述客户端中。
10.根据权利要求7所述的针对Hook调试的反调试装置,其特征在于,在所述客户端的程序代码中,所述目标方法的开始位置和结束位置分别插入有第一代码,所述第一代码用于统计所述程序代码从开始执行至执行到所述第一代码的插入位置的执行时间;
所述时间获取模块,包括:
时间获取子模块,用于获取所述程序代码从开始执行至执行到所述目标方法的开始位置的第一执行时间,以及,获取所述程序代码从开始执行至执行到所述目标方法的结束位置的第二执行时间;
时间确定子模块,用于根据所述第一执行时间和所述第二执行时间,确定所述程序代码中目标方法的执行时间。
11.根据权利要求7所述的针对Hook调试的反调试装置,其特征在于,所述程序代码中包括用于计算所述目标方法的实时地址的第二代码,服务端中事先存储有所述程序代码中所有方法各自对应的在未被调试情况下的地址;
所述地址获取模块,包括:
第一地址获取子模块,用于通过所述第二代码获取所述目标方法的实时地址;
所述反调试装置还包括:
第二地址获取模块,从所述服务端中获取所述目标方法在未被调试情况下的地址。
12.根据权利要求7-11任一所述的针对Hook调试的反调试装置,其特征在于,所述反调试装置还包括:
设备检测模块,用于检测所述客户端所在的终端设备是否为异常设备;
所述调试确定模块,包括:
调试确定子模块,用于当检测出所述终端设备为异常设备,且所述目标方法的实时地址与所述目标方法在未被调试情况下的地址不一致时,确定所述目标方法被Hook调试。
13.一种电子设备,其特征在于,包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至6中任一项所述的针对Hook调试的反调试方法的步骤。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6中任一项所述的针对Hook调试的反调试方法的步骤。
CN202210689255.8A 2022-06-17 2022-06-17 针对Hook调试的反调试方法、装置、电子设备及存储介质 Pending CN115114594A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210689255.8A CN115114594A (zh) 2022-06-17 2022-06-17 针对Hook调试的反调试方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210689255.8A CN115114594A (zh) 2022-06-17 2022-06-17 针对Hook调试的反调试方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN115114594A true CN115114594A (zh) 2022-09-27

Family

ID=83327725

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210689255.8A Pending CN115114594A (zh) 2022-06-17 2022-06-17 针对Hook调试的反调试方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN115114594A (zh)

Similar Documents

Publication Publication Date Title
CN110445688B (zh) 基于数据收集的接口服务功能监测方法及系统
US10069856B2 (en) System and method of comparative evaluation for phishing mitigation
CN104769554B (zh) 用于提供移动设备支持服务的系统、方法、设备以及计算机程序产品
CN108377241B (zh) 基于访问频率的监测方法、装置、设备和计算机存储介质
CN108667855B (zh) 网络流量异常监测方法、装置、电子设备及存储介质
CN110417778B (zh) 访问请求的处理方法和装置
CN107451040B (zh) 故障原因的定位方法、装置及计算机可读存储介质
CN113489713B (zh) 网络攻击的检测方法、装置、设备及存储介质
CN114328173B (zh) 软件模糊测试方法和装置、电子设备及存储介质
US20150150128A1 (en) Method and apparatus for intercepting or cleaning-up plugins
US20140215614A1 (en) System and method for a security assessment of an application uploaded to an appstore
CN105159832A (zh) 一种在应用测试中收集应用异常信息的方法、装置和系统
CN111198797A (zh) 操作监控方法及装置、操作分析方法及装置
CN111090593A (zh) 确定崩溃归属的方法、装置、电子设备及存储介质
CN112115005A (zh) 测试数据采集方法、装置、计算机设备和存储介质
CN116244138A (zh) 应用的运行异常识别方法、装置、电子设备及存储介质
CN111400720A (zh) 一种终端信息处理方法、系统及装置和一种可读存储介质
CN111124731A (zh) 一种文件系统异常监测方法、装置、设备、介质
CN108650123B (zh) 故障信息记录方法、装置、设备和存储介质
CN107766068B (zh) 应用系统补丁安装方法、装置、计算机设备和存储介质
CN112765611A (zh) 一种越权漏洞检测方法、装置、设备及存储介质
CN112153059A (zh) 邮件验证码获取方法、装置、电子设备和存储介质
CN110162982B (zh) 检测非法权限的方法及装置、存储介质、电子设备
CN115114594A (zh) 针对Hook调试的反调试方法、装置、电子设备及存储介质
CN111752819A (zh) 一种异常监控方法、装置、系统、设备和存储介质

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