具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
实施例1
本申请实施例1所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在移动终端上为例,图1是本发明实施例的一种钩子处理方法的移动终端的硬件结构框图,如图1所示,移动终端10可以包括一个或多个(图中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输装置106。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,移动终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储应用软件的软件程序以及模块,如本发明实施例中的钩子处理方法对应的程序指令/模块,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至移动终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括移动终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
在本实施例中提供了一种钩子处理方法,图2是根据本发明实施例的一种钩子处理方法的流程图,如图2所示,该流程包括如下步骤:
步骤S202,获取API Hook所钩挂的函数;
步骤S204,调用上述函数;
步骤S206,判断调用函数之后API Hook是否监控到函数被调用;
步骤S208,如果API Hook未监控到函数被调用,则确定API Hook被卸载。
可选地,上述钩子处理方法可以但不限于应用于监控系统调用的场景中。例如:监控API Hook是否被卸载的场景中。
可选地,在本实施例中,可以通过一个额外的钩子测试程序来判断一个进程或者一个完整的程序中挂载的所有的钩子,例如,有一个test.exe,该进程中挂载了多个钩子,钩子测试程序可以提供一个页面,该页面中显示了该进程中的所有的钩子,点击其中的一个钩子进行卸载测试,执行上述步骤之后,在该钩子测试程序中可以显示出该钩子是否被卸载,更优的,还可以显示被卸载的原因。另外,还可以对钩子测试程序进行配置,配置内容可以为间隔预定时间自动进行测试,自动测试发现被卸载之后,自动进行重新钩挂。这样通过一个额外的程序就可以完成所有钩子的监控。
通过上述步骤,获取API Hook所钩挂的函数;调用函数;判断调用函数之后APIHook是否监控到函数被调用;如果API Hook未监控到函数被调用,则确定API Hook被卸载,由此可见,采用上述方案获取并调用API Hook所钩挂的函数,通过判断API Hook是否监控到该函数被调用来确定API Hook是否被卸载,如果API Hook未监控到该函数被调用,则可以确定API Hook已被卸载,从而使得可以判断出函数上钩挂的API Hook是否已被卸载,因此,实现了对API Hook是否被卸载的监控,从而解决了相关技术中无法监控API Hook是否被卸载的问题。
可选地,在上述步骤S206中,可以通过监测函数所在程序的运行来判断API Hook是否监控到函数被调用,如果程序的运行未能回到API Hook中,则表示API Hook未能监控到函数的调用,也就可以确定API Hook被卸载了。例如:可以但不限于判断调用函数之后程序的运行是否会回到API Hook中,以判断API Hook是否监控到函数被调用,其中,上述函数包括在上述程序中。
例如:在一个监控函数A上钩挂的API Hook1是否被卸载的场景中,首先获取APIHook1所钩挂的函数A,并调用该函数A,在函数A被调用之后,判断API Hook1是否监控到该函数A被调用了,如果API Hook1未监控到函数A被调用,则可以确定API Hook1被卸载了,如果API Hook1监控到了函数A被调用,则可以确定API Hook1没有被卸载,从而实现对函数A上钩挂的API Hook1的监控。
可选地,在确认API Hook被卸载之后,可以将API Hook重新钩挂到对应的函数上。例如:在上述步骤S208之后,重新将API Hook钩挂在函数上。
在上述监控函数A上钩挂的API Hook1是否被卸载的场景中,在确认API Hook1被卸载后,可以将API Hook1重新钩挂到对应的函数A上,以实现API Hook1对函数A的监视。
可选地,可以但不限于通过以下方式之一将hook钩挂到函数中:
方式一,通过重新修改函数指针,将API Hook钩挂到函数上。
方式二,通过修改函数的代码,将API Hook钩挂到函数上。
可选地,在确认了API Hook被卸载之后,可以但不限于根据API Hook的优先级判断是否需要重新将API Hook钩挂到函数上。例如:在上述步骤S208之后,判断API Hook钩挂的函数的优先级,根据优先级确定是否重新将API Hook钩挂到函数上。
在上述监控函数A上钩挂的API Hook1是否被卸载的场景中,在确认了API Hook1被卸载之后,可以但不限于根据API Hook1的优先级判断是否需要重新将API Hook1钩挂到函数A上。例如:如果API Hook1的优先级低于预设值,则不必再将API Hook1钩挂到函数A上了,如果API Hook1的优先级高于上述预设值,则重新将API Hook1钩挂在函数A上,从而使API Hook1能够继续对函数A进行监视。
可选地,在确认了API Hook被卸载之后,可以但不限于对API Hook被卸载的原因进行分析确定,可以根据函数调用的日志文件进行API Hook被卸载原因的分析。例如:在上述步骤S208之后,获取函数之前被调用的日志文件,通过日志文件确定API Hook被卸载的原因。
可选地,在确定API Hook被卸载的原因之后,可以根据原因的类型确定API Hook是否需要被重新钩挂到函数上。
实施例2
在本实施例中还提供了一种钩子处理装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图3是根据本发明实施例的一种钩子处理装置的结构框图一,如图3所示,该装置包括:
第一获取模块32,用于获取API Hook所钩挂的函数;
调用模块34,耦合至用于调用上述函数;
第一判断模块36,用于判断调用函数之后API Hook是否监控到函数被调用;
第一确定模块38,用于如果API Hook未监控到函数被调用,则确定API Hook被卸载。
可选地,上述钩子处理装置可以但不限于应用于监控系统调用的场景中。例如:监控API Hook是否被卸载的场景中。
可选地,在本实施例中,可以通过一个额外的钩子测试程序来判断一个进程或者一个完整的程序中挂载的所有的钩子,例如,有一个test.exe,该进程中挂载了多个钩子,钩子测试程序可以提供一个页面,该页面中显示了该进程中的所有的钩子,点击其中的一个钩子进行卸载测试,执行上述步骤之后,在该钩子测试程序中可以显示出该钩子是否被卸载,更优的,还可以显示被卸载的原因。另外,还可以对钩子测试程序进行配置,配置内容可以为间隔预定时间自动进行测试,自动测试发现被卸载之后,自动进行重新钩挂。这样通过一个额外的程序就可以完成所有钩子的监控。
通过上述装置,第一获取模块获取API Hook所钩挂的函数;调用模块调用上述函数;第一判断模块判断调用函数之后API Hook是否监控到函数被调用;第一确定模块在APIHook未监控到函数被调用的情况下确定API Hook被卸载,由此可见,采用上述方案获取并调用API Hook所钩挂的函数,通过判断API Hook是否监控到该函数被调用来确定API Hook是否被卸载,如果API Hook未监控到该函数被调用,则可以确定API Hook已被卸载,从而使得可以判断出函数上钩挂的API Hook是否已被卸载,因此,实现了对API Hook是否被卸载的监控,从而解决了相关技术中无法监控API Hook是否被卸载的问题。
图4是根据本发明实施例的一种钩子处理装置的结构框图二,如图4所示,可选地,第一判断模块36包括:
判断单元42,用于判断调用函数之后程序的运行是否会回到API Hook中,以判断API Hook是否监控到函数被调用,其中,函数包括在程序中。
可选地,判断单元可以通过监测函数所在程序的运行来判断API Hook是否监控到函数被调用,如果程序的运行未能回到API Hook中,则表示API Hook未能监控到函数的调用,也就可以确定API Hook被卸载了。
例如:在一个监控函数A上钩挂的API Hook1是否被卸载的场景中,首先第一获取模块获取API Hook1所钩挂的函数A,并由调用模块调用该函数A,在函数A被调用之后,第一判断模块判断API Hook1是否监控到该函数A被调用了,如果API Hook1未监控到函数A被调用,则可以由第一确定模块确定API Hook1被卸载了,如果API Hook1监控到了函数A被调用,则可以确定API Hook1没有被卸载,从而实现对函数A上钩挂的API Hook1的监控。
图5是根据本发明实施例的一种钩子处理装置的结构框图三,如图5所示,可选地,上述装置还包括:
钩挂模块52,耦合至第一确定模块38,用于重新将API Hook钩挂在函数上。
可选地,在确认API Hook被卸载之后,可以将API Hook重新钩挂到对应的函数上。
在上述监控函数A上钩挂的API Hook1是否被卸载的场景中,在确认API Hook1被卸载后,可以由钩挂模块将API Hook1重新钩挂到对应的函数A上,以实现API Hook1对函数A的监视。
图6是根据本发明实施例的一种钩子处理装置的结构框图四,如图6所示,可选地,钩挂模块52包括以下之一:
第一钩挂单元62,用于通过重新修改函数指针,将API Hook钩挂到函数上;
第二钩挂单元64,用于通过修改函数的代码,将API Hook钩挂到函数上。
图7是根据本发明实施例的一种钩子处理装置的结构框图五,如图7所示,可选地,上述装置还包括:
第二判断模块72,耦合至第一确定模块38,用于判断API Hook钩挂的函数的优先级;
第二确定模块74,耦合至第二判断模块72,用于根据优先级确定是否重新将APIHook钩挂到函数上。
可选地,在确认了API Hook被卸载之后,可以但不限于根据API Hook的优先级判断是否需要重新将API Hook钩挂到函数上。
在上述监控函数A上钩挂的API Hook1是否被卸载的场景中,在确认了API Hook1被卸载之后,可以但不限于根据API Hook1的优先级判断是否需要重新将API Hook1钩挂到函数A上。例如:如果API Hook1的优先级低于预设值,则不必再将API Hook1钩挂到函数A上了,如果API Hook1的优先级高于上述预设值,则重新将API Hook1钩挂在函数A上,从而使API Hook1能够继续对函数A进行监视。
图8是根据本发明实施例的一种钩子处理装置的结构框图六,如图8所示,可选地,上述装置还包括:
第二获取模块82,耦合至第一确定模块38,用于获取函数之前被调用的日志文件;
第三确定模块84,耦合至第二获取模块82,用于通过日志文件确定API Hook被卸载的原因。
可选地,在确认了API Hook被卸载之后,可以但不限于对API Hook被卸载的原因进行分析确定,可以根据函数调用的日志文件进行API Hook被卸载原因的分析。
图9是根据本发明实施例的一种钩子处理装置的结构框图七,如图9所示,可选地,上述装置还包括:
第四确定模块92,耦合至第三确定模块84,用于根据原因的类型确定API Hook是否需要被重新钩挂到函数上。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述模块分别位于多个处理器中。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求所述为准。
实施例3
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本发明的实施例还提供了一种存储介质,该存储介质包括存储的程序,其中,上述程序运行时执行上述任一项所述的方法。
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:
S1,获取API Hook所钩挂的函数;
S2,调用上述函数;
S3,判断调用函数之后API Hook是否监控到函数被调用;
S4,如果API Hook未监控到函数被调用,则确定API Hook被卸载。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
本发明的实施例还提供了一种处理器,该处理器用于运行程序,其中,该程序运行时执行上述任一项方法中的步骤。
可选地,在本实施例中,上述程序用于执行以下步骤:
S1,获取API Hook所钩挂的函数;
S2,调用上述函数;
S3,判断调用函数之后API Hook是否监控到函数被调用;
S4,如果API Hook未监控到函数被调用,则确定API Hook被卸载。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。