用户模式与内核模式通信的方法、装置、电子设备和介质与流程

文档序号:32985128发布日期:2023-01-17 22:37阅读:19来源:国知局
1.本公开涉及一种用户模式与内核模式通信的方法、装置、电子设备和计算机可读介质。
背景技术
::2.用户模式与内核模式的常规通信方式包括标准系统调用、deviceiocontrol、escape等。这些常规的通信方式都是将控制代码直接发送到指定的设备驱动程序,使相应的设备执行相应的操作。相关技术中,用户模式与内核模式通信的安全性亟待提高。技术实现要素:3.根据本公开的一个方面,提供了一种用户模式与内核模式通信的方法,包括:加载包括中断处理函数的驱动,其中所述驱动用于注册与所述中断处理函数对应的目标中断向量;在目标进程创建时,将所述目标中断向量注入到所述目标进程中;以及响应于接收到包括所述目标中断向量的中断,执行所述中断处理函数。4.根据该方法的一些示例性实施例,所述中断处理函数为自定义的中断处理函数。5.根据该方法的一些示例性实施例,所述驱动注册与所述中断处理函数对应的目标中断向量包括:扫描中断描述符表idt并确定非系统预留的且未被占用的中断向量作为所述目标中断向量;以及将所述中断处理函数的地址分解成idt表项的格式并填入到所述目标中断向量对应的idt表项中。6.根据该方法的一些示例性实施例,扫描中断描述符表idt并确定非系统预留的且未被占用的中断向量作为所述目标中断向量包括:获取与中断向量对应的idt表项并进行解析,其中,所述中断向量为跳过cpu保留和操作系统保留的中断向量的中断向量;并且当所述idt表项无效时,则将所述中断向量确定为所述目标中断向量。7.根据该方法的一些示例性实施例,该方法还包括:在所述目标进程进行通信之前检查所述驱动是否存在。8.根据该方法的一些示例性实施例,通过检测所述驱动是否创建了设备对象来检查所述驱动是否存在。9.根据该方法的一些示例性实施例,在所述目标进程进行通信之前准备通信环境。10.根据该方法的一些示例性实施例,所述准备通信环境包括协商通信协议和进行数据保护。11.根据该方法的一些示例性实施例,所述通信环境包括传递的参数、方式。12.根据本公开的另一个方面,提供了一种用户模式与内核模式通信的装置,包括:加载模块,用于加载包括中断处理函数的驱动,其中所述驱动用于注册与所述中断处理函数对应的目标中断向量;注入模块,用于当目标进程创建时将所述目标中断向量注入到所述目标进程中;以及执行模块,用于响应于接收到包括所述目标中断向量的中断,执行所述中断处理函数。13.根据该装置的一些示例性实施例,所述中断处理函数为自定义的中断处理函数。14.根据该装置的一些示例性实施例,所述加载模块包括:扫描模块,用于扫描中断描述符表idt并确定非系统预留的且未被占用的中断向量作为所述目标中断向量;和分解模块,用于将所述中断处理函数的地址分解成idt表项的格式并将其填入到所述目标中断向量对应的idt表项中。15.根据该装置的一些示例性实施例,所述扫描模块包括:解析模块,用于获取与中断向量对应的idt表项并进行解析,其中,所述中断向量为跳过cpu保留和操作系统保留的中断向量的中断向量;并且当所述idt表项无效时,则将所述中断向量确定为所述目标中断向量。16.根据该装置的一些示例性实施例,所述装置还包括:检查模块,用于在所述目标进程进行通信之前检查所述驱动是否存在。17.根据该装置的一些示例性实施例,通过检测所述驱动是否创建了设备对象来检查所述驱动是否存在。18.根据该装置的一些示例性实施例,所述装置还包括:准备模块,用于在所述目标进程进行通信之前准备通信环境。19.根据该装置的一些示例性实施例,所述准备通信环境包括协商通信协议和进行数据保护。20.根据该装置的一些示例性实施例,所述通信环境包括传递的参数、方式。21.根据本公开的另一个方面,提供了一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为调用所述存储器存储的指令,以执行上述方法。22.根据本公开的另一个方面,提供了一种其上存储有指令的计算机可读介质,所述指令当被执行时使得计算设备执行根据上述实施例中任一项所述的方法。23.通过本公开,可以对现有的用户态应用与内核态应用通信容易被拦截并且被第三方软件恶意利用的问题进行克服。由于本公开的整个流程只运行自行实现的代码,所以绕开一切与系统相关的代码,因此第三方的程序都无法进行拦截和调用。本公开的核心是提供一种用于用户态应用与内核态应用通信的新的思路,其保障了高度安全的用户态应用与内核态应用通信。24.本公开可以应用于所有操作系统,例如windows,linux,android,ios平台等,其不依赖于操作系统框架,有着最高的自由度与安全性。附图说明25.现在将参照附图描述本公开的具体示例性实施例。然而,本公开可以以很多不同的形式实施,并且不应该被解读为限于本文所阐述的实施例;相反,这些实施例被提供以便使该公开全面而完整,并且将向本领域技术人员完全表达本公开的范围。在对附图所示特定示例性实施例的详细描述中所使用的术语不打算对本公开是限制性的。在附图中,类似的数字指代类似的部件。26.图1示出根据本公开一个实施例的用于用户模式与内核模式通信的方法的流程图。27.图2示出根据本公开一个实施例的用于用户模式与内核模式通信的装置的框图。28.图3示出根据本公开一个实施例的计算设备的框图。具体实施方式29.为使本公开的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本公开技术方案作进一步说明。应该进一步理解,使用在该说明书中,术语“包括”意指存在所陈述的特征、步骤、操作、部件和/或组件,但是并不排除存在或添加一个或更多个其他特征、步骤、操作、部件、组件和/或其组成的组。30.由于常规的通信方式都使用cpu保留的或操作系统保留的中断向量,这种方式容易被拦截,安全性不高,并且容易被第三方软件恶意利用。比如固件升级接口,如果单纯使用这种方式,容易被恶意升级,成为第三方恶意利用的后门,包括反调试、反作弊等场景。31.因此,需要一种改进的用户模式与内核模式通信的方式来解决以上缺陷。32.图1是根据本公开实施例示出用于用户模式与内核模式通信的方法100的流程图。33.如图1中所示,在步骤102处,加载包括中断处理函数的驱动,其中所述驱动用于注册与所述中断处理函数对应的目标中断向量。在windows操作系统的示例中,分为nt式驱动程序的加载和wdm式驱动程序的加载。nt式驱动程序的加载:1.用drivermonitor工具加载nt式驱动;2.在注册表中填写相应的字段,windows对nt式驱动程序的加载,是基于服务的方式加载的,类似于windows服务程序的加载。设备驱动程序的动态加载主要是基于服务控制程序(servicecontrolmanager,scm)系统组件完成的。scm组件为windows中运行的组件提供许多服务,例如,启动,停止,控制等服务。服务类似于linux中的守护进程。编写加载驱动程序,主要是操作scm组件。wdm式驱动程序的加载:和nt是驱动程序的不同,wdm式驱动程序不能被当做服务程序进行加载,因此不能靠简单的修改注册表来进行加载。wdm式驱动程序的加载需要依靠一个以inf为后缀名的文本文件来描述驱动程序的加载过程。wdm驱动程序相比较nt式驱动程序增加了即插即用的功能,因此在安装的时候需要一个inf文件来提供支持以提供必要的信息。系统首先会定位inf文件,根据inf文件上的指示,系统会将驱动程序(sys文件)相关的文件拷贝到相应的系统目录下,修改相应的注册表。同时通知pnp管理器,i/o管理器创建新设备,并执行驱动程序的入口函数driverentry,inf文件提供了wdm驱动程序所需要的所有信息,包括需要新建和修改的注册表和需要拷贝的文件等。在linux操作系统的示例中,驱动加载的方式有两种:1.动态加载,在系统启动后,通过insmod或modprobe命令加载.ko内核目标文件,成功后可通过mknod指令进行挂载节点,不需要的时候可通过rmmod命令来卸载模块;2.静态加载,驱动的静态加载指的是直接把驱动程序编译进内核,在系统启动后可直接调用,不需要任何加载卸载命令。34.通常,处理器在中断到达时会根据不同的中断向量找到对应的中断处理函数(中断处理例程isr)对该信号进行处理。在一个示例中,所述驱动为用户自己实现的驱动并且该中断处理函数是用户自定义的中断处理例程,所以在中断描述符表idt中找到一个空闲的中断向量并且将该中断向量分配给用户自定义的中断处理例程,使得处理器可以根据该中断向量执行用户自定义的中断处理例程。35.在所述驱动加载完成后,所述驱动首先扫描中断描述符表(interruptdeortable,idt)。例如,x86cpu采用一个有256个元素的数组来描述中断/异常,该数组的索引为中断向量;其内容包括了三种门描述符(gatedeor),用于描述一个中断/异常的处理接口;这个数组就是idt,cpu在收到中断请求的时候,就利用中断向量获取到对应的中断处理接口描述并执行。36.中断向量是一个整数,例如在x86cpu上,使用中断向量对中断(interrupt,外部设备产生)和异常(exception,cpu在程序执行中产生)统一编号,每个cpu核心内部,中断/异常和中断向量所以一一对应的;但是在各个不同的cpu核心上,相同的中断向量可以对应不同的中断(至少对于linux的设置,异常还是使用相同的中断向量)。例如,中断向量的取值范围为[0,255],其中[0,31]被系统保留使用(多数作为异常的中断向量),其余的可供外设中断使用(系统设备比如localapic也占用了部分[32,255]这个范围的中断向量)。[0037]在一个示例中,在扫描idt时,跳过cpu保留的中断向量和操作系统保留的中断向量。之后,取出与下一中断向量对应的idt表项并且对该idt表项进行解析。如果解析该idt表项为有效表项时,说明该中断向量被其他中断处理例程所占用,则跳过该中断向量。如果解析该idt表项为无效表项时,说明该中断向量未被其他中断处理例程所占用,则将该中断向量确定为非系统预留的且未被占用的中断向量作为目标中断向量。[0038]然后,将所述中断处理函数的地址分解成idt表项的格式并填入到所述目标中断向量对应的idt表项中。例如,将驱动所提供的中断处理函数的地址分解成idt表项的格式并填入到所述目标中断向量对应的idt表项中。这样,所述驱动就实现了注册所述中断处理函数。这样,处理器在中断到达时根据所述中断向量找到对应的中断处理函数并且执行该中断处理函数。[0039]在步骤104处,在目标进程创建时,将所述目标中断向量注入到所述目标进程中。例如,用户在对计算机或智能电话等计算设备进行操作时,首先创建一个进程。创建进程就是在内存中申请一块独立的内存空间,将完整的代码存储进去,然后去执行进程任务。在一个示例中,用户登录,用户命令请求创建进程。更具体地,在windows操作系统中,用户双击一个图标来创建进程。在android或ios平台中,用户点击一个app来创建一个进程。替代地或附加地,系统在运行时也会自行创建一个或多个进程。在一个示例中,可以一直监测进程的创建,直至等待到目标进程的创建时,将所述目标中断向量注入到所述目标进程中。示例性地,可以注册目标进程创建通知,等到目标进程的创建。[0040]在步骤106处,响应于接收到包括所述目标中断向量的中断,执行所述中断处理函数。在所述目标进程完成初始化并且运行时,在目标进程触发中断之后,由于将所述中断处理函数对应的目标中断向量注入到所述目标进程中,所以处理器执行该目标中断向量对应的中断处理函数。示例性地,处理器基于目标中断向量以及idt表项,可以确定中断处理函数的地址,并基于中断处理函数的地址,执行该中断处理函数。在一些可选的实施例中,还可以检测目标中断向量是否有效,若有效,则可以执行对应的中断处理函数。若无效,可以执行常规的用户态应用与内核态应用通信。[0041]在一些可选的实施例中,处理器可以执行上述用户自定义的驱动,以注册与所述中断处理函数对应的目标中断向量,在目标进程创建时,将所述目标中断向量注入到所述目标进程中,并响应于接收到包括所述目标中断向量的中断,执行所述中断处理函数。这样,通过执行自定义的驱动来实现目标中断向量的注册、目标中断向量的注入以及中断处理函数的执行,可以绕开与系统相关的程序和检查,并且能够有效防止第三方程序的拦截与调用。[0042]附加地或可替换地,在所述目标进程进行通信之前检查驱动是否存在。该驱动为用户自定义的驱动,其包括用户自定义的中断处理函数。具体地,通过检测所述驱动是否创建了设备对象来检查目标驱动(自定义的驱动)是否存在。在一个示例中,设备对象由一段特征字符串来代表,通过检测到该特征字符串来表示目标驱动已经存在,否则代表目标驱动仍不存在。如果检查该目标驱动存在,则执行所述目标进程的通信,否则继续等待,直至发现目标驱动存在或者执行常规通信方式。[0043]附加地或可替换地,在所述目标进程进行通信之前准备通信环境。例如,所述准备通信环境包括协商通信协议和进行数据保护。这样,可以防止使用过程中发生进程切换所导致内存无效问题。在一个示例中,所述通信环境包括传递的参数、方式。[0044]需要说明的是,所述驱动的加载随系统的启动而启动,在系统已启动未死机、驱动加载成功且存在的状态,可以通过本公开实施例的通信方法进行通信,若驱动未加载成功或者加载成功后出现不存在状态,可以执行常规的用户态应用与内核态应用通信。[0045]可以理解,本公开提及的上述各个方法实施例,在不违背原理逻辑的情况下,均可以彼此相互结合形成结合后的实施例,限于篇幅,本公开不再赘述。[0046]本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。[0047]此外,本公开还提供了用户模式与内核模式通信的装置、电子设备、计算机可读存储介质、计算机程序产品,上述均可用来实现本公开提供的任一种用户模式与内核模式通信方法,相应技术方案和技术效果可参见方法部分的相应记载,不再赘述。[0048]图2示出根据本公开一个实施例的用于用户模式与内核模式通信的装置的框图。[0049]如图2中所示,装置200可以包括加载模块202、注入模块206和执行模块212。具体地,加载模块202可以被配置为加载包括中断处理函数的驱动,其中所述驱动用于注册与所述中断处理函数对应的目标中断向量。在一个示例中,所述驱动是用户自己实现的目标驱动并且所述中断处理函数是用户自己定义的中断处理例程。所述驱动注册与所述中断处理函数对应的目标中断向量需要所述驱动扫描idt并确定非系统预留的且未被占用的中断向量作为目标中断向量并且将所述中断处理函数的地址分解成idt表项的格式并将其填入到所述中断向量对应的idt表项中。在一个示例中,所述加载模块202可以包括扫描模块2022和分解模块2024。具体地,所述扫描模块2022可以被配置用于扫描idt并确定非系统预留的且未被占用的中断向量作为所述目标中断向量并且所述分解模块2024模块可以被配置用于将所述中断处理函数的地址分解成idt表项的格式并将其填入到所述中断向量对应的idt表项中。例如,扫描模块2022在扫描idt时跳过cpu保留的中断向量和操作系统保留的中断向量。在一个示例中,扫描模块2022包括解析模块20222,该解析模块20222可以被配置为获取与中断向量对应的idt表项并进行解析并且当所述idt表项无效时,则将所述中断向量确定为所述目标中断向量,其中当所述idt表项有效时,则跳过。在一些实施例中,该装置还可以包括监测模块204,其可以被配置为监测目标进程的创建。例如,用户在对计算机或智能电话等计算设备进行操作时,首先创建一个进程。在一个示例中,用户登录,用户命令请求创建进程。更具体地,在windows操作系统中,用户双击一个图标来创建进程。在android或ios平台中,用户点击一个app来创建一个进程。替代地或附加地,系统在运行时也会自行创建一个或多个进程。在一个示例中,监测模块204可以一直监测进程,直至等待到目标进程的创建时,注入模块206可以将所述目标中断向量注入到所述目标进程中。在目标进程触发中断之后,由于将之前所确定的中断向量注入到所述目标进程中,所以执行模块212可以响应于接收到包括所述目标中断向量的中断,执行该目标中断向量对应的中断处理函数。[0050]附加地或可替换地,装置200还可以包括检查模块208,检查模块208可以被配置为在所述目标进程进行通信之前检查目标驱动是否存在。目标驱动为用户自定义的驱动,其包括用户自定义的中断处理函数。具体地,通过检测所述驱动是否创建了设备对象来检查目标驱动是否存在。在一个示例中,设备对象由一段特征字符串来代表,通过检测到该特征字符串来表示目标驱动已经存在,否则代表目标驱动仍不存在。如果检查该目标驱动存在,则执行所述目标进程的通信,否则继续等待,直至发现目标驱动存在或者执行常规通信方式。[0051]附加地或可替换地,装置200还可以包括准备模块210,准备模块210可以被配置为在执行所述目标进程之前准备通信环境。例如,所述准备通信环境包括协商通信协议和进行数据保护。在一个示例中,所述通信环境包括传递的参数、方式。[0052]在各种实施例中,装置200可以用于执行如上文所描述的任何方法的步骤。因此,根据该方法的任意特征适用于该装置200并且反之亦然。[0053]在一些实施例中,本公开实施例提供的装置具有的功能或包含的模块可以用于执行上文方法实施例描述的方法,其具体实现和技术效果可以参照上文方法实施例的描述,为了简洁,这里不再赘述。[0054]本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述方法。其中,所述计算机可读存储介质可以是非易失性计算机可读存储介质,或者可以是易失性计算机可读存储介质。[0055]本公开实施例还提出一种计算机程序,包括计算机可读代码,当所述计算机可读代码在电子设备中运行时,所述电子设备中的处理器执行上述方法。[0056]本公开实施例还提供了一种计算机程序产品,包括计算机可读代码,或者承载有计算机可读代码的非易失性计算机可读存储介质,当所述计算机可读代码在电子设备中运行时,所述电子设备中的处理器执行上述方法。[0057]本公开实施例还提供一种电子设备,包括:一个或多个处理器;用于存储可执行指令的存储器;其中,所述一个或多个处理器被配置为调用所述存储器存储的可执行指令,以执行上述方法。[0058]电子设备可以被提供为终端、服务器或其它形态的设备。[0059]附加地或可替换地,可以使用计算机处理器、存储器单元、存储设备、计算机软件和其他组件在一台或更多台计算机或服务器或类似设备上实现本技术的上述方法、通用对接模块、服务平台或第三方平台。这种计算机或服务器的高级框图在图3中示出。在此,计算机、服务器或其他包括处理器的设备统称为计算设备。计算设备302包含处理器304,处理器304通过执行定义了整体操作的计算机程序指令来控制计算机302的操作。可以将计算机程序指令存储在存储设备312(例如磁盘)中并在需要执行计算机程序指令时将其加载到存储器310中。因此,参照图1的方法的步骤可以由存储在存储器310和/或存储设备312中的计算机程序指令定义,并由执行该计算机程序指令的处理器304控制。计算设备302还包括一个或更多个网络接口306,用于经由网络与其他设备进行通信。计算设备302还包括使用户能够与计算机302进行交互的其他输入/输出设备308(例如,显示器、键盘、鼠标、扬声器、按钮等)。本领域的技术人员将认识到,实际计算机的实施例也可以包含其他组件,并且图3是用于说明目的的这种计算机的一些组件的高级表示。[0060]存储设备312和存储器310均包括有形的非暂时性计算机可读存储介质。存储设备312和存储器310均可包括高速随机存取存储器,诸如动态随机存取存储器(dram)、静态随机存取存储器(sram)、双倍数据速率同步动态随机存取存储器(ddrram)或其他随机存取固态存储器设备,并且可以包括非易失性存储器,诸如一个或多个磁盘存储设备(诸如内部硬盘和可移动磁盘)、磁光盘存储设备、光盘存储设备、闪存设备、半导体存储器设备(诸如可擦除可编程只读存储器(eprom)、电可擦可编程只读存储器(eeprom))、紧凑盘只读存储器(cd-rom)、数字多功能盘只读存储器(dvd-rom)盘或其他非易失性固态存储设备。[0061]在另一实施例中,可以在基于网络的云计算系统中实现上述方法、通用对接模块、服务平台或第三方平台。在这样的基于网络的云计算系统中,服务器经由网络与一个或更多个客户端计算机通信。客户端计算机可以例如经由驻留在客户端计算机上并在其上运行的网络浏览器应用与服务器进行通信。客户端计算机可以将数据存储在服务器上,并经由网络访问该数据。客户端计算机可以经由网络将数据请求或在线服务请求传送到服务器。服务器可以实施所请求的服务,并将数据提供给(一个或多个)客户端计算机。服务器还可以传送被适配为使客户端计算机实施指定功能(例如,实施计算,在屏幕上显示指定数据等)的数据。上述方法的某些步骤可以由服务器或由基于网络的云计算系统中的其他计算机/处理器实施。上述方法的某些步骤可以由基于网络的云计算系统中的客户端计算机本地实施。上述方法的步骤可以由基于网络的云计算系统中的一个或更多个设备或者由本地客户端计算机以任何组合来实施。[0062]应认识到为了清楚起见在单独实施例的上下文中描述的本技术的某些特征还可以在单个实施例中以组合的方式提供。相反,为了简便起见在单个实施例的上下文中描述的本技术的各种特征还可以单独地或以任何适当的子组合或在本技术的任何其他所述实施例中适当地提供。不应将在各种实施例的上下文中描述的某些特征视为那些实施例的必要特征,除非该实施例在没有那些元素的情况下无效。[0063]虽然已结合本技术的具体实施例描述了本技术,但是很明显,许多替换、修改和变更对于本领域的技术人员来说将是显而易见的。因此,旨在涵盖属于随附权利要求的精神和广泛范围内的所有此类替换、修改和变更。[0064]本说明中提及的所有公开、专利和专利申请通过引用整体地结合于本文中,引用的程度如同具体且特别地指示每个单独的公开、专利或专利申请以通过引用结合于本文一样。另外,不应将本技术中的任何参考的引用或识别理解为允许此类参考作为现有技术可用于本技术。在使用分段标题的情况下,不应将其理解为一定是限制性的。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1