CN115543586B - 应用层系统进程的启动方法、装置、设备及可读存储介质 - Google Patents
应用层系统进程的启动方法、装置、设备及可读存储介质 Download PDFInfo
- Publication number
- CN115543586B CN115543586B CN202211497602.3A CN202211497602A CN115543586B CN 115543586 B CN115543586 B CN 115543586B CN 202211497602 A CN202211497602 A CN 202211497602A CN 115543586 B CN115543586 B CN 115543586B
- Authority
- CN
- China
- Prior art keywords
- system process
- thread
- code
- target system
- information
- 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- 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
- G06F9/4486—Formation of subprogram jump address
-
- 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/46—Multiprogramming arrangements
- G06F9/461—Saving or restoring of program or task context
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/48—Indexing scheme relating to G06F9/48
- G06F2209/482—Application
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种应用层系统进程的启动方法、装置、设备及可读存储介质,涉及计算机技术领域,能够在内核中启动应用层系统进程,使得主动防御对可信程序不造成误差或者误报,实现内核中对应用层程序的灵活控制。其中方法包括:获取待操作目标系统进程中正在运行的线程,将所述正在运行的线程挂起后,查询挂起线程的上下文信息;根据所述挂起线程的上下文信息,在内核中定位到当前程序运行的跳转代码位置;预先编写与地址无关的进程操作代码,在可执行文件中将所述跳转代码位置设置为所述进程操作代码的起始位置;当程序执行到所述跳转代码位置时,利用所述进程操作代码在应用层启动系统进程,并根据所述系统进程执行系统操作。
Description
技术领域
本申请涉及计算机技术领域,尤其是涉及到一种应用层系统进程的启动方法、装置、设备及可读存储介质。
背景技术
在互联网不断发展的过程中,网民日益增多且安全意识不断提高,进而下载了很多查杀软件来防御系统不被恶意软件攻击。而受到查杀软件中主动防御功能和静态特征检测功能,而查杀软件在做防御的同时也会针对一些友好的程序造成误杀或者误报,针对这种情况,用户还需要在应用层去启动相应的系统进程。
相关技术中,当前针对Windows操作系统启动系统进程主要通过以下三种函数操作来实现,第一种是使用WinExec,第二种是使用ShellExecute,第三种是使用CreateProcess。但是,通过函数操作的方式无法在内核中实现应用层启动系统进程,使得内核中很难对应用层程序进行控制。
发明内容
有鉴于此,本申请提供了一种应用层系统进程的启动方法、装置及设备,主要目的在于解决现有技术中通过函数操作的方式无法在内核中实现应用层启动系统进程,使得内核中很难对应用层程序进行控制的问题。
根据本申请的第一个方面,提供了一种应用层系统进程的启动方法,包括:
获取待操作目标系统进程中正在运行的线程,将所述正在运行的线程挂起后,查询挂起线程的上下文信息;
根据所述挂起线程的上下文信息,在内核中定位到当前程序运行的跳转代码位置;
预先编写与地址无关的进程操作代码,在可执行文件中将所述跳转代码位置设置为所述进程操作代码的起始位置;
当程序执行到所述跳转代码位置时,利用所述进程操作代码在应用层启动系统进程,并根据所述系统进程执行系统操作。
进一步地,所述获取待操作目标系统进程中正在运行的线程,将所述正在运行的线程挂起后,查询挂起线程的上下文信息,具体包括:
获取待操作的目标系统进程,利用所述目标系统进程对应的标识信息遍历查询系统中所有线程,得到属于所述目标系统进程且正在运行的线程;
将所述属于所述目标系统进程且正在运行的线程挂起,使用预设接口查询挂起线程的上下文信息;
进一步地,所述获取待操作的目标系统进程,利用所述目标系统进程对应的标识信息遍历查询系统中所有线程,得到属于所述目标系统进程且正在运行的线程,具体包括:
遍历任务管理器中的系统进程信息,根据所述系统进程信息获取待操作的目标系统进程;
使用内核函数查询所述目标系统进程对应的句柄;
遍历系统中所有的线程,利用根据所述目标系统进程对应的句柄查询到属于所述目标系统进程且正在运行的线程。
进一步地,所述遍历任务管理器中的系统进程信息,根据所述系统进程信息获取待操作的目标系统进程,具体包括:
遍历任务管理器中的进程识别号,根据所述进程识别号获取系统进程的结构体信息;
利用所述系统进程的结构体信息,查询得到待操作的目标系统进程;
所述遍历系统中所有的线程,利用根据所述目标系统进程对应的句柄查询到属于所述目标系统进程且正在运行的线程,具体包括:
利用所述目标系统进程对应的句柄获取目标系统进程的结构体信息;
遍历系统中所有的线程,提取线程所属系统进程的结构体信息,将所述结构体信息与所述目标系统进程的结构体信息进行对比;
如果比对一致,则获取结构体信息对应的目标线程,将线程状态处于运行状态的目标线程作为属于所述目标系统进程且正在运行的线程。
进一步地,所述将所述属于所述目标系统进程且正在运行的线程挂起,使用预设接口查询挂起线程的上下文信息,具体包括:
使用特征码查询技术获取线程挂起接口,使用所述线程挂起接口将所述属于所述目标系统进程且正在运行的线程挂起;
定义未文档化接口查询不同程序类型线程的上下文信息,根据挂起线程对应的程序类型,通过声明相应程序类型的文档化接口查询所述挂起线程的上下文信息。
进一步地,所述与地址无关的进程操作代码为汇编形式的字节码,用于在应用层创建执行系统操作的系统进程,所述方法还包括:
通过驱动和应用程序通讯的方式将所述与地址无关的进程操作代码传递至可执行文件;或
通过在内核定义的方式将所述与地址无关的进程操作代码传递至可执行文件;
解析可执行文件,遍历寻找代码字节的起始位置,将所述与地址无关的进程操作代码写入至所述可执行文件中代码字节起始位置。
进一步地,在所述预先编写与地址无关的进程操作代码,在可执行文件中将所述跳转代码位置设置为所述进程操作代码的起始位置之后,所述方法还包括:
在所述与地址无关的进程操作代码中保留所述跳转代码位置,当执行完成进程操作代码对应的系统操作后,恢复到所述跳转代码位置处开始执行。
根据本申请的第二个方面,提供了一种应用层系统进程的启动装置,包括:
获取单元,用于获取待操作目标系统进程中正在运行的线程,将所述正在运行的线程挂起后,查询挂起线程的上下文信息;
定位单元,用于根据所述挂起线程的上下文信息,在内核中定位到当前程序运行的跳转代码位置;
设置单元,用于预先编写与地址无关的进程操作代码,在可执行文件中将所述跳转代码位置设置为所述进程操作代码的起始位置;
启动单元,用于当程序执行到所述跳转代码位置时,利用所述进程操作代码在应用层启动系统进程,并根据所述系统进程执行系统操作。
进一步地,所述获取单元包括:
获取模块,用于获取待操作的目标系统进程,利用所述目标系统进程对应的标识信息遍历查询系统中所有线程,得到属于所述目标系统进程且正在运行的线程;
查询模块,用于将所述属于所述目标系统进程且正在运行的线程挂起,使用预设接口查询挂起线程的上下文信息。
进一步地,所述获取模块包括:
获取子模块,用于遍历任务管理器中的系统进程信息,根据所述系统进程信息获取待操作的目标系统进程;
第一查询子模块,用于使用内核函数查询所述目标系统进程对应的句柄;
第二查询子模块,用于遍历系统中所有的线程,利用根据所述目标系统进程对应的句柄查询到属于所述目标系统进程且正在运行的线程。
进一步地,所述获取子模块,具体用于遍历任务管理器中的进程识别号,根据所述进程识别号获取系统进程的结构体信息;利用所述系统进程的结构体信息,查询得到待操作的目标系统进程;
所述第二查询子模块,具体用于利用所述目标系统进程对应的句柄获取目标系统进程的结构体信息;遍历系统中所有的线程,提取线程所属系统进程的结构体信息,将所述结构体信息与所述目标系统进程的结构体信息进行对比;如果比对一致,则获取结构体信息对应的目标线程,将线程状态处于运行状态的目标线程作为属于所述目标系统进程且正在运行的线程。
进一步地,所述查询模块包括:
挂起子模块,用于使用特征码查询技术获取线程挂起接口,使用所述线程挂起接口将所述属于所述目标系统进程且正在运行的线程挂起;
声明子模块,用于定义未文档化接口查询不同程序类型线程的上下文信息,根据挂起线程对应的程序类型,通过声明相应程序类型的文档化接口查询所述挂起线程的上下文信息。
进一步地,所述装置还包括:
传递单元,用于通过驱动和应用程序通讯的方式将所述与地址无关的进程操作代码传递至可执行文件;或
通过在内核定义的方式将所述与地址无关的进程操作代码传递至可执行文件;
写入单元,用于解析可执行文件,遍历寻找代码字节的起始位置,将所述与地址无关的进程操作代码写入至所述可执行文件中代码字节起始位置。
进一步地,所述装置还包括:
恢复单元,用于在所述预先编写与地址无关的进程操作代码,在可执行文件中将所述跳转代码位置设置为所述进程操作代码的起始位置之后,在所述与地址无关的进程操作代码中保留所述跳转代码位置,当执行完成进程操作代码对应的系统操作后,恢复到所述跳转代码位置处开始执行。
根据本申请的第三个方面,提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述第一方面所述方法的步骤。
根据本申请的第四个方面,提供了一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的方法的步骤。
借由上述技术方案,本申请提供的一种应用层系统进程的启动方法、装置及设备,与目前现有方式中使用函数操作来实现应用层启动系统进程的方式相比,本申请通过获取待操作目标系统进程中正在运行的线程,将正在运行的线程挂起后,查询挂起线程的上下文信息,这里挂起线程的上下文信息记录有当前瞬间的寄存器信息,标识了当前代码执行位置,根据挂起线程的上下文信息,在内核中定位到当前程序运行的跳转代码位置,进一步预先编写与地址无关的进程操作代码,在可执行文件中将跳转代码位置设置为进程操作代码的起始位置,以截获当前应用层程序的代码流,当程序执行到跳转代码位置时,利用进程操作代码在应用层启动系统进程,并根据系统进程执行系统操作,能够在内核中启动应用层系统进程,从而在底层技术上绕过主动防御,使得主动防御对可信程序不造成误差或者误报,实现内核中对应用层程序的灵活控制。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是本申请一实施例中应用层系统进程的启动方法的流程示意图;
图2是图1中步骤101的一具体实施方式流程示意图;
图3是图2中步骤201的一具体实施方式流程示意图;
图4是图2中步骤202的一具体实施方式流程示意图;
图5是本申请另一实施例中应用层系统进程的启动方法的流程示意图;
图6是本申请一实施例中应用层系统进程的启动装置的结构示意图;
图7是本发明实施例提供的一种计算机设备的装置结构示意图。
具体实施方式
现在将参照若干示例性实施例来论述本发明的内容。应当理解,论述了这些实施例仅是为了使得本领域普通技术人员能够更好地理解且因此实现本发明的内容,而不是暗示对本发明的范围的任何限制。
如本文中所使用的,术语“包括”及其变体要被解读为意味着“包括但不限于”的开放式术语。术语“基于”要被解读为“至少部分地基于”。术语“一个实施例”和“一种实施例”要被解读为“至少一个实施例”。术语“另一个实施例”要被解读为“至少一个其他实施例”。
相关技术中,当前针对Windows操作系统启动系统进程主要通过以下三种函数操作来实现,第一种是使用WinExec,第二种是使用ShellExecute,第三种是使用CreateProcess。但是,通过函数操作的方式无法在内核中实现应用层启动系统进程,使得内核中很难对应用层程序进行控制。
为了解决该问题,本实施例提供了一种应用层系统进程的启动方法,如图1所示,该方法应用于操作系统对应的服务端,包括如下步骤:
101、获取待操作目标系统进程中正在运行的线程,将所述正在运行的线程挂起后,查询挂起线程的上下文信息。
其中,待操作目标系统进程为任务管理器中任一指定的系统进程,通常情况下,任务管理器中会记录有正常运行的系统进程的进程信息,这里进程信息包括进程描述信息、进程控制和管理信息、资源分配清单、处理机相关信息等,进程描述信息包括进程标识符PID通常为进程在创建时操作系统分配的独一无二的标识符,用于区分进程,还包括用户标识符UID,进程信息还包括,进程控制和管理信息包括进程当前状态、进程优先级,资源分配清单包括程序段指针、数据段指针、键盘、鼠标等,处理机相关信息包括各种寄存器(用于进程状态)。
在目标系统进程中至少有一个运行的线程,而目标进程中正在运行的线程描述了系统正在操作的应用层程序,通过将目标系统进程中正在运行的线程挂起后,可以查询到挂起线程的上下文信息,进而获取程序执行的代码流。
对于本实施例的执行主体可以为应用层系统进程的启动装置或设备,可以配置在操作系统对应的服务端,通过获取待操作目标系统进程中正在运行的线程,将正在运行的线程挂起,以暂停当前应用层程序的线程操作,进而查询挂起线程的上下文信息,通过挂起线程的上下文信息来截获程序执行的代码流,进而利用程序执行的代码流定位到内核中的应用层的程序,以便于在内核中实现对应用层程序的控制。
102、根据所述挂起线程的上下文信息,在内核中定位到当前程序运行的跳转代码位置。
这里挂起线程的上下文信息相当于操作系统维持的线程的CUP寄存器的状态,该结构为上下文结构,创建线程的上下文信息时刻指定线程为暂停状态,这样操作系统在调度时便不会进行调度该线程。当线程的运行环境作出修改时,必须是线程成为可调度线程。具体可通过线程的上下文信息保存线程运行的状态,使得CPU可以记得上次线程执行的代码位置以及线程内部数据等,该上下文信息与CPU有关,特定操作系统的CPU类型对应着特定的上下文结构,例如,32位操作系统对应有32位CPU对应的上下文结构,64位操作系统对应有64位CPU对应的上下文结构。
具体地,可通过声明查询接口来判断进程所属于操作系统的CPU类型,并根据进程所属操作系统的CPU类型声明相应CPU类型的接口来查询挂起线程的上下文信息。
可以理解的是,通过上下文信息,可获取到直接与CPU有关的寄存器信息,使用寄存器信息能够在内核中定位到当前程序运行的跳转代码位置,该跳转代码位置标识了当前应用层程序中代码流下一步要执行的字节位置。
103、预先编写与地址无关的进程操作代码,在可执行文件中将所述跳转代码位置设置为所述进程操作代码的起始位置。
其中,预先编写与地址无关的进程操作代码为shellcode代码, shellcode代码可以通过启动系统进程实现不同的系统操作功能,例如,加载文件、创建文件等。这里shellcode代码在任何操作系统平台上都可以运行,代码是汇编形式的字节,主要用来创建系统进程,通常在创建系统进程之前会保存跳转代码位置,创建之后直接跳转到相应的代码位置。
这里跳转代码位置为CPU执行代码的位置,表示CPU当前执行的位置在哪里,具体跳转代码位置为EIP/RIP,EIP/RIP为寄存器的开头地址指向,EIP为32位程序的CPU指向,RIP为64位程序的CPU的指向。
104、当程序执行到所述跳转代码位置时,利用所述进程操作代码在应用层启动系统进程,并根据所述系统进程执行系统操作。
在可执行文件中,修改后CPU就会根据跳转代码位置的指向来执行代码,修改跳转代码位置为进程操作代码的起始位置,那么当执行到跳转代码位置时就会执行进程操作代码来启动系统进程。
本申请实施例提供的应用层系统进程的启动方法,与目前现有方式中使用函数操作来实现应用层启动系统进程的方式相比,本申请通过获取待操作目标系统进程中正在运行的线程,将正在运行的线程挂起后,查询挂起线程的上下文信息,这里挂起线程的上下文信息记录有当前瞬间的寄存器信息,标识了当前代码执行位置,根据挂起线程的上下文信息,在内核中定位到当前程序运行的跳转代码位置,进一步预先编写与地址无关的进程操作代码,在可执行文件中将跳转代码位置设置为进程操作代码的起始位置,以截获当前应用层程序的代码流,当程序执行到跳转代码位置时,利用进程操作代码在应用层启动系统进程,并根据系统进程执行系统操作,能够在内核中启动应用层系统进程,从而在底层技术上绕过主动防御,使得主动防御对可信程序不造成误差或者误报,实现内核中对应用层程序的灵活控制。
具体地,在上述实施例中,如图2所示,步骤101包括如下步骤:
201、获取待操作的目标系统进程,利用所述目标系统进程对应的标识信息遍历查询系统中所有线程,得到属于所述目标系统进程且正在运行的线程。
202、将所述属于所述目标系统进程且正在运行的线程挂起,使用预设接口查询挂起线程的上下文信息。
其中,目标系统进程对应的标识信息可以为进程标识符,由于系统中所有线程中包含了很多系统进程中运行的线程,以目标系统进程对应的标识信息作为查找依据,将系统中每个线程所属系统进程对应的标识信息与目标进程对应的标识信息进行遍历匹配,若匹配一致,则说明该线程属于目标系统该进程运行的线程,进一步获取到线程状态为正在运行的线程,得到属于目标系统进程且正在运行的线程。
具体地,在上述实施例中,如图3所示,步骤201包括如下步骤:
301、遍历任务管理器中的系统进程信息,根据所述系统进程信息获取待操作的目标系统进程。
302、使用内核函数查询所述目标系统进程对应的句柄。
303、遍历系统中所有的线程,利用根据所述目标系统进程对应的句柄查询到属于所述目标系统进程且正在运行的线程。
由于系统进程信息中包括了大量的有用信息,具体在获取待操作的目标系统进程过程中,可以遍历任务管理器中的进程识别号,根据进程识别号获取系统进程的结构体信息,然后利用系统进程的结构体信息,查询得到待操作的目标系统进程。这里进程的结构体信息包含了进程所有重要的信息,还包括了许多指向其他数据结构的指针,具体字段记录有进程ID、父进程ID、进程名等,可以函数从进程的结构体信息获取到进程名,通过比对进程名查询得到待操作的目标系统进程。
其中,目标系统进程对应的句柄属于一个索引,通过句柄可以遍历数组找到对应的对象。这里可在获取到系统进程的结构体信息后,利用系统进程的结构体信息查询目标系统进程对应的句柄。
具体在查询到属于目标系统进程且正在运行的线程过程中,可以利用目标系统进程对应的句柄获取目标系统进程的结构体信息,遍历系统中所有的线程,提取线程所属系统进程的结构体信息,并将结构体信息与目标系统进程的结构体信息进行对比,如果比对一致,则获取结构体信息对应的目标线程,将线程状态处于运行状态的目标线程作为属于目标系统进程且正在运行的线程。
具体地,在上述实施例中,如图4所示,步骤202包括如下步骤:
401、使用特征码查询技术获取线程挂起接口,使用所述线程挂起接口将所述属于所述目标系统进程且正在运行的线程挂起。
402、定义未文档化接口查询不同程序类型线程的上下文信息,根据挂起线程对应的程序类型,通过声明相应程序类型的文档化接口查询所述挂起线程的上下文信息。
可以理解的是,在获取结构体信息对应的目标线程之后,使用内核接口查询目标线程的线程状态,如果线程状态为正在运行,则使用接口获取线程的标识符,根据线程的标识符获取线程的结构体信息,并通过线程的结构体信息查询线程的句柄,并使用线程的句柄挂起正在运行的线程。
由于挂起线程的接口属于底层函数,该底层函数为未公开的函数,作为一种线程挂起方式,可使用特征码查询技术获取线程挂起接口,使用线程挂起接口执行线程挂起操作。而挂起线程的接口属于未文档化的函数,作为另一种线程挂起方式,可以在文档中使用声明进程挂起接口的方式,使用声明的进程挂起接口将目标系统进程中所有线程挂起,以将属于目标系统进程且正在运行的线程挂起。
这里通过定义未文档化信息,便于查询不同程序类型线程的上下文信息,举例来说,可以声明用于32/64位程序类型线程的上下文信息获取的未文档化接口,判断目标系统进程对应的句柄是否为32/64位程序类型,如果是32位程序类型,那么使用32位程序类的未文档化接口查询线程的上下文信息,如果是64位程序类型,那么使用64位程序类的未文档化接口查询线程的上下文信息。
进一步的,在上述实施例中,如图5所示,方法还包括如下步骤:
501、通过驱动和应用程序通讯的方式将所述与地址无关的进程操作代码传递至可执行文件或通过在内核定义的方式将所述与地址无关的进程操作代码传递至可执行文件。
502、解析可执行文件,遍历寻找代码字节的起始位置,将所述与地址无关的进程操作代码写入至所述可执行文件中代码字节起始位置。
为了便于进程管理,可以直接为系统进程申请内存,通过跳转代码位置执行申请内存中的占位,但是申请内存的方式能够查询到代码位置,为了无痕启动系统进程,这里可以将与地址无关的进程操作代码写入至可执行文件中,具体可通过解析可执行文件,寻找代码节起始位置,该代码节起始位置不会重复执行,进一步将与地址无关的进程操作代码写进去,通常代码字节的起始位置一般使用初始化代码,该代码只有在程序初始化的时候才会运行,等程序启动后则永远不会执行,还可以使用空白空间。
可以理解的是,为了便于目标系统进程的恢复,在上述实施例的步骤502之后包括:
通过在与地址无关的进程操作代码中保留跳转代码位置,当执行完成进程操作代码对应的系统操作后,恢复到跳转代码位置处开始执行。通常情况下,在进程操作代码执行完毕后,此时跳转代码位置仍然指向的是与地址无关的进程操作代码的起始位置,这里通过将跳转代码位置保存在进程操作代码中,在执行完成进程操作代码之后,恢复到跳转代码位置处开始执行。
上述操作可做到无痕启动系统进程,启动指定系统进程之后清除痕迹,进而实现内核中对应用层程序的控制,例如,内核中开启网络之后接收一个可执行文件的数据,进而让应用层程序启动起来,除了能够绕过查杀软件的防御之外,还可以达到更新程序的目的,使得操作系统内核程序驻留更久。
进一步的,作为图1-5方法的具体实现,本申请实施例提供了一种应用层系统进程的启动装置,如图6所示,该装置包括:获取单元61、定位单元62、设置单元63、启动单元64。
获取单元61,用于获取待操作目标系统进程中正在运行的线程,将所述正在运行的线程挂起后,查询挂起线程的上下文信息;
定位单元61,用于根据所述挂起线程的上下文信息,在内核中定位到当前程序运行的跳转代码位置;
设置单元63,用于预先编写与地址无关的进程操作代码,在可执行文件中将所述跳转代码位置设置为所述进程操作代码的起始位置;
启动单元64,用于当程序执行到所述跳转代码位置时,利用所述进程操作代码在应用层启动系统进程,并根据所述系统进程执行系统操作。
本发明实施例提供的应用层系统进程的启动装置,与目前现有方式中使用函数操作来实现应用层启动系统进程的方式相比,本申请通过获取待操作目标系统进程中正在运行的线程,将正在运行的线程挂起后,查询挂起线程的上下文信息,这里挂起线程的上下文信息记录有当前瞬间的寄存器信息,标识了当前代码执行位置,根据挂起线程的上下文信息,在内核中定位到当前程序运行的跳转代码位置,进一步预先编写与地址无关的进程操作代码,在可执行文件中将跳转代码位置设置为进程操作代码的起始位置,以截获当前应用层程序的代码流,当程序执行到跳转代码位置时,利用进程操作代码在应用层启动系统进程,并根据系统进程执行系统操作,能够在内核中启动应用层系统进程,从而在底层技术上绕过主动防御,使得主动防御对可信程序不造成误差或者误报,实现内核中对应用层程序的灵活控制。
在具体的应用场景中,所述获取单元51包括:
获取模块,用于获取待操作的目标系统进程,利用所述目标系统进程对应的标识信息遍历查询系统中所有线程,得到属于所述目标系统进程且正在运行的线程;
查询模块,用于将所述属于所述目标系统进程且正在运行的线程挂起,使用预设接口查询挂起线程的上下文信息。
在具体的应用场景中,所述获取模块包括:
获取子模块,用于遍历任务管理器中的系统进程信息,根据所述系统进程信息获取待操作的目标系统进程;
第一查询子模块,用于使用内核函数查询所述目标系统进程对应的句柄;
第二查询子模块,用于遍历系统中所有的线程,利用根据所述目标系统进程对应的句柄查询到属于所述目标系统进程且正在运行的线程。
在具体的应用场景中,所述获取子模块,具体用于遍历任务管理器中的进程识别号,根据所述进程识别号获取系统进程的结构体信息;利用所述系统进程的结构体信息,查询得到待操作的目标系统进程;
所述第二查询子模块,具体用于利用所述目标系统进程对应的句柄获取目标系统进程的结构体信息;遍历系统中所有的线程,提取线程所属系统进程的结构体信息,将所述结构体信息与所述目标系统进程的结构体信息进行对比;如果比对一致,则获取结构体信息对应的目标线程,将线程状态处于运行状态的目标线程作为属于所述目标系统进程且正在运行的线程。
在具体的应用场景中,所述查询模块包括:
挂起子模块,用于使用特征码查询技术获取线程挂起接口,使用所述线程挂起接口将所述属于所述目标系统进程且正在运行的线程挂起;
声明子模块,用于定义未文档化接口查询不同程序类型线程的上下文信息,根据挂起线程对应的程序类型,通过声明相应程序类型的文档化接口查询所述挂起线程的上下文信息。
在具体的应用场景中,所述装置还包括:
传递单元,用于通过驱动和应用程序通讯的方式将所述与地址无关的进程操作代码传递至可执行文件;或
通过在内核定义的方式将所述与地址无关的进程操作代码传递至可执行文件;
写入单元,用于解析可执行文件,遍历寻找代码字节的起始位置,将所述与地址无关的进程操作代码写入至所述可执行文件中代码字节起始位置。
在具体的应用场景中,所述装置还包括:
恢复单元,用于在所述预先编写与地址无关的进程操作代码,在可执行文件中将所述跳转代码位置设置为所述进程操作代码的起始位置之后,在所述与地址无关的进程操作代码中保留所述跳转代码位置,当执行完成进程操作代码对应的系统操作后,恢复到所述跳转代码位置处开始执行。
需要说明的是,本实施例提供的一种应用层系统进程的启动装置所涉及各功能单元的其它相应描述,可以参考图1-图5中的对应描述,在此不再赘述。
基于上述如图1-图5所示方法,相应的,本申请实施例还提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述如图1-图5所示的应用层系统进程的启动方法。
基于这样的理解,本申请的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施场景所述的方法。
基于上述如图1-图5所示的方法,以及图6所示的虚拟装置实施例,为了实现上述目的,本申请实施例还提供了一种应用层系统进程的启动的实体设备,具体可以为计算机,智能手机,平板电脑,智能手表,服务器,或者网络设备等,该实体设备包括存储介质和处理器;存储介质,用于存储计算机程序;处理器,用于执行计算机程序以实现上述如图1-图5所示的应用层系统进程的启动方法。
可选的,该实体设备还可以包括用户接口、网络接口、摄像头、射频(RadioFrequency,RF)电路,传感器、音频电路、WI-FI模块等等。用户接口可以包括显示屏(Display)、输入单元比如键盘(Keyboard)等,可选用户接口还可以包括USB接口、读卡器接口等。网络接口可选的可以包括标准的有线接口、无线接口(如WI-FI接口)等。
在示例性实施例中,参见图7,上述实体设备包括通信总线、处理器、存储器和通信接口,还可以包括、输入输出接口和显示设备,其中,各个功能单元之间可以通过总线完成相互间的通信。该存储器存储有计算机程序,处理器,用于执行存储器上所存放的程序,执行上述实施例中的画作挂载方法。
本领域技术人员可以理解,本实施例提供的一种应用层系统进程的启动的实体设备结构并不构成对该实体设备的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件布置。
存储介质中还可以包括操作系统、网络通信模块。操作系统是管理上述店铺搜索信息处理的实体设备硬件和软件资源的程序,支持信息处理程序以及其它软件和/或程序的运行。网络通信模块用于实现存储介质内部各组件之间的通信,以及与信息处理实体设备中其它硬件和软件之间通信。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请可以借助软件加必要的通用硬件平台的方式来实现,也可以通过硬件实现。通过应用本申请的技术方案,与目前现有方式相比,本申请当程序执行到跳转代码位置时,利用进程操作代码在应用层启动系统进程,并根据系统进程执行系统操作,能够在内核中启动应用层系统进程,从而在底层技术上绕过主动防御,使得主动防御对可信程序不造成误差或者误报,实现内核中对应用层程序的灵活控制。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本申请所必须的。本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本申请序号仅仅为了描述,不代表实施场景的优劣。以上公开的仅为本申请的几个具体实施场景,但是,本申请并非局限于此,任何本领域的技术人员能思之的变化都应落入本申请的保护范围。
Claims (9)
1.一种应用层系统进程的启动方法,其特征在于,包括:
获取待操作目标系统进程中正在运行的线程,将所述正在运行的线程挂起后,查询挂起线程的上下文信息;
根据所述挂起线程的上下文信息,在内核中定位到当前程序运行的跳转代码位置;
预先编写与地址无关的进程操作代码,在可执行文件中将所述跳转代码位置设置为所述进程操作代码的起始位置;
当程序执行到所述跳转代码位置时,利用所述进程操作代码在应用层启动系统进程,并根据所述系统进程执行系统操作;
所述与地址无关的进程操作代码为汇编形式的字节码,用于在应用层创建执行系统操作的系统进程,所述方法还包括:
通过在内核定义的方式将所述与地址无关的进程操作代码传递至可执行文件;
解析可执行文件,遍历寻找代码字节的起始位置,将所述与地址无关的进程操作代码写入至所述可执行文件中代码字节起始位置。
2.根据权利要求1所述的方法,其特征在于,所述获取待操作目标系统进程中正在运行的线程,将所述正在运行的线程挂起后,查询挂起线程的上下文信息,具体包括:
获取待操作的目标系统进程,利用所述目标系统进程对应的标识信息遍历查询系统中所有线程,得到属于所述目标系统进程且正在运行的线程;
将所述属于所述目标系统进程且正在运行的线程挂起,使用预设接口查询挂起线程的上下文信息。
3.根据权利要求2所述的方法,其特征在于,所述获取待操作的目标系统进程,利用所述目标系统进程对应的标识信息遍历查询系统中所有线程,得到属于所述目标系统进程且正在运行的线程,具体包括:
遍历任务管理器中的系统进程信息,根据所述系统进程信息获取待操作的目标系统进程;
使用内核函数查询所述目标系统进程对应的句柄;
遍历系统中所有的线程,利用根据所述目标系统进程对应的句柄查询到属于所述目标系统进程且正在运行的线程。
4.根据权利要求3所述的方法,其特征在于,所述遍历任务管理器中的系统进程信息,根据所述系统进程信息获取待操作的目标系统进程,具体包括:
遍历任务管理器中的进程识别号,根据所述进程识别号获取系统进程的结构体信息;
利用所述系统进程的结构体信息,查询得到待操作的目标系统进程;
所述遍历系统中所有的线程,利用根据所述目标系统进程对应的句柄查询到属于所述目标系统进程且正在运行的线程,具体包括:
利用所述目标系统进程对应的句柄获取目标系统进程的结构体信息;
遍历系统中所有的线程,提取线程所属系统进程的结构体信息,将所述结构体信息与所述目标系统进程的结构体信息进行对比;
如果比对一致,则获取结构体信息对应的目标线程,将线程状态处于运行状态的目标线程作为属于所述目标系统进程且正在运行的线程。
5.根据权利要求2所述的方法,其特征在于,所述将所述属于所述目标系统进程且正在运行的线程挂起,使用预设接口查询挂起线程的上下文信息,具体包括:
使用特征码查询技术获取线程挂起接口,使用所述线程挂起接口将所述属于所述目标系统进程且正在运行的线程挂起;
定义未文档化接口查询不同程序类型线程的上下文信息,根据挂起线程对应的程序类型,通过声明相应程序类型的文档化接口查询所述挂起线程的上下文信息。
6.根据权利要求1-5中任一项所述的方法,其特征在于,在所述预先编写与地址无关的进程操作代码,在可执行文件中将所述跳转代码位置设置为所述进程操作代码的起始位置之后,所述方法还包括:
在所述与地址无关的进程操作代码中保留所述跳转代码位置,当执行完成进程操作代码对应的系统操作后,恢复到所述跳转代码位置处开始执行。
7.一种应用层系统进程的启动装置,其特征在于,包括:
获取单元,用于获取待操作目标系统进程中正在运行的线程,将所述正在运行的线程挂起后,查询挂起线程的上下文信息;
定位单元,用于根据所述挂起线程的上下文信息,在内核中定位到当前程序运行的跳转代码位置;
设置单元,用于预先编写与地址无关的进程操作代码,在可执行文件中将所述跳转代码位置设置为所述进程操作代码的起始位置;
启动单元,用于当程序执行到所述跳转代码位置时,利用所述进程操作代码在应用层启动系统进程,并根据所述系统进程执行系统操作;
所述与地址无关的进程操作代码为汇编形式的字节码,用于在应用层创建执行系统操作的系统进程,所述装置还包括:
传递单元,用于通过在内核定义的方式将所述与地址无关的进程操作代码传递至可执行文件;
写入单元,用于解析可执行文件,遍历寻找代码字节的起始位置,将所述与地址无关的进程操作代码写入至所述可执行文件中代码字节起始位置。
8.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述应用层系统进程的启动方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述应用层系统进程的启动方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211497602.3A CN115543586B (zh) | 2022-11-28 | 2022-11-28 | 应用层系统进程的启动方法、装置、设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211497602.3A CN115543586B (zh) | 2022-11-28 | 2022-11-28 | 应用层系统进程的启动方法、装置、设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115543586A CN115543586A (zh) | 2022-12-30 |
CN115543586B true CN115543586B (zh) | 2023-03-17 |
Family
ID=84721602
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211497602.3A Active CN115543586B (zh) | 2022-11-28 | 2022-11-28 | 应用层系统进程的启动方法、装置、设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115543586B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117971423A (zh) * | 2024-01-16 | 2024-05-03 | 北京趋动智能科技有限公司 | 多进程应用的迁移方法、装置、存储介质及电子设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104679561A (zh) * | 2015-02-15 | 2015-06-03 | 福建天晴数码有限公司 | 一种动态链接库文件加载的方法及系统 |
WO2015093671A1 (ko) * | 2013-12-16 | 2015-06-25 | 주식회사 에스이웍스 | Arm 프로세서 기반의 파일 난독화 방법 |
CN111488576A (zh) * | 2020-04-23 | 2020-08-04 | 成都安易迅科技有限公司 | 一种首页篡改的保护方法、系统、电子设备及存储介质 |
CN114662098A (zh) * | 2020-12-23 | 2022-06-24 | 网神信息技术(北京)股份有限公司 | 攻击代码检测方法、装置、电子设备、程序和存储介质 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102394859B (zh) * | 2011-07-27 | 2014-05-14 | 哈尔滨安天科技股份有限公司 | 基于线程行为的木马窃取文件检测方法和系统 |
CN102819697B (zh) * | 2011-12-26 | 2015-07-22 | 哈尔滨安天科技股份有限公司 | 一种基于线程反编译的多平台恶意代码检测方法和系统 |
CN105512548B (zh) * | 2015-12-02 | 2018-03-30 | 湘潭大学 | 基于隐藏可执行镜像并注入dll保护镜像代码的方法 |
US10467407B2 (en) * | 2017-03-30 | 2019-11-05 | Check Point Advanced Threat Prevention Ltd. | Method and system for detecting kernel corruption exploits |
CN110673899B (zh) * | 2018-07-03 | 2022-06-21 | 武汉斗鱼网络科技有限公司 | 一种程序处理方法及相关设备 |
CN110737892B (zh) * | 2018-07-20 | 2021-11-09 | 武汉斗鱼网络科技有限公司 | 一种针对apc注入的检测方法和相关装置 |
GB202103020D0 (en) * | 2021-03-03 | 2021-04-14 | Zeroperil Ltd | Methods and systems for detecting and blocking malicious actions in an operating system |
-
2022
- 2022-11-28 CN CN202211497602.3A patent/CN115543586B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015093671A1 (ko) * | 2013-12-16 | 2015-06-25 | 주식회사 에스이웍스 | Arm 프로세서 기반의 파일 난독화 방법 |
CN104679561A (zh) * | 2015-02-15 | 2015-06-03 | 福建天晴数码有限公司 | 一种动态链接库文件加载的方法及系统 |
CN111488576A (zh) * | 2020-04-23 | 2020-08-04 | 成都安易迅科技有限公司 | 一种首页篡改的保护方法、系统、电子设备及存储介质 |
CN114662098A (zh) * | 2020-12-23 | 2022-06-24 | 网神信息技术(北京)股份有限公司 | 攻击代码检测方法、装置、电子设备、程序和存储介质 |
Non-Patent Citations (3)
Title |
---|
TakeshiOkamoto.SecondDEP: Resilient Computing that Prevents Shellcode Execution in Cyber-Attacks.2015,第60卷第691-699页. * |
李占魁.基于内存转储分析的代码注入攻击检测方法.2020,(第2期),I138-162. * |
诸葛建伟,徐辉,潘爱民.基于面向对象方法的攻击知识模型.2004,(第07期),第1110-1116页. * |
Also Published As
Publication number | Publication date |
---|---|
CN115543586A (zh) | 2022-12-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109478217B (zh) | 使用基于偏移的虚拟地址映射对目标应用功能的基于内核的检测 | |
CN104598809B (zh) | 程序的监控方法及其防御方法以及相关装置 | |
US20150020198A1 (en) | Methods of detection of software exploitation | |
US20080168103A1 (en) | Database management methodology | |
CN112099800B (zh) | 代码数据的处理方法、装置和服务器 | |
CN115543586B (zh) | 应用层系统进程的启动方法、装置、设备及可读存储介质 | |
US9542112B2 (en) | Secure cross-process memory sharing | |
CN113407414A (zh) | 程序运行监测方法、装置、终端及存储介质 | |
CN111831440A (zh) | 内存回收方法、装置、存储介质及电子设备 | |
CN109634664B (zh) | 一种cpu给硬件电路下发命令描述符的方法及装置 | |
CN109359092B (zh) | 文件管理方法、桌面显示方法、装置、终端及介质 | |
CN111597553A (zh) | 病毒查杀中的进程处理方法、装置、设备及存储介质 | |
CN111625833A (zh) | 一种高效的软件程序释放后重用漏洞判定方法和装置 | |
US9535713B2 (en) | Manipulating rules for adding new devices | |
CN111984379B (zh) | 读写事务控制方法、系统、终端设备及存储介质 | |
US11934517B2 (en) | Systems and methods for reliably injecting control flow integrity into binaries without source code | |
CN115905040B (zh) | 计数器的处理方法、图形处理器、设备及存储介质 | |
CN111831413A (zh) | 线程调度方法、装置、存储介质及电子设备 | |
CN111831432A (zh) | Io请求的调度方法、装置、存储介质及电子设备 | |
CN109976881B (zh) | 事务识别方法和装置、存储介质以及电子装置 | |
WO2020037111A1 (en) | Systems and methods for reliably injecting control flow integrity into binaries by tokenizing return addresses | |
CN115705294B (zh) | 用于获取函数调用信息的方法、装置、电子设备和介质 | |
US8635331B2 (en) | Distributed workflow framework | |
CN114490054A (zh) | 上下文切换方法、装置、加速单元、电子设备和片上系统 | |
CN113342270A (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 |