CN111427623B - 程序退出方法、装置、计算机设备和存储介质 - Google Patents
程序退出方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN111427623B CN111427623B CN202010200911.4A CN202010200911A CN111427623B CN 111427623 B CN111427623 B CN 111427623B CN 202010200911 A CN202010200911 A CN 202010200911A CN 111427623 B CN111427623 B CN 111427623B
- Authority
- CN
- China
- Prior art keywords
- program
- function
- exit
- parent process
- value
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44594—Unloading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请涉及一种程序退出方法、装置、计算机设备和存储介质,方法包括:获取线程功能程序,线程功能程序包含预设退出函数;利用等效代码替换预设退出函数对应的代码,得到修改后的预设退出函数,等效代码包括间接访问空指针的代码;将线程功能程序作为父进程,根据分叉函数创建一个子进程,子进程为父进程的副本,子进程通过追踪函数调试父进程;判断父进程是否被子进程成功调试,父进程同时只能被一个追踪函数进行调试;若父进程没有被子进程成功调试时,调用修改后的预设退出函数退出程序。根据上述方法通过反静态调试和反动态调试相结合,避免程序被攻击者非法调试并获取程序运行信息,保证了程序安全退出的可靠性。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种程序退出方法、装置、计算机设备和存储介质。
背景技术
C语言标准库提供了exit函数实现程序的退出,一般情况下,程序执行完主函数main的所有逻辑后,遇到return语句就会结束程序,而遇到异常情况希望提前结束程序才会使用exit函数。如果exit函数被攻击者恶意利用,本应退出的程序如果继续运行,可能泄漏攻击者本不应该得到的数据或者信息,也可能使攻击者获得本不该拥有的权限,造成商业损失。
发明内容
为了解决上述技术问题,本申请提供了一种程序退出方法、装置、计算机设备和存储介质。
第一方面,本实施例提供了一种程序退出方法,所述方法包括:
获取线程功能程序,所述线程功能程序包含预设退出函数;
利用等效代码替换所述预设退出函数对应的代码,得到修改后的预设退出函数,所述等效代码包括间接访问空指针的代码;
将所述线程功能程序作为父进程,根据分叉函数创建一个子进程,所述子进程为所述父进程的副本,所述子进程通过追踪函数调试所述父进程;
判断所述父进程是否被子进程成功调试,所述父进程同时只能被一个追踪函数进行调试;
若所述父进程没有被所述子进程成功调试时,调用所述修改后的预设退出函数退出程序。
可选地,所述等效代码还包括修改寄存器值的代码,所述寄存器值包括rsp寄存器值、rbp寄存器值和通用寄存器值,所述rsp寄存器值、rbp寄存器值和通用寄存器值为合法区间内的任意值。
可选地,所述判断所述父进程是否被子进程成功调试,包括:
选择所述子进程中的任意变量作为目标变量,所述目标变量的值为特定值;
根据所述父进程中对应的目标变量的值判断所述父进程是否被子进程成功调试;
所述若所述父进程没有被所述子进程成功调试时,调用所述修改后的预设退出函数退出程序,包括:
当所述父进程中对应的目标变量的值不为特定值时,所述子进程调试所述父进程失败,调用所述修改后的预设退出函数退出程序。
可选地,所述方法还包括:
当所述父进程中对应的目标变量的值与所述特定值相等时,判定所述父进程被子进程成功调试,继续程序运行。
第二方面,本实施例提供了一种程序退出装置,所述装置包括:
程序获取模块,用于获取线程功能程序,所述线程功能程序包含预设退出函数;
函数修改模块,用于利用等效代码替换所述预设退出函数对应的代码,得到修改后的预设退出函数,所述等效代码包括间接访问空指针的代码;
关联模块,用于将所述线程功能程序作为父进程,根据分叉函数创建一个子进程,所述子进程为所述父进程的副本,所述子进程通过追踪函数调试所述父进程;
调试判断模块,用于判断所述父进程是否被子进程成功调试,所述父进程同时只能被一个追踪函数进行调试;
程序退出模块,用于若所述父进程没有被所述子进程成功调试时,调用所述修改后的预设退出函数退出程序。
可选地,所述等效代码还包括修改寄存器值的代码,所述寄存器值包括rsp寄存器值、rbp寄存器值和通用寄存器值,所述rsp寄存器值、rbp寄存器值和通用寄存器值为合法区间内的任意值。
可选地,所述调试判断模块包括:
标志选定单元,用于选择所述子进程中的任意变量作为目标变量,所述目标变量的值为特定值;
特定值判断单元,用于根据所述父进程中对应的目标变量的值判断所述父进程是否被子进程成功调试;
所述程序退出模块包括:
程序退出单元,用于当所述父进程中对应的目标变量的值不为特定值时,所述子进程调试所述父进程失败,调用所述修改后的预设退出函数退出程序。
可选地,所述程序退出模块还包括:
程序运行单元,用于当所述父进程中对应的目标变量的值与所述特定值相等时,判定所述父进程被子进程成功调试,继续程序运行。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取线程功能程序,所述线程功能程序包含预设退出函数;
利用等效代码替换所述预设退出函数对应的代码,得到修改后的预设退出函数,所述等效代码包括间接访问空指针的代码;
将所述线程功能程序作为父进程,根据分叉函数创建一个子进程,所述子进程为所述父进程的副本,所述子进程通过追踪函数调试所述父进程;
判断所述父进程是否被子进程成功调试,所述父进程同时只能被一个追踪函数进行调试;
若所述父进程没有被所述子进程成功调试时,调用所述修改后的预设退出函数退出程序。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取线程功能程序,所述线程功能程序包含预设退出函数;
利用等效代码替换所述预设退出函数对应的代码,得到修改后的预设退出函数,所述等效代码包括间接访问空指针的代码;
将所述线程功能程序作为父进程,根据分叉函数创建一个子进程,所述子进程为所述父进程的副本,所述子进程通过追踪函数调试所述父进程;
判断所述父进程是否被子进程成功调试,所述父进程同时只能被一个追踪函数进行调试;
若所述父进程没有被所述子进程成功调试时,调用所述修改后的预设退出函数退出程序。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取线程功能程序,所述线程功能程序包含预设退出函数;
利用等效代码替换所述预设退出函数对应的代码,得到修改后的预设退出函数,所述等效代码包括间接访问空指针的代码;
将所述线程功能程序作为父进程,根据分叉函数创建一个子进程,所述子进程为所述父进程的副本,所述子进程通过追踪函数调试所述父进程;
判断所述父进程是否被子进程成功调试,所述父进程同时只能被一个追踪函数进行调试;
若所述父进程没有被所述子进程成功调试时,调用所述修改后的预设退出函数退出程序。
上述程序退出方法、装置、计算机设备和存储介质,所述方法包括:获取线程功能程序,所述线程功能程序包含预设退出函数;利用等效代码替换所述预设退出函数对应的代码,得到修改后的预设退出函数,所述等效代码包括间接访问空指针的代码;将所述线程功能程序作为父进程,根据分叉函数创建一个子进程,所述子进程为所述父进程的副本,所述子进程通过追踪函数调试所述父进程;判断所述父进程是否被子进程成功调试,所述父进程同时只能被一个追踪函数进行调试;若所述父进程没有被所述子进程成功调试时,调用所述修改后的预设退出函数退出程序。根据上述方法通过反静态调试和反动态调试相结合,避免程序被攻击者非法调试并获取程序运行信息,保证了程序安全退出的可靠性。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为一个实施例中程序退出方法的应用环境图;
图2为一个实施例中一种程序退出方法的流程示意图;
图3为一个实施例中一种程序退出装置的结构框图;
图4为一个实施例中计算机设备的内部结构图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为一个实施例中程序退出方法的应用环境图。参照图1,该程序退出方法应用于程序退出系统。该程序退出系统包括终端110和服务器120。终端110和服务器120通过网络连接。终端110具体可以是台式终端或移动终端,移动终端具体可以手机、平板电脑、笔记本电脑等中的至少一种。服务器120可以用独立的服务器或者是多个服务器组成的服务器集群来实现。
在一个实施例中,图2为一个实施例中一种程序退出方法的流程示意图,参照图2,提供了一种程序退出方法。本实施例主要以该方法应用于上述图1中的终端110(或服务器120)来举例说明。参照图2,该程序退出方法具体包括如下步骤:
步骤S210,获取线程功能程序,线程功能程序包含预设退出函数。
在本实施例中,线程功能程序可以应用于例如Unix-like系统,预设退出函数可以为exit函数。
步骤S220,利用等效代码替换预设退出函数对应的代码,得到修改后的预设退出函数,等效代码包括间接访问空指针的代码。
在本实施例中,以退出函数为exit为例进行说明,由于exit函数存在不安全弊端,攻击者可通过静态调试获取程序有用信息,静态调试即为观察程序代码,因此需要修改exit函数,利用等效的函数代码使程序退出,防止攻击者通过静态调试exit函数导致程序退出失败获取程序运行信息,将间接访问空指针的代码替换预设退出函数对应的代码,通过间接访问空指针使程序发生内核错误而退出程序,防止攻击者获取程序中有用信息。
步骤S230,将线程功能程序作为父进程,根据分叉函数创建一个子进程,子进程为父进程的副本,子进程通过追踪函数调试父进程。
在本实施例中,运行中的线程功能程序为父进程,分叉函数具体可以为fork函数,在程序运行至关键信息之前根据fork函数创建一个子进程,关键信息包括用户名称、用户密码等,追踪函数具体可以为ptrace函数,子进程通过ptrace函数调试父进程,即子进程通过ptrace函数attach父进程。
步骤S240,判断父进程是否被子进程成功调试,父进程同时只能被一个追踪函数进行调试。
在本实施例中,由于父进程同时只能被一个ptrace函数进行调试(attach),若子进程成功attach父进程,则当前程序没有被攻击者的进程成功调试;若子进程attach父进程失败,当前程序存在正在被攻击者动态调试的风险,动态调试主要是利用调试器对正在运行的程序进行调试,以此获取程序执行过程中的有用信息,为了保证程序的信息安全,因此不能让父进程被非子进程的调试器进行调试。
步骤S250,若父进程没有被子进程成功调试时,调用修改后的预设退出函数退出程序。
在本实施例中,若子进程attach父进程失败,可能正在被攻击者的进程调试,也可能在程序内发生异常情况导致子进程无法成功调试父进程,为防止父进程正在被非子进程的进程调试,防止攻击者利用程序获取数据信息,调用修改后的预设退出函数,当预设退出函数中运行至间接访问空指针的代码时,导致程序的内核错误而退出程序。
具体地,上述程序退出方法在反静态调试的基础上结合反动态调试,增加了攻击者的攻击成本,提高了攻击难度,同时提高了程序安全运行的可靠性,避免程序无法及时退出导致资源泄露而造成商业损失。
在一个实施例中,等效代码还包括修改寄存器值的代码,寄存器值包括rsp寄存器值、rbp寄存器值和通用寄存器值,rsp寄存器值、rbp寄存器值和通用寄存器值为合法区间内的任意值。
具体地,rsp寄存器、rbp寄存器和通用寄存器用于存储程序运行信息,在合法区间内修改了存储运行信息的寄存器的值,由于修改了寄存器值,改变了程序中正确的堆栈状态,破坏了堆栈信息,堆栈信息包括了当前程序正在运行的函数,以及当前正在运行的函数执行完毕后将要返回的函数,堆栈信息破坏了将无法知道程序正在运行的函数,即无法知道程序在哪个函数退出的,也无法得知正在运行的函数退出后将要返回的函数。修改寄存器值在程序执行间接访问空指针的代码而退出程序时,改变了dump文件中寄存器内存储的信息,保证程序退出时的dump文件中没有与运行相关的信息,防止攻击者通过dump文件中的运行信息倒推出有用的关键信息,保证程序安全地退出;如果间接访问空指针的代码被拦截,无法退出程序时,当修改后的预设退出函数执行结束时,由于堆栈信息的破坏导致后续程序执行流程混乱,继而退出程序,作为间接访问空指针退出程序的二次保障,不会因为无法执行间接访问空指针而导致无法退出程序。
在一个实施例中,选择子进程中的任意变量作为目标变量,目标变量的值为特定值;根据父进程中对应的目标变量的值判断父进程是否被子进程成功调试;当父进程中对应的目标变量的值不为特定值时,子进程调试父进程失败,调用修改后的预设退出函数退出程序。
具体地,选择子进程中的任意变量作为目标变量,令目标变量的值为特定值,判断父进程中对应的目标变量的值是否为特定值,子进程为父进程的副本,父进程中的变量与子进程中的变量相同,即判断程序运行过程中子进程与父进程的相同变量的值是否相同,当父进程中对应的目标变量的值不为特定值时,代表子进程调试父进程失败,由于父进程同时只能被一个追踪函数进行调试,父进程可能正在被攻击者的进程调试,也可能是程序内的异常信息导致子进程无法成功调试父进程,为防止父进程正在被非子进程的进程调试,调用修改后的预设退出函数退出程序,程序退出后首先保证了程序没有被非法调试泄露信息,后续再判断程序中是否存在令子进程无法调试父进程的内在因素。
在一个实施例中,当父进程中对应的目标变量的值与特定值相等时,判定父进程被子进程成功调试,继续程序运行。
具体地,只有当父进程中与子进程相同变量的值相同时,代表修改子进程的变量而父进程对应的变量也随之变化,由于父进程只能同时被一个进程调试,代表父进程被子进程成功调试,不存在攻击者非法调试程序获取信息的情况,则程序继续保持安全运行。
图2为一个实施例中程序退出方法的流程示意图。应该理解的是,虽然图2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,图3为一个实施例中一种程序退出装置的结构框图,本实施例提供了一种程序退出装置,装置包括:
程序获取模块310,用于获取线程功能程序,线程功能程序包含预设退出函数;
函数修改模块320,用于利用等效代码替换预设退出函数对应的代码,得到修改后的预设退出函数,等效代码包括间接访问空指针的代码;
关联模块330,用于将线程功能程序作为父进程,根据分叉函数创建一个子进程,子进程为父进程的副本,子进程通过追踪函数调试父进程;
调试判断模块340,用于判断父进程是否被子进程成功调试,父进程同时只能被一个追踪函数进行调试;
程序退出模块350,用于若父进程没有被子进程成功调试时,调用修改后的预设退出函数退出程序。
在一个实施例中,等效代码还包括修改寄存器值的代码,寄存器值包括rsp寄存器值、rbp寄存器值和通用寄存器值,rsp寄存器值、rbp寄存器值和通用寄存器值为合法区间内的任意值。
在一个实施例中,调试判断模块340包括:
标志选定单元,用于选择子进程中的任意变量作为目标变量,目标变量的值为特定值;
特定值判断单元,用于根据父进程中对应的目标变量的值判断父进程是否被子进程成功调试;
程序退出模块350包括:
程序退出单元,用于当父进程中对应的目标变量的值不为特定值时,子进程调试父进程失败,调用修改后的预设退出函数退出程序。
在一个实施例中,程序退出模块350还包括:
程序运行单元,用于当父进程中对应的目标变量的值与特定值相等时,判定父进程被子进程成功调试,继续程序运行。
图4示出了一个实施例中计算机设备的内部结构图。该计算机设备具体可以是图1中的终端110(或服务器120)。如图4所示,该计算机设备包括该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、输入装置和显示屏。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作系统,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现程序退出方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行程序退出方法。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图4中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,本申请提供的程序退出装置可以实现为一种计算机程序的形式,计算机程序可在如图4所示的计算机设备上运行。计算机设备的存储器中可存储组成该程序退出装置的各个程序模块,比如,图3所示的程序获取模块310、函数修改模块320、关联模块330、调试判断模块340和程序退出模块350。各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的程序退出方法中的步骤。
例如,图4所示的计算机设备可以通过如图3所示的程序退出装置中的程序获取模块310执行获取线程功能程序,线程功能程序包含预设退出函数。计算机设备可通过函数修改模块320执行利用等效代码替换预设退出函数对应的代码,得到修改后的预设退出函数,等效代码包括间接访问空指针的代码。计算机设备可通过关联模块330执行将线程功能程序作为父进程,根据分叉函数创建一个子进程,子进程为父进程的副本,子进程通过追踪函数调试父进程。计算机设备可通过调试判断模块340执行判断父进程是否被子进程成功调试,父进程同时只能被一个追踪函数进行调试。计算机设备可通过程序退出模块350执行若父进程没有被子进程成功调试时,调用修改后的预设退出函数退出程序。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
获取线程功能程序,线程功能程序包含预设退出函数;
利用等效代码替换预设退出函数对应的代码,得到修改后的预设退出函数,等效代码包括间接访问空指针的代码;
将线程功能程序作为父进程,根据分叉函数创建一个子进程,子进程为父进程的副本,子进程通过追踪函数调试父进程;
判断父进程是否被子进程成功调试,父进程同时只能被一个追踪函数进行调试;
若父进程没有被子进程成功调试时,调用修改后的预设退出函数退出程序。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:选择子进程中的任意变量作为目标变量,目标变量的值为特定值;根据父进程中对应的目标变量的值判断父进程是否被子进程成功调试;当父进程中对应的目标变量的值不为特定值时,子进程调试父进程失败,调用修改后的预设退出函数退出程序。
在一个实施例中,处理器执行计算机程序时还实现以下步骤:当父进程中对应的目标变量的值与特定值相等时,判定父进程被子进程成功调试,继续程序运行。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
获取线程功能程序,线程功能程序包含预设退出函数;
利用等效代码替换预设退出函数对应的代码,得到修改后的预设退出函数,等效代码包括间接访问空指针的代码;
将线程功能程序作为父进程,根据分叉函数创建一个子进程,子进程为父进程的副本,子进程通过追踪函数调试父进程;
判断父进程是否被子进程成功调试,父进程同时只能被一个追踪函数进行调试;
若父进程没有被子进程成功调试时,调用修改后的预设退出函数退出程序。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:选择子进程中的任意变量作为目标变量,目标变量的值为特定值;根据父进程中对应的目标变量的值判断父进程是否被子进程成功调试;当父进程中对应的目标变量的值不为特定值时,子进程调试父进程失败,调用修改后的预设退出函数退出程序。
在一个实施例中,计算机程序被处理器执行时还实现以下步骤:当父进程中对应的目标变量的值与特定值相等时,判定父进程被子进程成功调试,继续程序运行。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。
Claims (8)
1.一种程序退出方法,其特征在于,所述方法包括:
获取线程功能程序,所述线程功能程序包含预设退出函数;
利用等效代码替换所述预设退出函数对应的代码,得到修改后的预设退出函数,所述等效代码包括间接访问空指针的代码以及修改寄存器值的代码,所述寄存器值包括rsp寄存器值、rbp寄存器值和通用寄存器值,所述rsp寄存器值、rbp寄存器值和通用寄存器值为合法区间内的任意值,修改寄存器值的代码用于破坏程序中的堆栈信息;
将所述线程功能程序作为父进程,根据分叉函数创建一个子进程,所述子进程为所述父进程的副本,所述子进程通过追踪函数调试所述父进程;
判断所述父进程是否被子进程成功调试,所述父进程同时只能被一个追踪函数进行调试;
若所述父进程没有被所述子进程成功调试时,调用所述修改后的预设退出函数退出程序。
2.根据权利要求1所述的方法,其特征在于,所述判断所述父进程是否被子进程成功调试,包括:
选择所述子进程中的任意变量作为目标变量,所述目标变量的值为特定值;
根据所述父进程中对应的目标变量的值判断所述父进程是否被子进程成功调试;
所述若所述父进程没有被所述子进程成功调试时,调用所述修改后的预设退出函数退出程序,包括:
当所述父进程中对应的目标变量的值不为特定值时,所述子进程调试所述父进程失败,调用所述修改后的预设退出函数退出程序。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
当所述父进程中对应的目标变量的值与所述特定值相等时,判定所述父进程被子进程成功调试,继续程序运行。
4.一种程序退出装置,其特征在于,所述装置包括:
程序获取模块,用于获取线程功能程序,所述线程功能程序包含预设退出函数;
函数修改模块,用于利用等效代码替换所述预设退出函数对应的代码,得到修改后的预设退出函数,所述等效代码包括间接访问空指针的代码以及修改寄存器值的代码,所述寄存器值包括rsp寄存器值、rbp寄存器值和通用寄存器值,所述rsp寄存器值、rbp寄存器值和通用寄存器值为合法区间内的任意值,修改寄存器值的代码用于破坏程序中的堆栈信息;
关联模块,用于将所述线程功能程序作为父进程,根据分叉函数创建一个子进程,所述子进程为所述父进程的副本,所述子进程通过追踪函数调试所述父进程;
调试判断模块,用于判断所述父进程是否被子进程成功调试,所述父进程同时只能被一个追踪函数进行调试;
程序退出模块,用于若所述父进程没有被所述子进程成功调试时,调用所述修改后的预设退出函数退出程序。
5.根据权利要求4所述的装置,其特征在于,所述调试判断模块包括:
标志选定单元,用于选择所述子进程中的任意变量作为目标变量,所述目标变量的值为特定值;
特定值判断单元,用于根据所述父进程中对应的目标变量的值判断所述父进程是否被子进程成功调试;
所述程序退出模块包括:
程序退出单元,用于当所述父进程中对应的目标变量的值不为特定值时,所述子进程调试所述父进程失败,调用所述修改后的预设退出函数退出程序。
6.根据权利要求5所述的装置,其特征在于,所述程序退出模块还包括:
程序运行单元,用于当所述父进程中对应的目标变量的值与所述特定值相等时,判定所述父进程被子进程成功调试,继续程序运行。
7.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至3中任一项所述方法的步骤。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至3中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010200911.4A CN111427623B (zh) | 2020-03-20 | 2020-03-20 | 程序退出方法、装置、计算机设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010200911.4A CN111427623B (zh) | 2020-03-20 | 2020-03-20 | 程序退出方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111427623A CN111427623A (zh) | 2020-07-17 |
CN111427623B true CN111427623B (zh) | 2023-06-30 |
Family
ID=71548288
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010200911.4A Active CN111427623B (zh) | 2020-03-20 | 2020-03-20 | 程序退出方法、装置、计算机设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111427623B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114036056B (zh) * | 2021-11-16 | 2024-03-26 | 企查查科技股份有限公司 | 防调试方法、装置、设备、存储介质和程序产品 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109117631A (zh) * | 2018-07-05 | 2019-01-01 | 武汉斗鱼网络科技有限公司 | 一种程序退出的方法及相关设备 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8661417B2 (en) * | 2009-03-26 | 2014-02-25 | International Business Machines Corporation | Debugging program function |
CN108021791B (zh) * | 2016-10-31 | 2021-08-10 | 腾讯科技(深圳)有限公司 | 数据保护方法及装置 |
CN106845170B (zh) * | 2017-01-20 | 2019-11-15 | 武汉斗鱼网络科技有限公司 | 一种反调试方法和系统 |
CN108388778B (zh) * | 2018-03-21 | 2021-03-30 | 北京理工大学 | Android平台融合多特征的APP反调试方法 |
-
2020
- 2020-03-20 CN CN202010200911.4A patent/CN111427623B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109117631A (zh) * | 2018-07-05 | 2019-01-01 | 武汉斗鱼网络科技有限公司 | 一种程序退出的方法及相关设备 |
Also Published As
Publication number | Publication date |
---|---|
CN111427623A (zh) | 2020-07-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110704297B (zh) | 代码评审方法、装置、计算机设备及存储介质 | |
JP7154365B2 (ja) | ソフトウェアコードをセキュアにするための方法 | |
US20230036357A1 (en) | Method and apparatus for authority control, computer device and storage medium | |
CN110879781A (zh) | 程序调试方法、装置、电子设备及计算机可读存储介质 | |
CN111427623B (zh) | 程序退出方法、装置、计算机设备和存储介质 | |
US20170185784A1 (en) | Point-wise protection of application using runtime agent | |
CN111881041A (zh) | 前端应用测试方法、装置、终端设备及存储介质 | |
CN110147354B (zh) | 批量数据编辑方法、装置、计算机设备及存储介质 | |
CN115292201B (zh) | 函数调用栈解析和回溯方法与装置 | |
CN111176986A (zh) | 线程脚本调试方法、装置、计算机设备和存储介质 | |
CN115934129A (zh) | 软件项目更新方法、装置、计算机设备及存储介质 | |
CN113609478B (zh) | 一种ios平台应用程序篡改检测方法及装置 | |
CN115658482A (zh) | 数据库测试方法及装置、电子设备及计算机可读存储介质 | |
US20210011717A1 (en) | Verified Stack Trace Generation And Accelerated Stack-Based Analysis With Shadow Stacks | |
CN111488558B (zh) | 脚本保护方法、装置、计算机可读存储介质和计算机设备 | |
CN109711167B (zh) | 一种基于多级指针的uaf漏洞防御方法 | |
CN112650549A (zh) | 一种页面跳转方法、装置、终端以及存储介质 | |
US20030105958A1 (en) | Command script instrumentation for logging command execution and the protection of sensitive information | |
CN111859403A (zh) | 依赖关系漏洞的确定方法、装置、电子设备及存储介质 | |
CN112527265A (zh) | 一种日志自动注入的方法和计算机设备 | |
CN111625784B (zh) | 一种应用的反调试方法、相关装置及存储介质 | |
CN111158701B (zh) | 库模块发布方法、装置、设备及存储介质 | |
US20230359725A1 (en) | Methods and systems for monitoring the behavior of a process | |
Chapman et al. | Interleaving Static Analysis and LLM Prompting | |
CN111506299A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |