CN106650338A - 一种防止软件被反调试的方法和系统 - Google Patents

一种防止软件被反调试的方法和系统 Download PDF

Info

Publication number
CN106650338A
CN106650338A CN201510711176.2A CN201510711176A CN106650338A CN 106650338 A CN106650338 A CN 106650338A CN 201510711176 A CN201510711176 A CN 201510711176A CN 106650338 A CN106650338 A CN 106650338A
Authority
CN
China
Prior art keywords
module
debug
prevents
file
linkage
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
CN201510711176.2A
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.)
China Telecom Corp Ltd
Original Assignee
China Telecom Corp 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 China Telecom Corp Ltd filed Critical China Telecom Corp Ltd
Priority to CN201510711176.2A priority Critical patent/CN106650338A/zh
Publication of CN106650338A publication Critical patent/CN106650338A/zh
Pending legal-status Critical Current

Links

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

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

一种防止软件被反调试的方法和系统
技术领域
本发明涉及信息安全领域,尤其涉及一种防止软件被反调试的方法和系统。
背景技术
随着计算机和入侵技术的不断发展,软件业在迅速壮大的同时面临的威胁也在与日俱增,软件开发者为了维护自身的利益,保护科研成果、技术和版权不被侵害,必须对软件进行防破解保护。同样,随着公民安全意识的全面提高,软件的使用者也越来越重视所购买的软件在使用过程中产生的涉及到自身的账户信息、交易数据和访问记录等敏感信息的安全性和软件反调试保护的有效性。
现有的软件反调试保护技术主要是通过本地硬件加密锁或加密锁虚拟机技术来实现程序保护,前者是一个具有程序处理和一定存储能力的硬件,使用成本高和便携性差使其应用场景受限,并且由于内置IC(Integrated Circuit,集成电路)指令不兼容X86指令,保护程序需要针对IC编译器单独设计,从而导致开发过程繁琐、可移植性差,对开发者要求也较高;而后者是通过对运行在X86系列计算机上的程序进行虚拟化映射转换来实现保护功能,但这些仍旧基于本地单机的保护方式对有联网通信要求的C/S(Client/Server,客户机/服务器)应用程序起到的保护非常有限。
图1示出了现有技术中实现防止软件反调试的架构的示意图。如图1所示,在单次运行生命周期内,其中,被保护软件进程101和加密锁虚拟机进程102位于客户端的User层(用户层),映射单元103和反映射单元104位于客户端的Kernel层(内核层)。被保护软件进程101将内存数据提交给映射单元103和反映射单元104,将加密锁虚拟机进程102的output(输出)结果值返回给被保护软件进程101的过程中,由于缺少针对进程钩挂注入和进程寄存器及内存地址的反跟踪保护,导致仍旧可以被反调试工具跟踪调试和捕获、篡改内存数据。并且,由于加密锁虚拟机进程102生命周期小于等于被保护软件进程101,无法保留原始执行结果Hash特征值,导致无法进行再次校检和判定被保护软件进程101的内存是否存在被入侵和篡改的迹象、并且无法及时阻断入侵行为。同时,采用X86虚拟机保护方式导致执行效率降低和系统开销增大。
因此,需要更好的防止逆向调试和跟踪的技术,并不仅对客户端,而且还通过连接服务器的无缺性检查,以便提供更安全的运行环境。
发明内容
本发明提供了一种防止软件被反调试的方法和系统,通过客户端和服务器联动来检测并阻止对软件进行入侵和破解的方法和系统,解决了如何判断客户端上运行的软件正在被调试,并能够阻止继续入侵的安全盲点,从而使攻击者动态反调试目标软件、试图破解其保护壳、篡改程序结构和执行数据的行为无法有效实施。
根据本发明的一个方面,提供了一种防止软件被反调试的方法,包括:
在服务器中的第一防止反调试模块与客户端中的第二防止反调试模块建立联动通道后,第一防止反调试模块通过联动通道周期性的向第二防止反调试模块发送反调试查询请求;
第二防止反调试模块根据反调试查询请求,查询是否存在调试行为,并将查询结果通过联动通道发送给第一防止反调试模块;
第一防止反调试模块根据查询结果,判断被保护软件的运行是否异常;
若判断被保护软件的运行异常,则第一防止反调试模块通过联动通道向第二防止反调试模块发送保护操作指示,以便第二防止反调试模块阻断任何调制行为,从而实现端到端联动安全保护。
在一个实施例中,服务器中的第一Hook拦截模块通过联动通道周期性的向客户端中的第二Hook拦截模块发送Hook查询请求;
第二Hook拦截模块根据Hook查询请求,查询是否存在与被保护软件相关联的Message Hook调用行为,并将查询结果通过联动通道发送给第一Hook拦截模块;
第一Hook拦截模块根据查询结果,判断被保护软件的运行是否异常;
若判断被保护软件的运行异常,则第一Hook拦截模块通过联动通道向第二Hook拦截模块发送保护操作指示,以便第二Hook拦截模块拦截与被保护软件相关联的Message Hook调用行为。
在一个实施例中,服务器中的第一内存入侵拦截模块通过联动通道周期性的向客户端中的第二内存入侵拦截模块发送内存入侵查询请求;
第二内存入侵拦截模块根据内存入侵查询请求,查询是否存在内存入侵行为,并将查询结果通过联动通道发送给第一内存入侵拦截模块;
第一内存入侵拦截模块根据查询结果,判断被保护软件的运行是否异常;
若判断被保护软件的运行异常,则第一内存入侵拦截模块通过联动通道向第二内存入侵拦截模块发送保护操作指示,以便第二内存入侵拦截模块对内存入侵行为进行拦截。
在一个实施例中,服务器中的第一防止文件篡改模块通过联动通道周期性的向客户端中的第二防止文件篡改模块发送文件篡改查询请求;
第二防止文件篡改模块根据文件篡改查询请求,查询与被保护软件相关的文件是否被篡改,并将查询结果通过联动通道发送给第一防止文件篡改模块;
第一防止文件篡改模块根据查询结果,判断被保护软件的运行是否异常;
若判断被保护软件的运行异常,则第一防止文件篡改模块通过联动通道向第二防止文件篡改模块发送保护操作指示,以便第二防止文件篡改模块锁定被篡改文件。
在一个实施例中,在联动通道中断时,第二防止文件篡改模块保存第二内存入侵拦截模块发送的查询结果,以便对被保护软件进行本地监护;
在联动通道重新建立后,第一防止反调试模块执行周期性地向第二防止反调试模块发送查询请求的步骤,以恢复端到端联动安全保护。
根据本发明的另一方面,提供了一种防止软件被反调试的装置,包括:服务器和客户端,服务器包括第一防止反调试模块,客户端包括第二防止反调试模块,其中:
第一防止反调试模块,用于在与第二防止反调试模块建立联动通道后,通过联动通道周期性的向第二防止反调试模块发送反调试查询请求;模块根据查询结果,判断被保护软件的运行是否异常;若判断被保护软件的运行异常,则通过联动通道向第二防止反调试模块发送保护操作指示;
第二防止反调试模块,用于根据反调试查询请求,查询是否存在调试行为,并将查询结果通过联动通道发送给第一防止反调试模块;根据保护操作指示阻断任何调制行为,从而实现端到端联动安全保护。
在一个实施例中,服务器还包括第一Hook拦截模块,客户端还包括第二Hook拦截模块,其中:
第一Hook拦截模块,用于通过联动通道周期性的向第二Hook拦截模块发送Hook查询请求;模块根据查询结果,判断被保护软件的运行是否异常;若判断被保护软件的运行异常,则通过联动通道向第二Hook拦截模块发送保护操作指示;
第二Hook拦截模块,用于根据Hook查询请求,查询是否存在与被保护软件相关联的Message Hook调用行为,并将查询结果通过联动通道发送给第一Hook拦截模块;根据保护操作指示拦截与被保护软件相关联的Message Hook调用行为。
在一个实施例中,服务器还包括第一内存入侵拦截模块,客户端还包括第二内存入侵拦截模块,其中:
第一内存入侵拦截模块,用于通过联动通道周期性的向第二内存入侵拦截模块发送内存入侵查询请求;根据查询结果,判断被保护软件的运行是否异常;若判断被保护软件的运行异常,则通过联动通道向第二内存入侵拦截模块发送保护操作指示;
第二内存入侵拦截模块,用于根据内存入侵查询请求,查询是否存在内存入侵行为,并将查询结果通过联动通道发送给第一内存入侵拦截模块;根据保护操作指示对内存入侵行为进行拦截。
在一个实施例中,服务器还包括第一防止文件篡改模块,客户端还包括第二防止文件篡改模块,其中:
第一防止文件篡改模块,用于通过联动通道周期性的向第二防止文件篡改模块发送文件篡改查询请求;根据查询结果,判断被保护软件的运行是否异常;若判断被保护软件的运行异常,则通过联动通道向第二防止文件篡改模块发送保护操作指示;
第二防止文件篡改模块,用于根据文件篡改查询请求,查询与被保护软件相关的文件是否被篡改,并将查询结果通过联动通道发送给第一防止文件篡改模块;根据保护操作指示锁定被篡改文件。
在一个实施例中,第二防止文件篡改模块,还用于在联动通道中断时,保存第二内存入侵拦截模块发送的查询结果,以便对被保护软件进行本地监护;
第一防止反调试模块,还用于在联动通道重新建立后,执行周期性地向第二防止反调试模块发送查询请求的步骤,以恢复端到端联动安全保护。
本发明的一种防止软件被反调试的方法和系统,通过客户端和服务器联动来检测并阻止对软件进行入侵和破解的方法和系统,解决了如何判断客户端上运行的软件正在被调试,并能够阻止继续入侵的安全盲点,从而使攻击者动态反调试目标软件、试图破解其保护壳、篡改程序结构和执行数据的行为无法有效实施。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中实现防止软件反调试的架构的示意图。
图2为本发明一种防止软件被反调试的方法的一个实施例的示意图。
图3为本发明一种防止软件被反调试的方法的另一个实施例的示意图。
图4为本发明一种防止软件被反调试的方法的又一个实施例的示意图。
图5为本发明一种防止软件被反调试的方法的一个实施例的示意图。
图6为本发明一种防止软件被反调试的系统的一个实施例的示意图。
图7为本发明一种防止软件被反调试的系统的另一个实施例的示意图。
图8为本发明的信息交互图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。
图2为本发明一种防止软件被反调试的方法的一个实施例的示意图。优选的,本实施例的方法由本发明的防止软件被反调试的系统执行。如图2所示,本实施例的方法步骤如下:
步骤201,在服务器中的第一防止反调试模块与客户端中的第二防止反调试模块建立联动通道后,第一防止反调试模块通过联动通道周期性的向第二防止反调试模块发送反调试查询请求。
步骤202,第二防止反调试模块根据反调试查询请求,查询是否存在调试行为,并将查询结果通过联动通道发送给第一防止反调试模块。
步骤203,第一防止反调试模块根据查询结果,判断被保护软件的运行是否异常。
步骤204,若判断被保护软件的运行异常,则第一防止反调试模块通过联动通道向第二防止反调试模块发送保护操作指示,以便第二防止反调试模块阻断任何调制行为,从而实现端到端联动安全保护。
例如,当第一防止反调试模块查询出存在调试行为时,向第二防止反调试模块发送保护操作指示,第二防止反调试模块根据保护操作指示,触发Debug Interrupt Protection(调试中断保护)操作。
本发明的防止软件被反调试的方法通过客户端和服务器联动来检测并阻止对客户端软件的反调试,能够及时阻止入侵行为,有效保护软件。
图3为本发明一种防止软件被反调试的方法的另一个实施例的示意图。优选的,本实施例的方法由本发明的防止软件被反调试的系统执行。如图3所示,本实施例的方法步骤除上述步骤外,还包括:
步骤301,服务器中的第一Hook拦截模块通过联动通道周期性的向客户端中的第二Hook拦截模块发送Hook查询请求。
步骤302,第二Hook拦截模块根据Hook查询请求,查询是否存在与被保护软件相关联的Message Hook调用行为,并将查询结果通过联动通道发送给第一Hook拦截模块。
步骤303,第一Hook拦截模块根据查询结果,判断被保护软件的运行是否异常。
步骤304,若判断被保护软件的运行异常,则第一Hook拦截模块通过联动通道向第二Hook拦截模块发送保护操作指示,以便第二Hook拦截模块拦截与被保护软件相关联的Message Hook调用行为。例如挂接OpenProcess,ReadProcessMemory,WriteProcessMemory等系统API,拦截对保护软件进程使用Windows的Message Hook功能。
可选的,在一个实施例中还包括图4所示的步骤,如下所示:
步骤401,服务器中的第一内存入侵拦截模块通过联动通道周期性的向客户端中的第二内存入侵拦截模块发送内存入侵查询请求。
步骤402,第二内存入侵拦截模块根据内存入侵查询请求,查询是否存在内存入侵行为,并将查询结果通过联动通道发送给第一内存入侵拦截模块。
步骤403,第一内存入侵拦截模块根据查询结果,判断被保护软件的运行是否异常。
步骤404,若判断被保护软件的运行异常,则第一内存入侵拦截模块通过联动通道向第二内存入侵拦截模块发送保护操作指示,以便第二内存入侵拦截模块对内存入侵行为进行拦截。
例如,第一内存入侵拦截模块和第二内存入侵拦截模块在服务器和客户端同步生成捕捉信息包,包含保留被保护软件进程的原始执行结果Hash(散列)特征值,内存堆栈和CPU(Central Processing Unit,中央处理器)寄存器信息,拦截在内核级别上直接跟踪内存、修改output(输出)结果值等非法入侵行为。当发生上述行为时,服务器的第一内存入侵拦截模块向第二内存入侵拦截模块发送保护操作指示,以便第二内存入侵拦截模块对内存入侵行为进行拦截。
可选的,在一个实施例中还包括图5所示的步骤,如下所示:
步骤501,服务器中的第一防止文件篡改模块通过联动通道周期性的向客户端中的第二防止文件篡改模块发送文件篡改查询请求。
步骤502,第二防止文件篡改模块根据文件篡改查询请求,查询与被保护软件相关的文件是否被篡改,并将查询结果通过联动通道发送给第一防止文件篡改模块。
步骤503,第一防止文件篡改模块根据查询结果,判断被保护软件的运行是否异常。
步骤504,若判断被保护软件的运行异常,则第一防止文件篡改模块通过联动通道向第二防止文件篡改模块发送保护操作指示,以便第二防止文件篡改模块锁定被篡改文件。
例如,第一防止文件篡改模块向第二防止文件篡改模块发送文件篡改查询请求,第二防止文件篡改模块根据文件篡改查询请求,监测客户端上所有保护程序文件是否被修改了内容或者文件命名,若发现则向客户端发送错误代码,并要求第二防止文件篡改模块锁定被篡改文件。
可选的,在联动通道中断时,第二防止文件篡改模块保存第二内存入侵拦截模块发送的查询结果,以便对被保护软件进行本地监护;在联动通道重新建立后,第一防止反调试模块执行周期性地向第二防止反调试模块发送查询请求的步骤,以恢复端到端联动安全保护。这样,即使在突发情况发生,联动通道中断时,客户端依然根据中断前接收的查询请求,查询被保护软件的运行情况,根据中断前的保护操作指示对被保护软件进行保护操作,以便对被保护软件进行本地监护。待联动通道恢复后,第一防止反调试模块恢复周期性的向第二防止反调试模块发送查询请求,恢复端到端联动安全保护。
上述实施例客户端中的第二防止反调试模块和第二Hook拦截模块位于客户端的Kernel层,第二内存入侵拦截模块和第二防止文件篡改模块位于User层,第二防止反调试模块和第二Hook拦截模块能够阻止攻击者通过Message Hook或者进程注入方式对被保护软件进程进行跟踪调试和篡改内存数据的入侵行为。
本发明的一种防止软件被反调试的方法,通过客户端和服务器联动来实时检测并阻止对软件进行入侵和破解的方法和系统,解决了如何判断客户端上运行的软件正在被调试,并能够阻止继续入侵的安全盲点,从而使攻击者动态反调试目标软件、试图破解其保护壳、篡改程序结构和执行数据的行为无法有效实施,同时显著降低了X86架构计算机使用防止软件被反调试的系统的难度。
图6为本发明一种防止软件被反调试的系统的一个实施例的示意图。包括:服务器601和客户端602,服务器601包括第一防止反调试模块6011,客户端602包括第二防止反调试模块6021,其中:
第一防止反调试模块6011用于在与第二防止反调试模块6021建立联动通道后,通过联动通道周期性的向第二防止反调试模块6021发送反调试查询请求;模块根据查询结果,判断被保护软件的运行是否异常;若判断被保护软件的运行异常,则通过联动通道向第二防止反调试模块6021发送保护操作指示;
第二防止反调试模块6021用于根据反调试查询请求,查询是否存在调试行为,并将查询结果通过联动通道发送给第一防止反调试模块6011;根据保护操作指示阻断任何调制行为,从而实现端到端联动安全保护。
例如,当第一防止反调试模块6011查询出存在调试行为时,向第二防止反调试模块6021发送保护操作指示,第二防止反调试模块6021根据保护操作指示,触发Debug Interrupt Protection操作。
本发明通过客户端和服务器联动来检测并阻止对客户端软件的反调试,有效保护软件不被恶意攻击者逆向分析与破解
图7为本发明的防止软件被反调试的系统的另一个实施例的示意图。如图7所示,包括服务器701中的第一防止反调试模块7011和客户端702中的第二防止反调试模块7021,分别与图6所示的服务器601中的第一防止反调试模块6011和客户端602中的第二防止反调试模块6021相同或类似。
可选的,服务器701还包括第一Hook拦截模块7012,客户端702还包括第二Hook拦截模块7022,其中:
第一Hook拦截模块7012用于通过联动通道周期性的向第二Hook拦截模块7022发送Hook查询请求;模块根据查询结果,判断被保护软件的运行是否异常;若判断被保护软件的运行异常,则通过联动通道向第二Hook拦截模块7022发送保护操作指示;
第二Hook拦截模块7022用于根据Hook查询请求,查询是否存在与被保护软件相关联的Message Hook调用行为,并将查询结果通过联动通道发送给第一Hook拦截模块7012;根据保护操作指示拦截与被保护软件相关联的Message Hook调用行为。例如挂接OpenProcess,ReadProcessMemory,WriteProcessMemory等系统API,拦截对保护软件进程使用Windows的Message Hook功能。
可选的,服务器701还包括第一内存入侵拦截模块7013,客户端702还包括第二内存入侵拦截模块7023,其中:
第一内存入侵拦截模块7013用于通过联动通道周期性的向第二内存入侵拦截模块7023发送内存入侵查询请求;根据查询结果,判断被保护软件的运行是否异常;若判断被保护软件的运行异常,则通过联动通道向第二内存入侵拦截模块7023发送保护操作指示;
第二内存入侵拦截模块7023用于根据内存入侵查询请求,查询是否存在内存入侵行为,并将查询结果通过联动通道发送给第一内存入侵拦截模块7013;根据保护操作指示对内存入侵行为进行拦截。
例如,第一内存入侵拦截模块7013和第二内存入侵拦截模块7023在服务器701和客户端702同步生成捕捉信息包,包含保留被保护软件进程的原始执行结果Hash特征值,内存堆栈和CPU寄存器信息,拦截在内核级别上直接跟踪内存、修改output结果值等非法入侵行为。当发生上述行为时,第一内存入侵拦截模块7013向第二内存入侵拦截模块7023发送保护操作指示,以便第二内存入侵拦截模块7023对内存入侵行为进行拦截。
可选的,服务器701还包括第一防止文件篡改模块7014,客户端702还包括第二防止文件篡改模块7024,其中:
第一防止文件篡改模块7014用于通过联动通道周期性的向第二防止文件篡改模块7024发送文件篡改查询请求;根据查询结果,判断被保护软件的运行是否异常;若判断被保护软件的运行异常,则通过联动通道向第二防止文件篡改模块7024发送保护操作指示;
第二防止文件篡改模块7024用于根据文件篡改查询请求,查询与被保护软件相关的文件是否被篡改,并将查询结果通过联动通道发送给第一防止文件篡改模块7014;根据保护操作指示锁定被篡改文件。
例如,第一防止文件篡改模块7014向第二防止文件篡改模块7024发送文件篡改查询请求,第二防止文件篡改模块7024根据文件篡改查询请求,监测客户端702上所有保护程序文件是否被修改了内容或者文件命名,若发现存在上述行为,则向第二防止文件篡改模块7024发送错误代码,并要求第二防止文件篡改模块7024锁定被篡改文件。
可选的,第二防止文件篡改模块7024还用于在联动通道中断时,保存第二内存入侵拦截模块7023发送的查询结果,以便对被保护软件进行本地监护;第一防止反调试模块7011还用于在联动通道重新建立后,执行周期性地向第二防止反调试模块7021发送查询请求的步骤,以恢复端到端联动安全保护。这样,即使在突发情况发生,联动通道中断时,客户端702依然根据中断前接收的查询请求,查询被保护软件的运行情况,根据中断前的保护操作指示对被保护软件进行保护操作,以便对被保护软件进行本地监护。待联动通道恢复后,第一防止反调试模块7011恢复周期性的向第二防止反调试模块7021发送查询请求,恢复端到端联动安全保护。
上述实施例客户端中的第二防止反调试模块7021和第二Hook拦截模块7022位于客户端的Kernel层,第二内存入侵拦截模块7023和第二防止文件篡改模块7024位于User层,第二防止反调试模块7021和第二Hook拦截模块7022能够阻止攻击者通过Message Hook或者进程注入方式对被保护软件进程进行跟踪调试和篡改内存数据的入侵行为。
本发明的一种防止软件被反调试的系统,通过客户端和服务器联动来实时检测并阻止对软件进行入侵和破解的方法和系统,解决了如何判断客户端上运行的软件正在被调试,并能够阻止继续入侵的安全盲点,从而使攻击者动态反调试目标软件、试图破解其保护壳、篡改程序结构和执行数据的行为无法有效实施,同时显著降低了X86架构计算机使用防止软件被反调试的系统的难度。
图8为本发明的信息交互图,如图8所示,并结合图2-图7,包括:
步骤801,服务器中的第一防止反调试模块与客户端中的第二防止反调试模块建立联动通道。例如,将第一防止反调试模块和第二防止反调试模块初始化,对于第一防止反调试模块,通过_CreateServerObject函数生成_SERVER_HANDLE用于建立联动通道。_SERVER_HANDLE将维持到进程监护的整个生命周期结束。对于第二防止反调试模块,将_CreateClientObject函数与ServerHandle作为参数来生成_CLIENT_HANDLE。这个Handle(句柄)将维持到客户端与网络断开为止。
步骤802,服务器的向客户端发送查询请求。为了保证客户端被保护软件进程防破解的有效性,服务器中如图7所示的各模块发送相应的查询请求至客户端中对应的模块。查询请求将使用_MakeRequest函数来生成,并将Client Handle作为参数。
步骤803,客户端的如图7所示的各模块查询被保护软件的运行情况。
步骤804,客户端的各模块将查询结果发送给服务器相应的模块。其中,客户端中各模块响应服务器中相应模块的查询请求做出相应的应答,将查询结果通过_MakeResponse函数生成应答消息。
步骤805,服务器的各模块根据查询结果判断被保护软件的运行是否异常。例如,服务器可以首先通过_VerifyResponse函数来检查客户端的应答消息是否有效。然后在_VerifyResponse函数中发生除_AntiDPCltStatus=x009(代表进程执行正常结束)以外的值时都判断为存在异常情况,即条件为真。
步骤806,若服务器中存在模块判断被保护软件的运行异常,则向客户端的相应模块发送保护操作指示。例如服务器中的第一防止反调试模块根据_AntiDPCltStatus的值,做出对应的_MakeRequest处理,即向客户端中的第二防止反调试模块发送保护操作指示。
步骤807,客户端的各模块根据保护操作指示进行保护操作。例如当发生内存入侵时,拦截在内核级别上直接跟踪内存、修改output(输出)结果值等非法入侵行为。当发生修改文件内容或文件名时,锁定被篡改文件。检测并阻断所有调试器的任何调试,当发现视图调试特征时,触发Debug Interrupt Protection操作。当发生与被保护软件相关联的Message Hook调用行为时,拦截对保护软件进程使用Windows的Message Hook功能。
本发明的一种防止软件被反调试的方法和系统,通过客户端和服务器端到端联动来实时检测并阻止对软件进行入侵和破解的方法和系统,解决了如何判断客户端上运行的软件正在被调试,并能够阻止继续入侵的安全盲点,从而使攻击者动态反调试目标软件、试图破解其保护壳、篡改程序结构和执行数据的行为无法有效实施,同时显著降低了X86架构计算机使用防止软件被反调试的系统的难度。本发明还能够使软件开发者自身的利益,科研成果、技术和版权不被侵害。对于软件的使用者在使用软件过程中产生的涉及到自身的账户信息、交易数据和访问记录等敏感信息,能够提供更好的防窃取保护,维护每位软件使用者享有公平、有序的资源使用机会的权利。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
本发明的描述是为了示例和描述起见而给出的,而并不是无遗漏的或者将本发明限于所公开的形式。很多修改和变化对于本领域的普通技术人员而言是显然的。选择和描述实施例是为了更好说明本发明的原理和实际应用,并且使本领域的普通技术人员能够理解本发明从而设计适于特定用途的带有各种修改的各种实施例。

Claims (10)

1.一种防止软件被反调试的方法,其特征在于,包括:
在服务器中的第一防止反调试模块与客户端中的第二防止反调试模块建立联动通道后,所述第一防止反调试模块通过所述联动通道周期性的向所述第二防止反调试模块发送反调试查询请求;
所述第二防止反调试模块根据反调试查询请求,查询是否存在调试行为,并将查询结果通过所述联动通道发送给所述第一防止反调试模块;
所述第一防止反调试模块根据所述查询结果,判断所述被保护软件的运行是否异常;
若判断所述被保护软件的运行异常,则所述第一防止反调试模块通过所述联动通道向所述第二防止反调试模块发送保护操作指示,以便所述第二防止反调试模块阻断任何调制行为,从而实现端到端联动安全保护。
2.根据权利要求1所述的方法,其特征在于,还包括:
服务器中的第一Hook拦截模块通过所述联动通道周期性的向客户端中的第二Hook拦截模块发送Hook查询请求;
所述第二Hook拦截模块根据Hook查询请求,查询是否存在与所述被保护软件相关联的Message Hook调用行为,并将查询结果通过所述联动通道发送给所述第一Hook拦截模块;
所述第一Hook拦截模块根据所述查询结果,判断所述被保护软件的运行是否异常;
若判断所述被保护软件的运行异常,则所述第一Hook拦截模块通过所述联动通道向所述第二Hook拦截模块发送保护操作指示,以便所述第二Hook拦截模块拦截与所述被保护软件相关联的MessageHook调用行为。
3.根据权利要求2所述的方法,其特征在于,还包括:
服务器中的第一内存入侵拦截模块通过所述联动通道周期性的向客户端中的第二内存入侵拦截模块发送内存入侵查询请求;
所述第二内存入侵拦截模块根据内存入侵查询请求,查询是否存在内存入侵行为,并将查询结果通过所述联动通道发送给所述第一内存入侵拦截模块;
所述第一内存入侵拦截模块根据所述查询结果,判断所述被保护软件的运行是否异常;
若判断所述被保护软件的运行异常,则所述第一内存入侵拦截模块通过所述联动通道向所述第二内存入侵拦截模块发送保护操作指示,以便所述第二内存入侵拦截模块对内存入侵行为进行拦截。
4.根据权利要求2所述的方法,其特征在于,还包括:
服务器中的第一防止文件篡改模块通过所述联动通道周期性的向客户端中的第二防止文件篡改模块发送文件篡改查询请求;
所述第二防止文件篡改模块根据文件篡改查询请求,查询与所述被保护软件相关的文件是否被篡改,并将查询结果通过所述联动通道发送给所述第一防止文件篡改模块;
所述第一防止文件篡改模块根据所述查询结果,判断所述被保护软件的运行是否异常;
若判断所述被保护软件的运行异常,则所述第一防止文件篡改模块通过所述联动通道向所述第二防止文件篡改模块发送保护操作指示,以便所述第二防止文件篡改模块锁定被篡改文件。
5.根据权利要求4所述的方法,其特征在于,还包括:
在所述联动通道中断时,所述第二防止文件篡改模块保存所述第二内存入侵拦截模块发送的查询结果,以便对所述被保护软件进行本地监护;
在联动通道重新建立后,所述第一防止反调试模块执行周期性地向所述第二防止反调试模块发送查询请求的步骤,以恢复端到端联动安全保护。
6.一种防止软件被反调试的系统,其特征在于,包括:服务器和客户端,所述服务器包括第一防止反调试模块,所述客户端包括第二防止反调试模块,其中:
所述第一防止反调试模块,用于在与所述第二防止反调试模块建立联动通道后,通过所述联动通道周期性的向所述第二防止反调试模块发送反调试查询请求;模块根据所述查询结果,判断所述被保护软件的运行是否异常;若判断所述被保护软件的运行异常,则通过所述联动通道向所述第二防止反调试模块发送保护操作指示;
所述第二防止反调试模块,用于根据反调试查询请求,查询是否存在调试行为,并将查询结果通过所述联动通道发送给所述第一防止反调试模块;根据所述保护操作指示阻断任何调制行为,从而实现端到端联动安全保护。
7.根据权利要求6所述的系统,其特征在于,所述服务器还包括第一Hook拦截模块,所述客户端还包括第二Hook拦截模块,其中:
所述第一Hook拦截模块,用于通过所述联动通道周期性的向所述第二Hook拦截模块发送Hook查询请求;模块根据所述查询结果,判断所述被保护软件的运行是否异常;若判断所述被保护软件的运行异常,则通过所述联动通道向所述第二Hook拦截模块发送保护操作指示;
所述第二Hook拦截模块,用于根据Hook查询请求,查询是否存在与所述被保护软件相关联的Message Hook调用行为,并将查询结果通过所述联动通道发送给所述第一Hook拦截模块;根据所述保护操作指示拦截与所述被保护软件相关联的Message Hook调用行为。
8.根据权利要求7所述的系统,其特征在于,所述服务器还包括第一内存入侵拦截模块,所述客户端还包括第二内存入侵拦截模块,其中:
所述第一内存入侵拦截模块,用于通过所述联动通道周期性的向所述第二内存入侵拦截模块发送内存入侵查询请求;根据所述查询结果,判断所述被保护软件的运行是否异常;若判断所述被保护软件的运行异常,则通过所述联动通道向所述第二内存入侵拦截模块发送保护操作指示;
所述第二内存入侵拦截模块,用于根据内存入侵查询请求,查询是否存在内存入侵行为,并将查询结果通过所述联动通道发送给所述第一内存入侵拦截模块;根据所述保护操作指示对内存入侵行为进行拦截。
9.根据权利要求7所述的系统,其特征在于,所述服务器还包括第一防止文件篡改模块,所述客户端还包括第二防止文件篡改模块,其中:
所述第一防止文件篡改模块,用于通过所述联动通道周期性的向所述第二防止文件篡改模块发送文件篡改查询请求;根据所述查询结果,判断所述被保护软件的运行是否异常;若判断所述被保护软件的运行异常,则通过所述联动通道向所述第二防止文件篡改模块发送保护操作指示;
所述第二防止文件篡改模块,用于根据文件篡改查询请求,查询与所述被保护软件相关的文件是否被篡改,并将查询结果通过所述联动通道发送给所述第一防止文件篡改模块;根据所述保护操作指示锁定被篡改文件。
10.根据权利要求9所述的系统,其特征在于,
所述第二防止文件篡改模块,还用于在所述联动通道中断时,保存所述第二内存入侵拦截模块发送的查询结果,以便对所述被保护软件进行本地监护;
所述第一防止反调试模块,还用于在联动通道重新建立后,执行周期性地向所述第二防止反调试模块发送查询请求的步骤,以恢复端到端联动安全保护。
CN201510711176.2A 2015-10-28 2015-10-28 一种防止软件被反调试的方法和系统 Pending CN106650338A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510711176.2A CN106650338A (zh) 2015-10-28 2015-10-28 一种防止软件被反调试的方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510711176.2A CN106650338A (zh) 2015-10-28 2015-10-28 一种防止软件被反调试的方法和系统

Publications (1)

Publication Number Publication Date
CN106650338A true CN106650338A (zh) 2017-05-10

Family

ID=58815951

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510711176.2A Pending CN106650338A (zh) 2015-10-28 2015-10-28 一种防止软件被反调试的方法和系统

Country Status (1)

Country Link
CN (1) CN106650338A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107391970A (zh) * 2017-06-07 2017-11-24 武汉斗鱼网络科技有限公司 Flash应用程序中的函数访问控制方法及装置
CN109726115A (zh) * 2018-11-06 2019-05-07 北京大学 一种基于Intel处理器跟踪的反调试自动绕过方法
CN112527677A (zh) * 2020-12-23 2021-03-19 北京深思数盾科技股份有限公司 应用程序的保护方法及电子设备
US11409635B2 (en) 2019-08-23 2022-08-09 Raytheon Company Hacker-resistant anti-debug system

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103164643A (zh) * 2011-12-08 2013-06-19 北京深思洛克软件技术股份有限公司 一种通过硬件进行反调试的方法和装置
CN104462959A (zh) * 2014-12-04 2015-03-25 北京奇虎科技有限公司 一种安卓应用的加固保护方法、服务器和系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103164643A (zh) * 2011-12-08 2013-06-19 北京深思洛克软件技术股份有限公司 一种通过硬件进行反调试的方法和装置
CN104462959A (zh) * 2014-12-04 2015-03-25 北京奇虎科技有限公司 一种安卓应用的加固保护方法、服务器和系统

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107391970A (zh) * 2017-06-07 2017-11-24 武汉斗鱼网络科技有限公司 Flash应用程序中的函数访问控制方法及装置
CN107391970B (zh) * 2017-06-07 2020-08-04 武汉斗鱼网络科技有限公司 Flash应用程序中的函数访问控制方法及装置
CN109726115A (zh) * 2018-11-06 2019-05-07 北京大学 一种基于Intel处理器跟踪的反调试自动绕过方法
CN109726115B (zh) * 2018-11-06 2020-09-22 北京大学 一种基于Intel处理器跟踪的反调试自动绕过方法
US11409635B2 (en) 2019-08-23 2022-08-09 Raytheon Company Hacker-resistant anti-debug system
CN112527677A (zh) * 2020-12-23 2021-03-19 北京深思数盾科技股份有限公司 应用程序的保护方法及电子设备
CN112527677B (zh) * 2020-12-23 2021-09-24 北京深思数盾科技股份有限公司 应用程序的保护方法及电子设备

Similar Documents

Publication Publication Date Title
EP3420488B1 (en) Retention and accessibility of data characterizing events on an endpoint computer
US8285999B1 (en) System and method for authenticating remote execution
US8949988B2 (en) Methods for proactively securing a web application and apparatuses thereof
CN109067815A (zh) 攻击事件溯源分析方法、系统、用户设备及存储介质
CN112787992A (zh) 一种敏感数据的检测与防护的方法、装置、设备和介质
CN105408911A (zh) 硬件和软件执行概况分析
US11411965B2 (en) Method and system of attack detection and protection in computer systems
US20130061323A1 (en) System and method for protecting against malware utilizing key loggers
CN102045319B (zh) Sql注入攻击检测方法及其装置
CN102111267A (zh) 一种基于数字签名的网站安全保护方法及系统
CN102222194A (zh) Linux主机计算环境安全保护的模块及方法
CN106650338A (zh) 一种防止软件被反调试的方法和系统
CN108123939A (zh) 恶意行为实时检测方法及装置
CN104778423B (zh) 基于文件驱动的水印对比的网页防篡改方法
CN110516448A (zh) 一种灰盒测试方法、装置、设备及可读存储介质
CN113032793A (zh) 数据安全智能加固系统及方法
CN106909835A (zh) 一种基于cpu时空隔离机制实现内核完整性度量的方法
CN111625821A (zh) 一种基于云平台的应用攻击检测系统
CN111611590A (zh) 涉及应用程序的数据安全的方法及装置
CN106778257A (zh) 一种虚拟机防逃逸装置
CN105871775B (zh) 一种安全防护方法及dpma防护模型
KR102159399B1 (ko) 웹서버 모니터링 및 악성코드 분석 장치
Tedyyana et al. Teler real-time http intrusion detection at website with nginx web server
CN112613000A (zh) 一种敏感信息保护方法、装置、电子设备及可读存储介质
KR20190020523A (ko) 로그 분석을 이용한 공격 탐지 장치 및 방법

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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20170510