钩子处理方法及装置与流程

文档序号:15076561发布日期:2018-08-01 01:52阅读:302来源:国知局

本发明涉及信息技术领域,具体而言,涉及一种钩子处理方法及装置。



背景技术:

apihook技术是一种用于改变api执行结果的技术,挂钩api函数可以控制、拦截api函数的调用,apihook技术在各个平台上都有使用,例如linux,android,windows。microsoft自身也在windows操作系统里面使用了这个技术,如windows兼容模式、热补丁等。

apihook技术在安全软件的编写中也用得非常广泛,因为使用它可以很好的实现监控一些系统调用,从而拦截病毒木马的恶意操作。

针对相关技术中无法监控apihook是否被卸载的问题,目前还没有有效地解决方案。



技术实现要素:

本发明实施例提供了一种钩子处理方法及装置,以至少解决相关技术中无法监控apihook是否被卸载的问题。

根据本发明的一个实施例,提供了一种钩子处理方法,包括:获取apihook所钩挂的函数;调用所述函数;判断调用所述函数之后所述apihook是否监控到所述函数被调用;如果所述apihook未监控到所述函数被调用,则确定所述apihook被卸载。

可选地,判断调用所述函数之后所述apihook是否监控到所述函数被调用包括:判断调用所述函数之后程序的运行是否会回到所述apihook中,以判断所述apihook是否监控到所述函数被调用,其中,所述函数包括在所述程序中。

可选地,在确定所述apihook被卸载之后,所述方法还包括:重新将所述apihook钩挂在所述函数上。

可选地,重新将所述apihook钩挂到所述函数上包括以下之一:通过重新修改所述函数指针,将所述apihook钩挂到所述函数上;通过修改所述函数的代码,将所述apihook钩挂到所述函数上。

根据本发明的另一个实施例,提供了一种钩子处理装置,包括:第一获取模块,用于获取apihook所钩挂的函数;调用模块,用于调用所述函数;第一判断模块,用于判断调用所述函数之后所述apihook是否监控到所述函数被调用;第一确定模块,用于如果所述apihook未监控到所述函数被调用,则确定所述apihook被卸载。

可选地,所述第一判断模块包括:判断单元,用于判断调用所述函数之后程序的运行是否会回到所述apihook中,以判断所述apihook是否监控到所述函数被调用,其中,所述函数包括在所述程序中。

可选地,所述装置还包括:钩挂模块,用于重新将所述apihook钩挂在所述函数上。

可选地,所述钩挂模块包括以下之一:第一钩挂单元,用于通过重新修改所述函数指针,将所述apihook钩挂到所述函数上;第二钩挂单元,用于通过修改所述函数的代码,将所述apihook钩挂到所述函数上。

根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质包括存储的程序,其中,所述程序运行时执行上述任一项所述的方法。

根据本发明的又一个实施例,还提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述任一项所述的方法。

通过本发明,获取apihook所钩挂的函数;调用函数;判断调用函数之后apihook是否监控到函数被调用;如果apihook未监控到函数被调用,则确定apihook被卸载,由此可见,采用上述方案获取并调用apihook所钩挂的函数,通过判断apihook是否监控到该函数被调用来确定apihook是否被卸载,如果apihook未监控到该函数被调用,则可以确定apihook已被卸载,从而使得可以判断出函数上钩挂的apihook是否已被卸载,因此,实现了对apihook是否被卸载的监控,从而解决了相关技术中无法监控apihook是否被卸载的问题。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是本发明实施例的一种钩子处理方法的移动终端的硬件结构框图;

图2是根据本发明实施例的一种钩子处理方法的流程图;

图3是根据本发明实施例的一种钩子处理装置的结构框图一;

图4是根据本发明实施例的一种钩子处理装置的结构框图二;

图5是根据本发明实施例的一种钩子处理装置的结构框图三;

图6是根据本发明实施例的一种钩子处理装置的结构框图四;

图7是根据本发明实施例的一种钩子处理装置的结构框图五;

图8是根据本发明实施例的一种钩子处理装置的结构框图六;

图9是根据本发明实施例的一种钩子处理装置的结构框图七。

具体实施方式

下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。

实施例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包括一个网络适配器(networkinterfacecontroller,nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(radiofrequency,rf)模块,其用于通过无线方式与互联网进行通讯。

在本实施例中提供了一种钩子处理方法,图2是根据本发明实施例的一种钩子处理方法的流程图,如图2所示,该流程包括如下步骤:

步骤s202,获取apihook所钩挂的函数;

步骤s204,调用上述函数;

步骤s206,判断调用函数之后apihook是否监控到函数被调用;

步骤s208,如果apihook未监控到函数被调用,则确定apihook被卸载。

可选地,上述钩子处理方法可以但不限于应用于监控系统调用的场景中。例如:监控apihook是否被卸载的场景中。

可选地,在本实施例中,可以通过一个额外的钩子测试程序来判断一个进程或者一个完整的程序中挂载的所有的钩子,例如,有一个test.exe,该进程中挂载了多个钩子,钩子测试程序可以提供一个页面,该页面中显示了该进程中的所有的钩子,点击其中的一个钩子进行卸载测试,执行上述步骤之后,在该钩子测试程序中可以显示出该钩子是否被卸载,更优的,还可以显示被卸载的原因。另外,还可以对钩子测试程序进行配置,配置内容可以为间隔预定时间自动进行测试,自动测试发现被卸载之后,自动进行重新钩挂。这样通过一个额外的程序就可以完成所有钩子的监控。

通过上述步骤,获取apihook所钩挂的函数;调用函数;判断调用函数之后apihook是否监控到函数被调用;如果apihook未监控到函数被调用,则确定apihook被卸载,由此可见,采用上述方案获取并调用apihook所钩挂的函数,通过判断apihook是否监控到该函数被调用来确定apihook是否被卸载,如果apihook未监控到该函数被调用,则可以确定apihook已被卸载,从而使得可以判断出函数上钩挂的apihook是否已被卸载,因此,实现了对apihook是否被卸载的监控,从而解决了相关技术中无法监控apihook是否被卸载的问题。

可选地,在上述步骤s206中,可以通过监测函数所在程序的运行来判断apihook是否监控到函数被调用,如果程序的运行未能回到apihook中,则表示apihook未能监控到函数的调用,也就可以确定apihook被卸载了。例如:可以但不限于判断调用函数之后程序的运行是否会回到apihook中,以判断apihook是否监控到函数被调用,其中,上述函数包括在上述程序中。

例如:在一个监控函数a上钩挂的apihook1是否被卸载的场景中,首先获取apihook1所钩挂的函数a,并调用该函数a,在函数a被调用之后,判断apihook1是否监控到该函数a被调用了,如果apihook1未监控到函数a被调用,则可以确定apihook1被卸载了,如果apihook1监控到了函数a被调用,则可以确定apihook1没有被卸载,从而实现对函数a上钩挂的apihook1的监控。

可选地,在确认apihook被卸载之后,可以将apihook重新钩挂到对应的函数上。例如:在上述步骤s208之后,重新将apihook钩挂在函数上。

在上述监控函数a上钩挂的apihook1是否被卸载的场景中,在确认apihook1被卸载后,可以将apihook1重新钩挂到对应的函数a上,以实现apihook1对函数a的监视。

可选地,可以但不限于通过以下方式之一将hook钩挂到函数中:

方式一,通过重新修改函数指针,将apihook钩挂到函数上。

方式二,通过修改函数的代码,将apihook钩挂到函数上。

可选地,在确认了apihook被卸载之后,可以但不限于根据apihook的优先级判断是否需要重新将apihook钩挂到函数上。例如:在上述步骤s208之后,判断apihook钩挂的函数的优先级,根据优先级确定是否重新将apihook钩挂到函数上。

在上述监控函数a上钩挂的apihook1是否被卸载的场景中,在确认了apihook1被卸载之后,可以但不限于根据apihook1的优先级判断是否需要重新将apihook1钩挂到函数a上。例如:如果apihook1的优先级低于预设值,则不必再将apihook1钩挂到函数a上了,如果apihook1的优先级高于上述预设值,则重新将apihook1钩挂在函数a上,从而使apihook1能够继续对函数a进行监视。

可选地,在确认了apihook被卸载之后,可以但不限于对apihook被卸载的原因进行分析确定,可以根据函数调用的日志文件进行apihook被卸载原因的分析。例如:在上述步骤s208之后,获取函数之前被调用的日志文件,通过日志文件确定apihook被卸载的原因。

可选地,在确定apihook被卸载的原因之后,可以根据原因的类型确定apihook是否需要被重新钩挂到函数上。

实施例2

在本实施例中还提供了一种钩子处理装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图3是根据本发明实施例的一种钩子处理装置的结构框图一,如图3所示,该装置包括:

第一获取模块32,用于获取apihook所钩挂的函数;

调用模块34,耦合至用于调用上述函数;

第一判断模块36,用于判断调用函数之后apihook是否监控到函数被调用;

第一确定模块38,用于如果apihook未监控到函数被调用,则确定apihook被卸载。

可选地,上述钩子处理装置可以但不限于应用于监控系统调用的场景中。例如:监控apihook是否被卸载的场景中。

可选地,在本实施例中,可以通过一个额外的钩子测试程序来判断一个进程或者一个完整的程序中挂载的所有的钩子,例如,有一个test.exe,该进程中挂载了多个钩子,钩子测试程序可以提供一个页面,该页面中显示了该进程中的所有的钩子,点击其中的一个钩子进行卸载测试,执行上述步骤之后,在该钩子测试程序中可以显示出该钩子是否被卸载,更优的,还可以显示被卸载的原因。另外,还可以对钩子测试程序进行配置,配置内容可以为间隔预定时间自动进行测试,自动测试发现被卸载之后,自动进行重新钩挂。这样通过一个额外的程序就可以完成所有钩子的监控。

通过上述装置,第一获取模块获取apihook所钩挂的函数;调用模块调用上述函数;第一判断模块判断调用函数之后apihook是否监控到函数被调用;第一确定模块在apihook未监控到函数被调用的情况下确定apihook被卸载,由此可见,采用上述方案获取并调用apihook所钩挂的函数,通过判断apihook是否监控到该函数被调用来确定apihook是否被卸载,如果apihook未监控到该函数被调用,则可以确定apihook已被卸载,从而使得可以判断出函数上钩挂的apihook是否已被卸载,因此,实现了对apihook是否被卸载的监控,从而解决了相关技术中无法监控apihook是否被卸载的问题。

图4是根据本发明实施例的一种钩子处理装置的结构框图二,如图4所示,可选地,第一判断模块36包括:

判断单元42,用于判断调用函数之后程序的运行是否会回到apihook中,以判断apihook是否监控到函数被调用,其中,函数包括在程序中。

可选地,判断单元可以通过监测函数所在程序的运行来判断apihook是否监控到函数被调用,如果程序的运行未能回到apihook中,则表示apihook未能监控到函数的调用,也就可以确定apihook被卸载了。

例如:在一个监控函数a上钩挂的apihook1是否被卸载的场景中,首先第一获取模块获取apihook1所钩挂的函数a,并由调用模块调用该函数a,在函数a被调用之后,第一判断模块判断apihook1是否监控到该函数a被调用了,如果apihook1未监控到函数a被调用,则可以由第一确定模块确定apihook1被卸载了,如果apihook1监控到了函数a被调用,则可以确定apihook1没有被卸载,从而实现对函数a上钩挂的apihook1的监控。

图5是根据本发明实施例的一种钩子处理装置的结构框图三,如图5所示,可选地,上述装置还包括:

钩挂模块52,耦合至第一确定模块38,用于重新将apihook钩挂在函数上。

可选地,在确认apihook被卸载之后,可以将apihook重新钩挂到对应的函数上。

在上述监控函数a上钩挂的apihook1是否被卸载的场景中,在确认apihook1被卸载后,可以由钩挂模块将apihook1重新钩挂到对应的函数a上,以实现apihook1对函数a的监视。

图6是根据本发明实施例的一种钩子处理装置的结构框图四,如图6所示,可选地,钩挂模块52包括以下之一:

第一钩挂单元62,用于通过重新修改函数指针,将apihook钩挂到函数上;

第二钩挂单元64,用于通过修改函数的代码,将apihook钩挂到函数上。

图7是根据本发明实施例的一种钩子处理装置的结构框图五,如图7所示,可选地,上述装置还包括:

第二判断模块72,耦合至第一确定模块38,用于判断apihook钩挂的函数的优先级;

第二确定模块74,耦合至第二判断模块72,用于根据优先级确定是否重新将apihook钩挂到函数上。

可选地,在确认了apihook被卸载之后,可以但不限于根据apihook的优先级判断是否需要重新将apihook钩挂到函数上。

在上述监控函数a上钩挂的apihook1是否被卸载的场景中,在确认了apihook1被卸载之后,可以但不限于根据apihook1的优先级判断是否需要重新将apihook1钩挂到函数a上。例如:如果apihook1的优先级低于预设值,则不必再将apihook1钩挂到函数a上了,如果apihook1的优先级高于上述预设值,则重新将apihook1钩挂在函数a上,从而使apihook1能够继续对函数a进行监视。

图8是根据本发明实施例的一种钩子处理装置的结构框图六,如图8所示,可选地,上述装置还包括:

第二获取模块82,耦合至第一确定模块38,用于获取函数之前被调用的日志文件;

第三确定模块84,耦合至第二获取模块82,用于通过日志文件确定apihook被卸载的原因。

可选地,在确认了apihook被卸载之后,可以但不限于对apihook被卸载的原因进行分析确定,可以根据函数调用的日志文件进行apihook被卸载原因的分析。

图9是根据本发明实施例的一种钩子处理装置的结构框图七,如图9所示,可选地,上述装置还包括:

第四确定模块92,耦合至第三确定模块84,用于根据原因的类型确定apihook是否需要被重新钩挂到函数上。

需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述模块分别位于多个处理器中。

以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求所述为准。

实施例3

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

本发明的实施例还提供了一种存储介质,该存储介质包括存储的程序,其中,上述程序运行时执行上述任一项所述的方法。

可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:

s1,获取apihook所钩挂的函数;

s2,调用上述函数;

s3,判断调用函数之后apihook是否监控到函数被调用;

s4,如果apihook未监控到函数被调用,则确定apihook被卸载。

可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(read-onlymemory,简称为rom)、随机存取存储器(randomaccessmemory,简称为ram)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

本发明的实施例还提供了一种处理器,该处理器用于运行程序,其中,该程序运行时执行上述任一项方法中的步骤。

可选地,在本实施例中,上述程序用于执行以下步骤:

s1,获取apihook所钩挂的函数;

s2,调用上述函数;

s3,判断调用函数之后apihook是否监控到函数被调用;

s4,如果apihook未监控到函数被调用,则确定apihook被卸载。

可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。

显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1