一种应用程序编程接口函数的监测方法和装置与流程

未命名 08-13 阅读:102 评论:0
1.本发明涉及计算机科学与
技术领域
:,尤其涉及一种应用程序编程接口函数的监测方法和装置。
背景技术
::2.在windows系统下进行编程,通常会接触到api(applicationprogramminginterface,应用程序编程接口)函数的使用。在系统终端安全防护领域,安全产品通常都会使用监控挂钩api函数的技术,即在应用程序调用真正的api函数前进行一些监控记录处理,之后再调用真正的api函数来完成所需功能。当多款安全产品共存且监控挂钩同一个api函数时就会有明显的兼容性问题。3.现有技术中的api函数监控技术,通常是通过挂钩模块直接监控api函数,不存在通过跳板内存建立挂钩的方法,因此无法实现挂钩模块的动态卸载或升级,影响客户业务的可用性。4.因此,增设跳板内存,以基于跳板内存实现挂钩模块对应用程序编程接口函数的挂钩监测是目前亟需解决的技术问题。技术实现要素:5.本发明提供一种应用程序编程接口函数的监测方法和装置,用以解决现有技术中无法实现挂钩模块的动态卸载或升级的缺陷,实现基于跳板内存实现挂钩模块对应用程序编程接口函数的挂钩监测。6.本发明提供一种应用程序编程接口函数的监测方法,包括:7.当检测到第一挂钩模块需要对应用程序编程接口函数进行挂钩监测时,检测当前是否存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测;8.若不存在,则通过预设跳板内存地址中存储的第一关联关系,建立所述应用程序编程接口函数与所述第一挂钩模块之间的挂钩,并通过所述第一挂钩模块对应用程序编程接口函数进行挂钩监测;9.其中,所述预设跳板内存地址中存储有预先设置的所述第一挂钩模块与预设跳板内存地址之间的第一关联关系。10.根据本发明提供的一种应用程序编程接口函数的监测方法,在通过预设跳板内存地址中存储的第一关联关系,建立所述应用程序编程接口函数与所述第一挂钩模块之间的挂钩之后,所述方法还包括:11.在所述预设跳板内存地址中创建所述预设跳板内存地址与所述应用程序编程接口函数之间的第二关联关系,并保存所述第二关联关系。12.根据本发明提供的一种应用程序编程接口函数的监测方法,所述方法还包括:13.当检测到任一第二挂钩模块需要对所述应用程序编程接口函数进行挂钩监测时,检测所述第一挂钩模块是否与所述应用程序编程接口函数解除挂钩;14.若解除,则通过预设跳板内存地址中保存的第二关联关系,建立所述应用程序编程接口函数与所述第二挂钩模块之间的挂钩,并通过所述第二挂钩模块对应用程序编程接口函数进行挂钩监测。15.根据本发明提供的一种应用程序编程接口函数的监测方法,在检测当前是否存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测之后,所述方法还包括:16.若存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测,则不再通过所述第一挂钩模块对所述应用程序编程接口函数进行挂钩监测。17.根据本发明提供的一种应用程序编程接口函数的监测方法,当检测到任一第二挂钩模块需要对所述应用程序编程接口函数进行挂钩监测时,检测所述第一挂钩模块是否与所述应用程序编程接口函数解除挂钩之后,所述方法还包括:18.若所述第一挂钩模块与所述应用程序编程接口函数未解除挂钩,则加载所述第二挂钩模块;19.建立所述第二挂钩模块与所述跳板内存地址的第三关联关系;20.基于所述第三关联关系和所述第二关联关系,建立所述应用程序编程接口函数与所述第二挂钩模块之间的挂钩,并通过所述第二挂钩模块对所述应用程序编程接口函数的挂钩监测。21.根据本发明提供的一种应用程序编程接口函数的监测方法,所述应用程序编程接口函数包括:函数地址和函数程序;22.所述通过预设跳板内存地址中存储的第一关联关系,建立所述应用程序编程接口函数与所述第一挂钩模块之间的挂钩,包括:23.确定应用程序编程接口函数的函数地址和函数程序;24.建立所述应用程序编程接口函数的函数地址与预设跳板内存地址之间的第四关联关系,并基于所述第一关联关系和所述第四关联关系,建立所述函数地址与所述第一挂钩模块之间的关联;25.建立所述第一挂钩模块与所述应用程序编程接口函数的函数程序之间的挂钩。26.本发明还提供一种应用程序编程接口函数的监测装置,包括:27.检测单元,用于当检测到第一挂钩模块需要对应用程序编程接口函数进行挂钩监测时,检测当前是否存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测;28.挂钩单元,用于若不存在,则通过预设跳板内存地址中存储的第一关联关系,建立所述应用程序编程接口函数与所述第一挂钩模块之间的挂钩,并通过所述第一挂钩模块对应用程序编程接口函数进行挂钩监测;29.其中,所述预设跳板内存地址中存储有预先设置的所述第一挂钩模块与预设跳板内存地址之间的第一关联关系。30.本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述应用程序编程接口函数的监测方法的步骤。31.本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述应用程序编程接口函数的监测方法的步骤。32.本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述应用程序编程接口函数的监测方法的步骤。33.本发明提供的应用程序编程接口函数的监测方法和装置,通过预设跳板内存以存储预先设置的第一挂钩模块与跳板内存地址之间的第一关联关系,当检测到第一挂钩模块需要对应用程序编程接口函数进行挂钩监测时,检测当前是否存在任一第二挂钩模块对应用程序编程接口函数进行挂钩监测,若不存在,则通过预设跳板内存地址中存储的第一关联关系,建立应用程序编程接口函数与第一挂钩模块之间的挂钩,并通过第一挂钩模块对应用程序编程接口函数进行挂钩监测,保证支持第一挂钩模块的动态卸载或升级,提高系统稳定性。附图说明34.为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。35.图1是本发明提供的应用程序编程接口函数的监测方法的流程示意图之一;36.图2是本发明提供的应用程序编程接口函数被挂钩监测前的状态示意图;37.图3是本发明提供的应用程序编程接口函数被第一挂钩模块监测后的状态示意图,其中示出了跳板内存与第一挂钩模块的第一关联关系;38.图4是本发明提供的应用程序编程接口函数的监测方法的流程示意图之二;39.图5是本发明提供的应用程序编程接口函数被第一挂钩模块解除挂钩关系后的状态示意图之一;40.图6是本发明提供的应用程序编程接口函数被第一挂钩模块解除挂钩关系后的状态示意图之二;41.图7是本发明提供的应用程序编程接口函数被第二挂钩模块监测后的状态示意图;42.图8是本发明提供的应用程序编程接口函数的监测方法的流程示意图之三;43.图9是本发明提供的应用程序编程接口函数被第一挂钩模块监测后再被第二挂钩模块监测的状态示意图;44.图10是本发明提供的应用程序编程接口函数的监测方法的流程示意图之四;45.图11是本发明提供的应用程序编程接口函数的监测装置的结构示意图;46.图12是本发明提供的电子设备的结构示意图。具体实施方式47.为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。48.下面结合图1-图12描述本发明的一种应用程序编程接口函数的监测方法和装置。49.图1是本实施例提供的应用程序编程接口函数的监测方法的流程示意图之一,如图1所示,本实施例提供的应用程序编程接口函数的监测方法,包括:50.步骤100:当检测到第一挂钩模块需要对应用程序编程接口函数进行挂钩监测时,检测当前是否存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测。51.需要说明的是,图2是本实施例提供的应用程序编程接口函数被挂钩监测前的状态示意图,如图2所示,“functableptr”表示函数地址指针,“f1addr”表示f1函数地址,指向f1函数程序,即“f1code”,“f2addr”表示f2函数地址,指向f2函数程序,即“f2code”。52.步骤200:若不存在,则通过预设跳板内存地址中存储的第一关联关系,建立所述应用程序编程接口函数与所述第一挂钩模块之间的挂钩,并通过所述第一挂钩模块对应用程序编程接口函数进行挂钩监测;53.其中,所述预设跳板内存地址中存储有预先设置的所述第一挂钩模块与预设跳板内存地址之间的第一关联关系。54.具体地,本实施例预先设置了一个中间模块,即跳板内存,跳板内存地址与第一挂钩模块具有预设的第一关联关系,可以保证用于对api函数进行挂钩监测的第一挂钩模块可以动态卸载和升级。55.需要说明的是,在本实施例的方案中,第一挂钩模块是与跳板内存地址具有预设的第一关联关系的模块,第一挂钩模块对于应用程序编程接口函数的挂钩监测需通过跳板内存实现;第二挂钩模块是通过自身直接对应用程序编程接口函数进行挂钩监测的模块。56.具体地,若检测到第二挂钩模块或其他通过自身直接对应用程序编程接口函数进行挂钩监测的模块已经对应用程序编程接口函数进行挂钩监测,由于第二挂钩模块并不是基于跳板内存地址建立挂钩,若第一挂钩模块继续进行挂钩监测,会直接引用第二挂钩模块的函数值,在第二挂钩模块卸载之后,第一挂钩模块失去了引用基础,可能导致进程崩溃。57.因此,为保证系统的稳定性,若检测到当前存在任一第二挂钩模块对应用程序编程接口函数进行挂钩监测,则第一挂钩模块不再对该应用程序编程接口函数进行挂钩监测;若检测到没有挂钩模块对当前应用程序编程接口函数进行挂钩监测,再通过跳板内存地址以及第一挂钩模块对该应用程序编程接口函数进行挂钩监测。58.具体地,图3是本实施例提供的应用程序编程接口函数被第一挂钩模块监测后的状态示意图,其中示出了跳板内存与第一挂钩模块的第一关联关系。具体的关联关系如图3所示,“jmph1”表示跳板内存h1函数地址,指向第一挂钩模块h1函数程序,即“h1code”,“jmph2”表示跳板内存h2函数地址,指向第一挂钩模块h2函数程序,即“h2code”。在检测到没有挂钩模块对当前应用程序编程接口函数进行挂钩监测时,基于跳板内存的设置,以及跳板内存地址与第一挂钩模块的第一关联关系,建立应用程序编程接口函数与第一挂钩模块之间的挂钩,从而实现第一挂钩模块对应用程序编程接口函数的挂钩监测。59.以上是对本实施例提供的应用程序编程接口函数的监测方法的步骤说明。从上述步骤的描述可以看出,根据本实施例提供的应用程序编程接口函数的监测方法,通过预设跳板内存以存储预先设置的第一挂钩模块与跳板内存地址之间的第一关联关系,当检测到第一挂钩模块需要对应用程序编程接口函数进行挂钩监测时,检测当前是否存在任一第二挂钩模块对应用程序编程接口函数进行挂钩监测,若不存在,则通过预设跳板内存地址中存储的第一关联关系,建立应用程序编程接口函数与第一挂钩模块之间的挂钩,并通过第一挂钩模块对应用程序编程接口函数进行挂钩监测,保证支持第一挂钩模块的动态卸载或升级,提高系统稳定性。60.基于上述实施例,在本实施例中,步骤200中通过预设跳板内存地址中存储的第一关联关系,建立所述应用程序编程接口函数与所述第一挂钩模块之间的挂钩之后,所述方法还包括:61.在所述预设跳板内存地址中创建所述预设跳板内存地址与所述应用程序编程接口函数之间的第二关联关系,并保存所述第二关联关系。62.具体地,如图3所示,在第一挂钩模块对应用程序编程接口函数进行挂钩监测之前,已预设第一挂钩模块与跳板内存之间的第一关联关系;在第一挂钩模块通过预设跳板内存地址中存储的第一关联关系对应用程序编程接口函数进行挂钩监测之后,创建跳板内存地址与应用程序编程接口函数之间的第二关联关系,便于后续基于第二关联关系实现其他挂钩模块对于应用程序编程接口函数的挂钩监测。63.本实施例提供的应用程序编程接口函数的监测方法,通过创建预设跳板内存地址与应用程序编程接口函数之间的第二关联关系,便于后续基于第二关联关系实现其他挂钩模块对于应用程序编程接口函数的挂钩监测。64.基于上述实施例,在本实施例中,图4是本实施例提供的应用程序编程接口函数的监测方法的流程示意图之二,如图4所示,所述方法还包括:65.步骤410:当检测到任一第二挂钩模块需要对所述应用程序编程接口函数进行挂钩监测时,检测所述第一挂钩模块是否与所述应用程序编程接口函数解除挂钩。66.需要说明的是,当第一挂钩模块卸载后,跳板内存的地址信息并不会消失,而是保存到安装目录中,在安装其他挂钩模块时可以直接读取跳板内存信息进行复用,降低成本。图5是本实施例提供的应用程序编程接口函数被第一挂钩模块解除挂钩关系后的状态示意图之一,如图5所示,第一挂钩模块卸载后,跳板内存仍然存在,且跳板内存地址更新为“jmpf1”以及“jmpf2”。67.步骤420:若解除,则通过预设跳板内存地址中保存的第二关联关系,建立所述应用程序编程接口函数与所述第二挂钩模块之间的挂钩,并通过所述第二挂钩模块对应用程序编程接口函数进行挂钩监测。68.具体地,图6是本实施例提供的应用程序编程接口函数被第一挂钩模块解除挂钩关系后的状态示意图之二,如图6所示,在第一挂钩模块卸载后,跳板内存仍然存在,在检测到第一挂钩模块与应用程序编程接口函数解除挂钩关系的情况下,第二挂钩模块可以直接读取跳板内存信息,根据当前跳板内存地址和应用程序编程接口函数之间的第二关联关系,建立应用程序编程接口函数与第二挂钩模块之间的挂钩,对应用程序编程接口函数进行挂钩监测。69.本实施例提供的应用程序编程接口函数的监测方法,在第一挂钩模块与应用程序编程接口函数解除挂钩之后,通过预设跳板内存地址中保存的第二关联关系,实现第二挂钩模块对应用程序编程接口函数的挂钩监测,从而实现了第一挂钩模块的动态卸载,保证系统的稳定性。70.基于上述实施例,在本实施例中,步骤100检测当前是否存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测之后,所述方法还包括:71.若存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测,则不再通过所述第一挂钩模块对所述应用程序编程接口函数进行挂钩监测。72.具体地,图7是本实施例提供的应用程序编程接口函数被第二挂钩模块监测后的状态示意图,如图7所示,由于首先安装了第二挂钩模块,因此没有跳板内存的存在,f1函数地址直接通过第二挂钩模块指向f1函数程序。因此,在检测到该应用程序编程接口函数已经由其他挂钩模块进行挂钩监测的情况下,不再通过第一挂钩模块对该应用程序编程接口函数进行挂钩监测,避免系统宕机。73.本实施例提供的应用程序编程接口函数的监测方法,在检测到当前应用程序编程接口函数已经被其他挂钩模块进行挂钩监测的情况下,不再通过第一挂钩模块进行挂钩监测,避免系统宕机,提高系统的稳定性。74.基于上述实施例,在本实施例中,图8是本实施例提供的应用程序编程接口函数的监测方法的流程示意图之三,如图8所示,步骤410当检测到任一第二挂钩模块需要对所述应用程序编程接口函数进行挂钩监测时,检测所述第一挂钩模块是否与所述应用程序编程接口函数解除挂钩之后,所述方法还包括:75.步骤810:若所述第一挂钩模块与所述应用程序编程接口函数未解除挂钩,则加载所述第二挂钩模块。76.步骤820:建立所述第二挂钩模块与所述跳板内存地址的第三关联关系。77.步骤830:基于所述第三关联关系和所述第二关联关系,建立所述应用程序编程接口函数与所述第二挂钩模块之间的挂钩,并通过所述第二挂钩模块对所述应用程序编程接口函数的挂钩监测。78.需要说明的是,在检测到第一挂钩模块与应用程序编程接口函数未解除挂钩关系的情况下,第一挂钩模块与跳板内存均存在,此时其他挂钩模块可以通过与跳板内存关联,以基于跳板内存地址实现对该应用程序编程接口函数的挂钩监测。79.具体地,图9是本实施例提供的应用程序编程接口函数被第一挂钩模块监测后再被第二挂钩模块监测的状态示意图,如图9所示,首先加载第二挂钩模块,从而建立第二挂钩模块与跳板内存地址的第三关联关系,由于跳板内存地址与应用程序编程接口函数之间存在第二关联关系,因此可以基于第三关联关系和第二关联关系,建立应用程序编程接口函数与第二挂钩模块之间的挂钩,从而实现第二挂钩模块对应用程序编程接口函数的挂钩监测。80.本实施例提供的应用程序编程接口函数的监测方法,在第一挂钩模块与应用程序编程接口函数未解除挂钩关系的情况下,第二挂钩模块与跳板内存地址之间建立第三关联关系,以第三关联关系和第二关联关系实现对应用程序编程接口函数的挂钩监测,此方法支持第一挂钩模块的动态卸载或升级,稳定性较高。81.基于上述实施例,在本实施例中,所述应用程序编程接口函数包括:函数地址和函数程序,具体地,可参见图2,“functableptr”表示函数地址指针,“f1addr”表示f1函数地址,指向f1函数程序,即“f1code”,“f2addr”表示f2函数地址,指向f2函数程序,即“f2code”。82.图10是本实施例提供的应用程序编程接口函数的监测方法的流程示意图之四,如图10所示,步骤200中通过预设跳板内存地址中存储的第一关联关系,建立所述应用程序编程接口函数与所述第一挂钩模块之间的挂钩,包括:83.步骤1010:确定应用程序编程接口函数的函数地址和函数程序。84.步骤1020:建立所述应用程序编程接口函数的函数地址与预设跳板内存地址之间的第四关联关系,并基于所述第一关联关系和所述第四关联关系,建立所述函数地址与所述第一挂钩模块之间的关联。85.具体地,可参见图3,“jmph1”表示跳板内存h1函数地址,指向第一挂钩模块h1函数程序,即“h1code”,“jmph2”表示跳板内存h2函数地址,指向第一挂钩模块h2函数程序,即“h2code”。应用程序编程接口函数的函数地址指向当前跳板内存地址。86.步骤1030:建立所述第一挂钩模块与所述应用程序编程接口函数的函数程序之间的挂钩。87.具体地,在检测到没有挂钩模块对当前应用程序编程接口函数进行挂钩监测时,首先确定应用程序编程接口函数的函数地址和函数程序,将应用程序编程接口函数的函数地址“f1addr”与当前跳板内存地址“jumph1”关联,建立第四关联关系,并基于第一关联关系和第四关联关系确定函数地址与第一挂钩模块之间的关联,其次建立第一挂钩模块与所述应用程序编程接口函数的函数程序“f1code”之间的挂钩,从而实现第一挂钩模块对应用程序编程接口函数的挂钩监测。88.本实施例提供的应用程序编程接口函数的监测方法,通过预设跳板内存以及预设第一挂钩模块与当前跳板内存地址之间的第一关联关系,建立第一挂钩模块与应用程序编程接口函数的函数程序之间的挂钩关系,保证支持第一挂钩模块的动态卸载或升级,成本较低且稳定性高。89.下面对现有技术的方案和本技术提供的方案在不同共存场景下的处理结果进行对比说明。假设安全产品a通过挂钩模块a对api函数进行监测,安全产品b通过挂钩模块b对api函数进行监测,假设存在以下四种场景:90.场景1:安装挂钩模块a→安装挂钩模块b→卸载挂钩模块a→卸载挂钩模块b;91.场景2:安装挂钩模块a→安装挂钩模块b→卸载挂钩模块b→卸载挂钩模块a;92.场景3:安装挂钩模块b→安装挂钩模块a→卸载挂钩模块b→卸载挂钩模块a;93.场景4:安装挂钩模块b→安装挂钩模块a→卸载挂钩模块a→卸载挂钩模块b。94.现有技术中存在以下三种方案:95.方案1:检测到挂钩模块a已经对api函数进行挂钩监测的情况下,挂钩模块b则不再对当前api函数进行挂钩监测。96.方案2:检测到挂钩模块a已经对api函数进行挂钩监测的情况下,挂钩模块b继续对当前api函数进行挂钩监测,处理函数返回时调用系统初始值,当挂钩模块b卸载后,将挂钩监测点还原为系统初始值。97.方案3:检测到挂钩模块a已经对api函数进行挂钩监测的情况下,挂钩模块b继续对当前api函数进行挂钩监测,处理函数返回时调用挂钩模块a的函数值,当挂钩模块b卸载后,将挂钩监测点还原为挂钩模块a的函数值。98.本方案:检测到挂钩模块a(其他安全产品的挂钩模块)已经对api函数进行挂钩监测的情况下,挂钩模块b(本技术中的第一挂钩模块)则不再对当前api函数进行挂钩监测;当无冲突时,通过当前跳板内存地址将当前api函数与第一挂钩模块建立挂钩关系,以通过当前跳板内存地址以及第一挂钩模块对api函数进行挂钩监测。99.表1示出了不同方案在不同场景下的处理结果,具体地,参见表1。100.表1[0101][0102][0103]可以看出,在对比的方案中,由于没有跳板内存的存在,后安装的挂钩模块若直接调用先安装的挂钩模块的函数,当先安装的挂钩模块卸载后,就可能发生宕机,导致系统的兼容性和稳定性较差,无法实现挂钩模块的动态卸载或升级。[0104]而本发明实施例提供的应用程序编程接口函数的监测方法,通过预设跳板内存以存储预先设置的第一挂钩模块与跳板内存地址之间的第一关联关系,当检测到第一挂钩模块需要对应用程序编程接口函数进行挂钩监测时,检测当前是否存在任一第二挂钩模块对应用程序编程接口函数进行挂钩监测,若不存在,则通过预设跳板内存地址中存储的第一关联关系,建立应用程序编程接口函数与第一挂钩模块之间的挂钩,并通过第一挂钩模块对应用程序编程接口函数进行挂钩监测,保证支持第一挂钩模块的动态卸载或升级,提高系统稳定性。[0105]下面对本发明提供的应用程序编程接口函数的监测装置进行描述,下文描述的应用程序编程接口函数的监测装置与上文描述的应用程序编程接口函数的监测方法可相互对应参照。[0106]图11是本实施例提供的应用程序编程接口函数的监测装置的结构示意图,如图11所示,本实施例提供的应用程序编程接口函数的监测装置,包括:[0107]检测单元1101,用于当检测到第一挂钩模块需要对应用程序编程接口函数进行挂钩监测时,检测当前是否存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测;[0108]挂钩单元1102,用于若不存在,则通过预设跳板内存地址中存储的第一关联关系,建立所述应用程序编程接口函数与所述第一挂钩模块之间的挂钩,并通过所述第一挂钩模块对应用程序编程接口函数进行挂钩监测;[0109]其中,所述预设跳板内存地址中存储有预先设置的所述第一挂钩模块与预设跳板内存地址之间的第一关联关系。[0110]本实施例提供的应用程序编程接口函数的监测装置,通过预设跳板内存以存储预先设置的第一挂钩模块与跳板内存地址之间的第一关联关系,当检测到第一挂钩模块需要对应用程序编程接口函数进行挂钩监测时,检测当前是否存在任一第二挂钩模块对应用程序编程接口函数进行挂钩监测,若不存在,则通过预设跳板内存地址中存储的第一关联关系,建立应用程序编程接口函数与第一挂钩模块之间的挂钩,并通过第一挂钩模块对应用程序编程接口函数进行挂钩监测,保证支持第一挂钩模块的动态卸载或升级,提高系统稳定性。[0111]基于上述实施例,在本实施例中,所述装置还包括:[0112]第二关联单元,用于在通过预设跳板内存地址中存储的第一关联关系,建立所述应用程序编程接口函数与所述第一挂钩模块之间的挂钩之后,在所述预设跳板内存地址中创建所述预设跳板内存地址与所述应用程序编程接口函数之间的第二关联关系,并保存所述第二关联关系。[0113]基于上述实施例,在本实施例中,所述挂钩单元1102,具体用于:[0114]当检测到任一第二挂钩模块需要对所述应用程序编程接口函数进行挂钩监测时,检测所述第一挂钩模块是否与所述应用程序编程接口函数解除挂钩;[0115]若解除,则通过预设跳板内存地址中保存的第二关联关系,建立所述应用程序编程接口函数与所述第二挂钩模块之间的挂钩,并通过所述第二挂钩模块对应用程序编程接口函数进行挂钩监测。[0116]基于上述实施例,在本实施例中,所述检测单元1101,具体用于:[0117]在检测当前是否存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测之后,若存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测,则不再通过所述第一挂钩模块对所述应用程序编程接口函数进行挂钩监测。[0118]基于上述实施例,在本实施例中,所述挂钩单元1102,具体用于:[0119]当检测到任一第二挂钩模块需要对所述应用程序编程接口函数进行挂钩监测时,检测所述第一挂钩模块是否与所述应用程序编程接口函数解除挂钩之后,[0120]若所述第一挂钩模块与所述应用程序编程接口函数未解除挂钩,则加载所述第二挂钩模块;[0121]建立所述第二挂钩模块与所述跳板内存地址的第三关联关系;[0122]基于所述第三关联关系和所述第二关联关系,建立所述应用程序编程接口函数与所述第二挂钩模块之间的挂钩,并通过所述第二挂钩模块对所述应用程序编程接口函数的挂钩监测。[0123]基于上述实施例,在本实施例中,所述应用程序编程接口函数包括:函数地址和函数程序;[0124]所述挂钩单元1102,具体用于:[0125]确定应用程序编程接口函数的函数地址和函数程序;[0126]建立所述应用程序编程接口函数的函数地址与预设跳板内存地址之间的第四关联关系,并基于所述第一关联关系和所述第四关联关系,建立所述函数地址与所述第一挂钩模块之间的关联;[0127]建立所述第一挂钩模块与所述应用程序编程接口函数的函数程序之间的挂钩。[0128]图12示例了一种电子设备的实体结构示意图,如图12所示,该电子设备可以包括:处理器(processor)1210、通信接口(communicationsinterface)1220、存储器(memory)1230和通信总线1240,其中,处理器1210,通信接口1220,存储器1230通过通信总线1240完成相互间的通信。处理器1210可以调用存储器1230中的逻辑指令,以执行应用程序编程接口函数的监测方法,该方法包括:[0129]当检测到第一挂钩模块需要对应用程序编程接口函数进行挂钩监测时,检测当前是否存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测;[0130]若不存在,则通过预设跳板内存地址中存储的第一关联关系,建立所述应用程序编程接口函数与所述第一挂钩模块之间的挂钩,并通过所述第一挂钩模块对应用程序编程接口函数进行挂钩监测;[0131]其中,所述预设跳板内存地址中存储有预先设置的所述第一挂钩模块与预设跳板内存地址之间的第一关联关系。[0132]此外,上述的存储器1230中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。[0133]另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的应用程序编程接口函数的监测方法,该方法包括:[0134]当检测到第一挂钩模块需要对应用程序编程接口函数进行挂钩监测时,检测当前是否存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测;[0135]若不存在,则通过预设跳板内存地址中存储的第一关联关系,建立所述应用程序编程接口函数与所述第一挂钩模块之间的挂钩,并通过所述第一挂钩模块对应用程序编程接口函数进行挂钩监测;[0136]其中,所述预设跳板内存地址中存储有预先设置的所述第一挂钩模块与预设跳板内存地址之间的第一关联关系。[0137]又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的应用程序编程接口函数的监测方法,该方法包括:[0138]当检测到第一挂钩模块需要对应用程序编程接口函数进行挂钩监测时,检测当前是否存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测;[0139]若不存在,则通过预设跳板内存地址中存储的第一关联关系,建立所述应用程序编程接口函数与所述第一挂钩模块之间的挂钩,并通过所述第一挂钩模块对应用程序编程接口函数进行挂钩监测;[0140]其中,所述预设跳板内存地址中存储有预先设置的所述第一挂钩模块与预设跳板内存地址之间的第一关联关系。[0141]以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。[0142]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。[0143]最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。当前第1页12当前第1页12
技术特征:
1.一种应用程序编程接口函数的监测方法,其特征在于,包括:当检测到第一挂钩模块需要对应用程序编程接口函数进行挂钩监测时,检测当前是否存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测;若不存在,则通过预设跳板内存地址中存储的第一关联关系,建立所述应用程序编程接口函数与所述第一挂钩模块之间的挂钩,并通过所述第一挂钩模块对应用程序编程接口函数进行挂钩监测;其中,所述预设跳板内存地址中存储有预先设置的所述第一挂钩模块与预设跳板内存地址之间的第一关联关系。2.根据权利要求1所述的应用程序编程接口函数的监测方法,其特征在于,在通过预设跳板内存地址中存储的第一关联关系,建立所述应用程序编程接口函数与所述第一挂钩模块之间的挂钩之后,所述方法还包括:在所述预设跳板内存地址中创建所述预设跳板内存地址与所述应用程序编程接口函数之间的第二关联关系,并保存所述第二关联关系。3.根据权利要求2所述的应用程序编程接口函数的监测方法,其特征在于,所述方法还包括:当检测到任一第二挂钩模块需要对所述应用程序编程接口函数进行挂钩监测时,检测所述第一挂钩模块是否与所述应用程序编程接口函数解除挂钩;若解除,则通过预设跳板内存地址中保存的第二关联关系,建立所述应用程序编程接口函数与所述第二挂钩模块之间的挂钩,并通过所述第二挂钩模块对应用程序编程接口函数进行挂钩监测。4.根据权利要求1所述的应用程序编程接口函数的监测方法,其特征在于,在检测当前是否存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测之后,所述方法还包括:若存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测,则不再通过所述第一挂钩模块对所述应用程序编程接口函数进行挂钩监测。5.根据权利要求3所述的应用程序编程接口函数的监测方法,其特征在于,当检测到任一第二挂钩模块需要对所述应用程序编程接口函数进行挂钩监测时,检测所述第一挂钩模块是否与所述应用程序编程接口函数解除挂钩之后,所述方法还包括:若所述第一挂钩模块与所述应用程序编程接口函数未解除挂钩,则加载所述第二挂钩模块;建立所述第二挂钩模块与所述跳板内存地址的第三关联关系;基于所述第三关联关系和所述第二关联关系,建立所述应用程序编程接口函数与所述第二挂钩模块之间的挂钩,并通过所述第二挂钩模块对所述应用程序编程接口函数的挂钩监测。6.根据权利要求1所述的应用程序编程接口函数的监测方法,其特征在于,所述应用程序编程接口函数包括:函数地址和函数程序;所述通过预设跳板内存地址中存储的第一关联关系,建立所述应用程序编程接口函数与所述第一挂钩模块之间的挂钩,包括:确定应用程序编程接口函数的函数地址和函数程序;
建立所述应用程序编程接口函数的函数地址与预设跳板内存地址之间的第四关联关系,并基于所述第一关联关系和所述第四关联关系,建立所述函数地址与所述第一挂钩模块之间的关联;建立所述第一挂钩模块与所述应用程序编程接口函数的函数程序之间的挂钩。7.一种应用程序编程接口函数的监测装置,其特征在于,包括:检测单元,用于当检测到第一挂钩模块需要对应用程序编程接口函数进行挂钩监测时,检测当前是否存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测;挂钩单元,用于若不存在,则通过预设跳板内存地址中存储的第一关联关系,建立所述应用程序编程接口函数与所述第一挂钩模块之间的挂钩,并通过所述第一挂钩模块对应用程序编程接口函数进行挂钩监测;其中,所述预设跳板内存地址中存储有预先设置的所述第一挂钩模块与预设跳板内存地址之间的第一关联关系。8.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述应用程序编程接口函数的监测方法的步骤。9.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述应用程序编程接口函数的监测方法的步骤。10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述应用程序编程接口函数的监测方法的步骤。

技术总结
本发明提供一种应用程序编程接口函数的监测方法和装置,所述方法包括:当检测到第一挂钩模块需要对应用程序编程接口函数进行挂钩监测时,检测当前是否存在任一第二挂钩模块对所述应用程序编程接口函数进行挂钩监测;若不存在,则通过预设跳板内存地址中存储的第一关联关系,建立所述应用程序编程接口函数与所述第一挂钩模块之间的挂钩,并通过所述第一挂钩模块对应用程序编程接口函数进行挂钩监测;其中,所述预设跳板内存地址中存储有预先设置的所述第一挂钩模块与预设跳板内存地址之间的第一关联关系。本发明提供的应用程序编程接口函数的监测方法支持第一挂钩模块的动态卸载或升级,提高系统稳定性。提高系统稳定性。提高系统稳定性。


技术研发人员:王明广 王丹阳 韩飞
受保护的技术使用者:奇安信安全技术(珠海)有限公司
技术研发日:2023.03.27
技术公布日:2023/8/9
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐