CN112948241B - 应用程序的反调试方法、装置、电子设备及存储介质 - Google Patents

应用程序的反调试方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN112948241B
CN112948241B CN202110178841.1A CN202110178841A CN112948241B CN 112948241 B CN112948241 B CN 112948241B CN 202110178841 A CN202110178841 A CN 202110178841A CN 112948241 B CN112948241 B CN 112948241B
Authority
CN
China
Prior art keywords
daemon
main process
application program
debugging
mode
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
Application number
CN202110178841.1A
Other languages
English (en)
Other versions
CN112948241A (zh
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 QIYI Century Science and Technology Co Ltd
Original Assignee
Beijing QIYI Century Science and 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 QIYI Century Science and Technology Co Ltd filed Critical Beijing QIYI Century Science and Technology Co Ltd
Priority to CN202110178841.1A priority Critical patent/CN112948241B/zh
Publication of CN112948241A publication Critical patent/CN112948241A/zh
Application granted granted Critical
Publication of CN112948241B publication Critical patent/CN112948241B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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
    • G06F11/3644Software debugging by instrumenting at runtime
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/524Deadlock detection or avoidance
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

本发明实施例提供了一种应用程序的反调试方法、装置、电子设备及存储介质,所述方法包括:在启动应用程序的情况下,调用预设的反调试代码创建守护进程;确定预先设置的反调试模式,其中,所述反调试模式包括守护进程调试模式或主进程调试模式;在所述反调试模式为所述守护进程调试模式的情况下,设置所述守护进程被所述应用程序主进程调试,以及设置所述守护进程以非阻塞、非挂起方式调试所述主进程。如此在设置应用程序主进程与守护进程相互调试的过程中,在反调试模式为守护进程调试模式的情况下,设置守护进程以非阻塞、非挂起方式调试应用程序主进程,可以提高兼容性,避免在不同终端上产生死锁,从而保证应用程序正常运行。

Description

应用程序的反调试方法、装置、电子设备及存储介质
技术领域
本发明涉及信息安全技术领域,尤其涉及一种应用程序的反调试方法、装置、电子设备及存储介质。
背景技术
安卓是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统,因此安卓APP(Application,应用程序)与Linux应用程序一样具备“被调试”的风险。攻击者可以使用安卓中root权限,执行系统ptrace接口编写的注入程序,对任意安卓APP进行调试,进而动态分析程序逻辑,实现进程注入、修改寄存器等非法操作。
为此,针对安卓APP的反调试方案逐渐涌现出来,目前反调试方案通常包括:安卓APP主进程自身启动守护进程,主进程与守护进程相互调试。由于安卓机制的缘故(一个进程只能被另一个进程调试),使得其它进程就无法再次调试主进程,从而达到安卓APP反调试的目的。由于主进程与守护进程相互调试,兼容性差,将在不同终端上产生死锁,导致安卓APP频繁卡死。
发明内容
本发明实施例的目的在于提供一种应用程序的反调试方法、装置、电子设备及存储介质,以实现提高兼容性,避免在不同终端上产生死锁,从而保证应用程序正常运行的有益效果。具体技术方案如下:
在本发明实施例的第一方面,首先提供了一种应用程序的反调试方法,所述包括:
在启动应用程序的情况下,调用预设的反调试代码创建守护进程;
确定预先设置的反调试模式,其中,所述反调试模式包括守护进程调试模式或主进程调试模式;
在所述反调试模式为所述守护进程调试模式的情况下,设置所述守护进程被所述应用程序主进程调试,以及设置所述守护进程以非阻塞、非挂起方式调试所述主进程。
在一个可选的实施方式中,所述设置所述守护进程被所述应用程序主进程调试,以及设置所述守护进程以非阻塞、非挂起方式调试所述主进程,包括:
调用操作系统中第一系统函数,设置所述守护进程被所述应用程序主进程调试;以及,
调用操作系统中隐藏的第二系统函数,设置所述守护进程以非阻塞、非挂起方式调试所述主进程。
在一个可选的实施方式中,所述方法还包括:
在所述反调试模式为所述主进程调试模式的情况下,设置所述应用程序主进程以非阻塞、非挂起方式调试所述守护进程,以及设置所述应用程序主进程被所述守护进程调试。
在一个可选的实施方式中,所述设置所述应用程序主进程以非阻塞、非挂起方式调试所述守护进程,以及设置所述应用程序主进程被所述守护进程调试,包括:
调用操作系统中隐藏的第二系统函数,设置所述应用程序主进程以非阻塞、非挂起方式调试所述守护进程;以及,
调用操作系统中第一系统函数,设置所述应用程序主进程被所述守护进程调试。
在一个可选的实施方式中,所述方法还包括:
在所述守护进程等待所述主进程的退出信号的情况下,设置所述守护进程阻塞;
在所述守护进程接收到所述主进程的退出信号的情况下,结束所述守护进程。
在一个可选的实施方式中,所述方法还包括:
在所述主进程启动的线程等待所述守护进程的退出信号的情况下,设置所述线程阻塞;
在所述主进程启动的线程接收到所述守护进程的退出信号的情况下,结束所述主进程。
在一个可选的实施方式中,所述方法还包括:
若调用预设的反调试代码创建守护进程失败,则结束所述应用程序主进程。
在一个可选的实施方式中,所述反调试代码位于所述应用程序的程序入口。
在本发明实施例的第二方面,还提供了一种应用程序的反调试装置,所述装置包括:
进程创建模块,用于在启动应用程序的情况下,调用预设的反调试代码创建守护进程;
模式确定模块,用于确定预先设置的反调试模式,其中,所述反调试模式包括守护进程调试模式或主进程调试模式;
进程设置模块,用于在所述反调试模式为所述守护进程调试模式的情况下,设置所述守护进程被所述应用程序主进程调试,以及设置所述守护进程以非阻塞、非挂起方式调试所述主进程。
在本发明实施例的第三方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述第一方面中任一所述的应用程序的反调试方法。
在本发明实施例的第四方面,还提供了一种存储介质,所述存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面中任一所述的应用程序的反调试方法。
在本发明实施例的第五方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面中任一所述的应用程序的反调试方法。
本发明实施例提供的技术方案,在启动应用程序的情况下,调用预设的反调试代码创建守护进程,确定预先设置的反调试模式,其中,反调试模式包括守护进程调试模式或主进程调试模式,在反调试模式为守护进程调试模式的情况下,设置守护进程被该应用程序主进程调试,以及设置守护进程以非阻塞、非挂起方式调试该应用程序主进程。如此在设置应用程序主进程与守护进程相互调试的过程中,在反调试模式为守护进程调试模式的情况下,设置守护进程以非阻塞、非挂起方式调试应用程序主进程,可以提高兼容性,避免在不同终端上产生死锁,从而保证应用程序正常运行。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中示出的一种应用程序的反调试方法的实施流程示意图;
图2为本发明实施例中示出的另一种应用程序的反调试方法的实施流程示意图;
图3为本发明实施例中示出的另一种应用程序的反调试方法的实施流程示意图;
图4为本发明实施例中示出的一种应用程序的反调试装置的结构示意图;
图5为本发明实施例中示出的一种电子设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
如图1所示,为本发明实施例提供的一种应用程序的反调试方法的实施流程示意图,该方法可以用于处理器,具体可以包括以下步骤:
S101,在启动应用程序的情况下,调用预设的反调试代码创建守护进程。
对于待反调试的应用程序,在启动该应用程序的情况下,可以调用预设的反调试代码创建守护进程,以启动反调试功能。例如,在启动应用程序A的情况下,调用预设的Core代码创建守护进程,以启动反调试功能。
其中,对于反调试代码,具体执行以下步骤,来创建守护进程:加载so文件,执行so文件中注册的native函数,而在native函数里,则调用fork函数(fork函数是android NDK/Linux系统函数)创建守护进程。
例如,对于Core代码,执行以下步骤,来创建守护进程(Child_A):加载so文件,执行so文件中注册的native函数,而在native函数里,调用fork函数创建守护进程(Child_A)。
此外,若调用预设的反调试代码创建守护进程失败,即调用fork函数创建守护进程失败,则应该结束应用程序主进程,流程自此结束。需要说明的是,这里之所以这么做,因为现在很多攻击者会重刷系统,拦截fork函数,所以增加这个步骤可以有效抵御定制系统的调试攻击。
S102,确定预先设置的反调试模式,其中,所述反调试模式包括守护进程调试模式或主进程调试模式。
在本发明实施例中,提供两种反调试模式,其中,反调试模式包括守护进程调试模式、主进程调试模式。确定预先设置的反调试模式,该反调试可以是守护进程调试模式或主进程调试模式。
需要说明的是,对于守护进程调试模式,用于设置守护进程以非阻塞、非挂起方式调试应用程序主进程,而对于主进程调试模式,用于设置应用程序主进程以非阻塞、非挂起方式调试守护进程。
需要说明的是,待反调试的应用程序的程序入口包括反调试模式参数,该反调试模式参数例如可以是0或1,这里0可以代表守护进程调试模式,1可以代表主进程调试模式,基于待反调试的应用程序对兼容性的要求(这里待反调试的应用程序内部功能模块较多,且比较复杂,可以理解为对兼容性的要求很高,相反,待反调试的应用程序内部功能模块较少,且比较简单,可以理解为对兼容性的要求没那么高),如果待反调试的应用程序对兼容性的要求很高,可以将该反调试模式参数设置为0,如果待反调试的应用程序对兼容性的要求没那么高(即一般),可以将该反调试模式参数设置为1,基于此设置该反调试模式参数,从而可以基于该反调试模式参数确定预设设置的反调试模式,本发明实施例对此不作限定。
S103,在所述反调试模式为所述守护进程调试模式的情况下,设置所述守护进程被所述应用程序主进程调试,以及设置所述守护进程以非阻塞、非挂起方式调试所述主进程。
对于守护进程,在该反调试模式为守护进程调试模式的情况下,本发明实施例中设置该守护进程被应用程序主进程调试,与此同时,设置该守护进程以非阻塞、非挂起方式调试应用程序主进程,即应用程序主进程与守护进程相互调试。
如此在设置应用程序主进程与守护进程相互调试的过程中,在该反调试模式为守护进程调试模式的情况下,设置守护进程以非阻塞、非挂起方式调试应用程序主进程,可以提高兼容性,避免在不同终端上产生死锁,从而保证应用程序正常运行。
例如,对于守护进程(Child_A),在该反调试模式为守护进程调试模式的情况下,本发明实施例中设置该守护进程(Child_A)被应用程序A主进程调试,与此同时,设置该守护进程(Child_A)以非阻塞、非挂起方式调试应用程序A主进程,如此应用程序A主进程与守护进程(Child_A)相互调试。
通过上述对本发明实施例提供的技术方案的描述,在启动应用程序的情况下,调用预设的反调试代码创建守护进程,确定预先设置的反调试模式,其中,反调试模式包括守护进程调试模式或主进程调试模式,在反调试模式为守护进程调试模式的情况下,设置守护进程被该应用程序主进程调试,以及设置守护进程以非阻塞、非挂起方式调试该应用程序主进程。
如此在设置应用程序主进程与守护进程相互调试的过程中,在反调试模式为守护进程调试模式的情况下,设置守护进程以非阻塞、非挂起方式调试应用程序主进程,可以提高兼容性,避免在不同终端上产生死锁,从而保证应用程序正常运行。
如图2所示,为本发明实施例提供的另一种应用程序的反调试方法的实施流程示意图,该方法可以用于处理器,具体可以包括以下步骤:
S201,在启动应用程序的情况下,调用预设的反调试代码创建守护进程。
在本发明实施例中,本步骤与上述步骤S101类似,本发明实施例在此不再一一赘述。
S202,确定预先设置的反调试模式,其中,所述反调试模式包括守护进程调试模式或主进程调试模式。
在本发明实施例中,本步骤与上述步骤S102类似,本发明实施例在此不再一一赘述。
S203,在所述反调试模式为所述守护进程调试模式的情况下,设置所述守护进程被所述应用程序主进程调试,以及设置所述守护进程以非阻塞、非挂起方式调试所述主进程。
对于反调试模式,在该反调试模式为守护进程调试模式的情况下,本发明实施例设置该守护进程被应用程序主进程调试,与此同时,设置该守护进程以非阻塞、非挂起方式调试应用程序主进程,即应用程序主进程与守护进程相互调试。
其中,本发明实施例调用操作系统中第一系统函数,设置该守护进程被应用程序主进程调试,与此同时,调用操作系统中隐藏的第二系统函数,设置守护进程以非阻塞、非挂起方式调试应用程序主进程,以实现应用程序主进程与守护进程相互调试。
例如,调用Android NDK(Native Development Kit,原生开发工具包)系统函数(例如ptrace(PTRACE_TRACEME,0,NULL,NULL)),设置守护进程(Child_A)被应用程序A主进程调试,与此同时,调用Android NDK隐藏的系统函数(例如ptrace(PTRACE_SEIZE,parent,NULL,NULL),其中PTRACE_SEIZE在NDK的sys/ptrace.h头文件是不存在的,但因为Android底层是基于linux内核的,所以依然能够使用这个在linux存在的API),设置守护进程(Child_A)以非阻塞、非挂起方式调试应用程序A主进程。
需要说明的是,对于操作系统中第一系统函数,例如ptrace(PTRACE_TRACEME,0,NULL,NULL),通常为被追踪者使用,用来指示此进程将由其父进程跟踪(这里的跟踪等于调试的意思,当此进程被跟踪时,每次接收到信号都会停止执行,即使不对信号进行处理(SIGKILL信号除外)),在该反调试模式为守护进程调试模式的情况下,操作系统中第一系统函即用来指示守护进程将由守护进程的应用程序主进程跟踪(当守护进程被跟踪时,每次接收到信号都会停止执行,即使不对信号进行处理(SIGKILL信号除外))。
需要说明的是,在该反调试模式为守护进程调试模式的情况下,对于操作系统中隐藏的第二系统函数,例如ptrace(PTRACE_SEIZE,parent,NULL,NULL),用来指示应用程序主进程将由守护进程跟踪(这里的跟踪等于调试的意思,与PTRACE_TRACEME不同的是,当应用程序主进程被跟踪时,每次接收到信号都不会停止执行,即使不对信号进行处理(SIGKILL信号除外)),此时应用程序主进程依然可以执行其他操作,依然可以与其它进程通信,达到设置守护进程以非阻塞、非挂起方式调试应用程序主进程的目的,可以提高兼容性,避免在不同终端上产生死锁,从而保证应用程序正常运行。
S204,在所述反调试模式为所述主进程调试模式的情况下,设置所述应用程序主进程以非阻塞、非挂起方式调试所述守护进程,以及设置所述应用程序主进程被所述守护进程调试。
对于反调试模式,在该反调试模式为主进程调试模式的情况下,本发明实施例设置应用程序主进程以非阻塞、非挂起方式调试守护进程,与此同时,设置应用程序主进程被守护进程调试,即应用程序主进程与守护进程相互调试。
其中,本发明实施例调用操作系统中隐藏的第二系统函数,设置应用程序主进程以非阻塞、非挂起方式调试守护进程,与此同时,调用操作系统中第一系统函数,设置应用程序主进程被守护进程调试,以实现应用程序主进程与守护进程相互调试。
例如,调用Android NDK隐藏的系统函数,设置应用程序A主进程非阻塞、非挂起方式调试守护进程(Child_A),与此同时,调用Android NDK系统函数,设置应用程序A主进程被守护进程(Child_A)调试,如此应用程序A主进程与守护进程(Child_A)相互调试。
需要说明的是,对于操作系统中第一系统函数,例如ptrace(PTRACE_TRACEME,0,NULL,NULL),通常为被追踪者使用,用来指示此进程将由其父进程跟踪(这里的跟踪等于调试的意思,当此进程被跟踪时,每次接收到信号都会停止执行,即使不对信号进行处理(SIGKILL信号除外)),在该反调试模式为主进程调试模式的情况下,操作系统中第一系统函数即用来指示应用程序主进程将由应用程序主进程的守护进程跟踪(当应用程序主进程被跟踪时,每次接收到信号都会停止执行,即使不对信号进行处理(SIGKILL信号除外))。
需要说明的是,在该反调试模式为主进程调试模式的情况下,对于操作系统中隐藏的第二系统函数,例如ptrace(PTRACE_SEIZE,parent,NULL,NULL),用来指示守护进程将由应用程序主进程跟踪(这里的跟踪等于调试的意思,与PTRACE_TRACEME不同的是,当守护进程被跟踪时,每次接收到信号都不会停止执行,即使不对信号进行处理(SIGKILL信号除外)),此时守护进程依然可以执行其他操作,依然可以与其它进程通信,达到设置应用程序主进程以非阻塞、非挂起方式调试守护进程的目的,同样可以提高兼容性,避免在不同终端上产生死锁,从而保证应用程序正常运行。
此外,需要说明的是,为了更可靠的提高兼容性,避免在不同终端上产生死锁,从而保证应用程序正常运行,优选的,设置该守护进程被应用程序主进程调试,与此同时,设置该守护进程以非阻塞、非挂起方式调试应用程序主进程,本发明实施例对此不作限定。
如图3所示,为本发明实施例提供的另一种应用程序的反调试方法的实施流程示意图,该方法可以用于处理器,具体可以包括以下步骤:
S301,在启动应用程序的情况下,调用预设的反调试代码创建守护进程。
在本发明实施例中,可以预先在应用程序的程序入口嵌入反调试代码,如此反调试代码位于应用程序的程序入口,可以确定该应用程序为待反调试的应用程序。
例如,对于Android APP(Application,应用程序),可以预先在Android APP程序入口(Application attach Base Context)嵌入反调试代码(Core代码),可以确定该Android APP为待反调试的应用程序。
需要说明的是,在应用程序的程序入口嵌入反调试代码,在启动该应用程序的情况下,可以第一时间调用反调试代码创建守护进程,以启动反调试功能。如此保证第一时间启动反调试功能,以预防调试攻击。
对于待反调试的应用程序,在启动该应用程序的情况下,可以调用预设的反调试代码创建守护进程,以启动反调试功能。例如,在启动应用程序A的情况下,调用预设的Core代码创建守护进程,以启动反调试功能。
S302,确定预先设置的反调试模式,其中,所述反调试模式包括守护进程调试模式或主进程调试模式。
在本发明实施例中,本步骤与上述步骤S102类似,本发明实施例在此不再一一赘述。
S303,在所述反调试模式为所述守护进程调试模式的情况下,设置所述守护进程被所述应用程序主进程调试,以及设置所述守护进程以非阻塞、非挂起方式调试所述主进程。
在本发明实施例中,本步骤与上述步骤S203类似,本发明实施例在此不再一一赘述。
S304,在所述反调试模式为所述主进程调试模式的情况下,设置所述应用程序主进程以非阻塞、非挂起方式调试所述守护进程,以及设置所述应用程序主进程被所述守护进程调试。
在本发明实施例中,本步骤与上述步骤S204类似,本发明实施例在此不再一一赘述。
S305,在所述守护进程等待所述主进程的退出信号的情况下,设置所述守护进程阻塞。
S306,在所述守护进程接收到所述主进程的退出信号的情况下,结束所述守护进程。
在本发明实施例中,在实现守护进程与应用程序主进程相互调试之后,为了避免反调试功能失效,需要保证守护进程与应用程序主进程“同生共死”,即在守护进程等待应用程序主进程的退出信号的情况下,设置守护进程阻塞,在守护进程接收到应用程序主进程的退出信号的情况下,结束守护进程。
例如,在实现守护进程(Child_A)与应用程序A主进程相互调试之后,对于守护进程(Child_A),在守护进程(Child_A)等待应用程序A主进程的退出信号的情况下,设置守护进程(Child_A)阻塞,在守护进程(Child_A)接收到应用程序A主进程的退出信号的情况下,结束守护进程(Child_A),即守护进程(Child_A)与应用程序A主进程一并退出。
需要说明的是,对于应用程序主进程的退出信号,可以在应用程序关闭的时候产生,本发明实施例对此不作限定。
此外,需要说明的是,本发明实施例可以通过调用系统某个函数(例如waitpid函数,会暂时停止目前进程的执行,直到有信号来到或子进程结束),会暂时停止守护进程的执行,直到有信号来到,以此达到设置守护进程阻塞的目的。
S307,在所述主进程启动的线程等待所述守护进程的退出信号的情况下,设置所述线程阻塞。
S308,在所述主进程启动的线程接收到所述守护进程的退出信号的情况下,结束所述主进程。
在实现守护进程与应用程序主进程相互调试之后,同样的,为了避免反调试功能失效,需要保证守护进程与应用程序主进程“同生共死”,即在应用程序主进程的线程等待守护进程的退出信号的情况下,设置该线程阻塞,在应用程序主进程的线程接收到守护进程的退出信号的情况下,结束应用程序主进程。
例如,在实现守护进程(Child_A)与应用程序A主进程相互调试之后,对于应用程序A主进程,启动一个线程,在应用程序A启动的线程等待守护进程(Child_A)的退出信号的情况下,设置线程阻塞,在应用程序A启动的线程接收到守护进程(Child_A)的退出信号的情况下,结束应用程序A主进程,即守护进程(Child_A)与应用程序A主进程一并退出,此时线程随着应用程序A主进程的退出而退出。
需要说明的是,本发明实施例可以通过调用系统某个函数(例如waitpid函数,会暂时停止目前进程的执行,直到有信号来到或子进程结束),会暂时停止线程的执行,直到有信号来到,以此达到设置线程阻塞的目的。
需要说明的是,对于守护进程的退出信号,可以在守护进程被杀死的时候产生,说明杀死守护进程的有可能是攻击者,表明此时环境已经不安全了,需要保证守护进程与应用程序主进程一并退出。
此外,当应用程序非主进程启动时,例如Service进程、推送进程等启动,会触发Application初始化,自动执行以下步骤:S301~S308。
与上述方法实施例相对应,本发明实施例还提供了一种应用程序的反调试装置,如图4所示,该装置可以包括:进程创建模块410、模式确定模块420、进程设置模块430。
进程创建模块410,用于在启动应用程序的情况下,调用预设的反调试代码创建守护进程;
模式确定模块420,用于确定预先设置的反调试模式,其中,所述反调试模式包括守护进程调试模式或主进程调试模式;
进程设置模块430,用于在所述反调试模式为所述守护进程调试模式的情况下,设置所述守护进程被所述应用程序主进程调试,以及设置所述守护进程以非阻塞、非挂起方式调试所述主进程。
在本发明实施例的具体实施方式中,所述进程设置模块430具体用于:
调用操作系统中第一系统函数,设置所述守护进程被所述应用程序主进程调试;以及,
调用操作系统中隐藏的第二系统函数,设置所述守护进程以非阻塞、非挂起方式调试所述主进程。
在本发明实施例的具体实施方式中,所述进程设置模块430还用于:
在所述反调试模式为所述主进程调试模式的情况下,设置所述应用程序主进程以非阻塞、非挂起方式调试所述守护进程,以及设置所述应用程序主进程被所述守护进程调试。
在本发明实施例的具体实施方式中,所述进程设置模块430还具体用于:
调用操作系统中隐藏的第二系统函数,设置所述应用程序主进程以非阻塞、非挂起方式调试所述守护进程;以及,
调用操作系统中第一系统函数,设置所述应用程序主进程被所述守护进程调试。
在本发明实施例的具体实施方式中,所述装置还包括:
第一进程结束模块,用于在所述守护进程等待所述主进程的退出信号的情况下,设置所述守护进程阻塞;
在所述守护进程接收到所述主进程的退出信号的情况下,结束所述守护进程。
在本发明实施例的具体实施方式中,所述装置还包括:
第二进程结束模块,用于在所述主进程启动的线程等待所述守护进程的退出信号的情况下,设置所述线程阻塞;
在所述主进程启动的线程接收到所述守护进程的退出信号的情况下,结束所述主进程。
在本发明实施例的具体实施方式中,所述装置还包括:
第三进程结束模块,用于若调用预设的反调试代码创建守护进程失败,则结束所述应用程序主进程。
本发明实施例还提供了一种电子设备,如图5所示,包括处理器51、通信接口52、存储器53和通信总线54,其中,处理器51,通信接口52,存储器53通过通信总线54完成相互间的通信,
存储器53,用于存放计算机程序;
处理器51,用于执行存储器53上所存放的程序时,实现如下步骤:
在启动应用程序的情况下,调用预设的反调试代码创建守护进程;确定预先设置的反调试模式,其中,所述反调试模式包括守护进程调试模式或主进程调试模式;在所述反调试模式为所述守护进程调试模式的情况下,设置所述守护进程被所述应用程序主进程调试,以及设置所述守护进程以非阻塞、非挂起方式调试所述主进程。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种存储介质,该存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的应用程序的反调试方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的应用程序的反调试方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在存储介质中,或者从一个存储介质向另一个存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (10)

1.一种应用程序的反调试方法,其特征在于,所述方法包括:
在启动应用程序的情况下,调用预设的反调试代码创建守护进程;其中,若调用预设的反调试代码创建守护进程失败,则结束应用程序主进程;
确定预先设置的反调试模式,其中,所述反调试模式包括守护进程调试模式或主进程调试模式;根据应用程序对兼容性的要求,设置反调试模式参数,基于反调试模式参数确定预先设置的反调试模式;
在所述反调试模式为所述守护进程调试模式的情况下,设置所述守护进程被所述应用程序主进程调试,以及设置所述守护进程以非阻塞、非挂起方式调试所述主进程。
2.根据权利要求1所述的方法,其特征在于,所述设置所述守护进程被所述应用程序主进程调试,以及设置所述守护进程以非阻塞、非挂起方式调试所述主进程,包括:
调用操作系统中第一系统函数,设置所述守护进程被所述应用程序主进程调试;以及,
调用操作系统中隐藏的第二系统函数,设置所述守护进程以非阻塞、非挂起方式调试所述主进程。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述反调试模式为所述主进程调试模式的情况下,设置所述应用程序主进程以非阻塞、非挂起方式调试所述守护进程,以及设置所述应用程序主进程被所述守护进程调试。
4.根据权利要求3所述的方法,其特征在于,所述设置所述应用程序主进程以非阻塞、非挂起方式调试所述守护进程,以及设置所述应用程序主进程被所述守护进程调试,包括:
调用操作系统中隐藏的第二系统函数,设置所述应用程序主进程以非阻塞、非挂起方式调试所述守护进程;以及,
调用操作系统中第一系统函数,设置所述应用程序主进程被所述守护进程调试。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述守护进程等待所述主进程的退出信号的情况下,设置所述守护进程阻塞;
在所述守护进程接收到所述主进程的退出信号的情况下,结束所述守护进程。
6.根据权利要求1或5所述的方法,其特征在于,所述方法还包括:
在所述主进程启动的线程等待所述守护进程的退出信号的情况下,设置所述线程阻塞;
在所述主进程启动的线程接收到所述守护进程的退出信号的情况下,结束所述主进程。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若调用预设的反调试代码创建守护进程失败,则结束所述应用程序主进程。
8.一种应用程序的反调试装置,其特征在于,所述装置包括:
进程创建模块,用于在启动应用程序的情况下,调用预设的反调试代码创建守护进程;其中,若调用预设的反调试代码创建守护进程失败,则结束应用程序主进程;
模式确定模块,用于确定预先设置的反调试模式,其中,所述反调试模式包括守护进程调试模式或主进程调试模式;根据应用程序对兼容性的要求,设置反调试模式参数,基于反调试模式参数确定预先设置的反调试模式;
进程设置模块,用于在所述反调试模式为所述守护进程调试模式的情况下,设置所述守护进程被所述应用程序主进程调试,以及设置所述守护进程以非阻塞、非挂起方式调试所述主进程。
9.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-7中任一所述的方法步骤。
10.一种存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的方法。
CN202110178841.1A 2021-02-09 2021-02-09 应用程序的反调试方法、装置、电子设备及存储介质 Active CN112948241B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110178841.1A CN112948241B (zh) 2021-02-09 2021-02-09 应用程序的反调试方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110178841.1A CN112948241B (zh) 2021-02-09 2021-02-09 应用程序的反调试方法、装置、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN112948241A CN112948241A (zh) 2021-06-11
CN112948241B true CN112948241B (zh) 2024-02-06

Family

ID=76244846

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110178841.1A Active CN112948241B (zh) 2021-02-09 2021-02-09 应用程序的反调试方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN112948241B (zh)

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104239781A (zh) * 2014-09-01 2014-12-24 百度在线网络技术(北京)有限公司 避免进程被注入的方法和装置
CN104503750A (zh) * 2014-12-15 2015-04-08 北京奇虎科技有限公司 进程清理方法及装置
CN104932972A (zh) * 2014-03-19 2015-09-23 北京娜迦信息科技发展有限公司 一种反动态调试应用程序的方法及装置
KR101626967B1 (ko) * 2015-01-21 2016-06-02 넷마블게임즈 주식회사 해킹 방지를 위한 어플리케이션의 동작 방법 및 장치
CN105793860A (zh) * 2013-11-14 2016-07-20 Inka安特沃客有限公司 反调试方法
CN107122656A (zh) * 2017-04-26 2017-09-01 北京洋浦伟业科技发展有限公司 一种通过自调试防止外部调试的方法和装置
CN108021791A (zh) * 2016-10-31 2018-05-11 腾讯科技(深圳)有限公司 数据保护方法及装置
CN110377523A (zh) * 2019-07-24 2019-10-25 网易(杭州)网络有限公司 程序调试方法及装置、电子设备和存储介质
WO2019235664A1 (ko) * 2018-06-08 2019-12-12 라인플러스 주식회사 프로그램 보호를 위한 디버거 차단 방법 및 시스템
CN111309444A (zh) * 2020-03-04 2020-06-19 北京奇艺世纪科技有限公司 利用进程虚拟机反调试的方法、装置、系统及存储介质
CN111639312A (zh) * 2020-06-02 2020-09-08 腾讯科技(成都)有限公司 反调试方法、装置、存储介质及电子装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7415699B2 (en) * 2003-06-27 2008-08-19 Hewlett-Packard Development Company, L.P. Method and apparatus for controlling execution of a child process generated by a modified parent process
US20100095281A1 (en) * 2008-10-14 2010-04-15 Riverside Research Institute Internal Function Debugger

Patent Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105793860A (zh) * 2013-11-14 2016-07-20 Inka安特沃客有限公司 反调试方法
CN104932972A (zh) * 2014-03-19 2015-09-23 北京娜迦信息科技发展有限公司 一种反动态调试应用程序的方法及装置
CN104239781A (zh) * 2014-09-01 2014-12-24 百度在线网络技术(北京)有限公司 避免进程被注入的方法和装置
CN104503750A (zh) * 2014-12-15 2015-04-08 北京奇虎科技有限公司 进程清理方法及装置
KR101626967B1 (ko) * 2015-01-21 2016-06-02 넷마블게임즈 주식회사 해킹 방지를 위한 어플리케이션의 동작 방법 및 장치
CN108021791A (zh) * 2016-10-31 2018-05-11 腾讯科技(深圳)有限公司 数据保护方法及装置
CN107122656A (zh) * 2017-04-26 2017-09-01 北京洋浦伟业科技发展有限公司 一种通过自调试防止外部调试的方法和装置
WO2019235664A1 (ko) * 2018-06-08 2019-12-12 라인플러스 주식회사 프로그램 보호를 위한 디버거 차단 방법 및 시스템
CN110377523A (zh) * 2019-07-24 2019-10-25 网易(杭州)网络有限公司 程序调试方法及装置、电子设备和存储介质
CN111309444A (zh) * 2020-03-04 2020-06-19 北京奇艺世纪科技有限公司 利用进程虚拟机反调试的方法、装置、系统及存储介质
CN111639312A (zh) * 2020-06-02 2020-09-08 腾讯科技(成都)有限公司 反调试方法、装置、存储介质及电子装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于Linux系统调用的反跟踪技术研究;许康;;电脑知识与技术(第23期);第6632-6635页 *

Also Published As

Publication number Publication date
CN112948241A (zh) 2021-06-11

Similar Documents

Publication Publication Date Title
US20180211046A1 (en) Analysis and control of code flow and data flow
US9516056B2 (en) Detecting a malware process
CN110046479B (zh) 一种基于安卓操作系统的链接库文件反调试方法及装置
US10013553B2 (en) Protecting software application
CN109684795B (zh) 应用程序反调试的方法、装置及电子设备
US11055168B2 (en) Unexpected event detection during execution of an application
CN104932972B (zh) 一种反动态调试应用程序的方法及装置
US11163645B2 (en) Apparatus and method of control flow integrity enforcement utilizing boundary checking
CN107908444B (zh) 终端应用的挂钩方法及装置
CN108021791B (zh) 数据保护方法及装置
US11055416B2 (en) Detecting vulnerabilities in applications during execution
CN107122656B (zh) 一种通过自调试防止外部调试的方法和装置
CN112231198B (zh) 一种恶意进程调试方法、装置、电子设备及介质
CN112948241B (zh) 应用程序的反调试方法、装置、电子设备及存储介质
JP2011145945A (ja) マルウェア検出装置及びマルウェア検出方法
CN111367505A (zh) 一种JavaScript源代码保密方法、装置、设备及存储介质
CN105809027B (zh) 应用程序的权限控制方法及装置
CN113467981A (zh) 异常处理的方法和装置
US8925077B2 (en) Mobile devices with inhibited application debugging and methods of operation
KR102623022B1 (ko) 프로그램 보호를 위한 디버거 차단 방법 및 시스템
CN111625784B (zh) 一种应用的反调试方法、相关装置及存储介质
CN109190383B (zh) 访问指令的处理方法、装置及设备
CN111008375B (zh) 一种数据保护方法及装置
CN111382433B (zh) 模块加载方法、装置、设备以及存储介质
JP7076014B2 (ja) プログラム保護のためのJavaデバッガ遮断方法およびシステム

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