一种hook的方法及终端设备技术

技术编号:14636946 阅读:33 留言:0更新日期:2017-02-15 11:06
一种hook的方法及终端设备,所述方法包括:以挂钩hook服务的方式运行注入目标进程中的hook程序;通过所述hook程序监听与所述目标进程匹配的hook事件;通过所述hook程序,根据所述hook事件对所述目标进程中的调用函数执行hook操作。能够提高采用hook技术进行安全测试的测试效率。

【技术实现步骤摘要】

本专利技术涉及数据处理
,尤其涉及一种hook的方法及终端设备
技术介绍
挂钩(Hook)技术是一种可以将目标进程的某一个函数替换成一个自定义的函数中执行的技术,利用hook技术可以达到修改目标进程某个函数的执行逻辑的功能。例如在应用的安全测试过程中,可采用hook技术来修改函数的返回值和参数,以发现存在安全问题或代码漏洞的函数。具体是:为每个被hook的函数都编写一个自定义hook函数,然后将自定义hook函数编译为动态数据库,再将动态数据库注入到进程中,重启进程后使得注入的动态数据库生效。由于需要通过大量的测试才可能确定存在安全问题或代码漏洞的函数,而每一次测试,都需要修改一次参数,并且修改一次参数后,还需要重新编译为动态数据库,然后将新编译的动态数据库注入到进程中,再重启进程使得新编译的动态数据库生效,如此往复执行,使得最终发现一个存在安全问题或代码漏洞的函数需要花费很长的时间,测试效率低下。
技术实现思路
本专利技术提供了一种hook的方法及终端设备,能够解决现有技术中采用hook技术进行安全测试的测试效率低下的问题。第一方面提供一种hook的方法,所述方法包括:以挂钩hook服务的方式运行注入目标进程中的hook程序;通过所述hook程序监听与所述目标进程匹配的hook事件;通过所述hook程序,根据所述hook事件对所述目标进程中的调用函数执行hook操作。第二方面提供一种用于hook的终端设备,所述终端设备具有实现对应于上述第一方面提供的hook的方法的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的单元,所述单元可以是软件和/或硬件。所述终端设备包括:控制模块,用于控制所述终端设备以挂钩hook服务的方式运行注入目标进程中的hook程序;监听模块,用于通过所述hook程序监听与所述目标进程匹配的hook事件;处理模块,用于通过所述hook程序,根据所述监听模块监听到的所述hook事件对所述目标进程中的调用函数执行hook操作。相较于现有技术,本专利技术提供的方案中,以hook服务的方式运行注入目标进程中的hook程序,通过所述hook程序监听与所述目标进程匹配的hook事件,无需再次编译hook程序、注入、重启目标进程等操作,即可直接根据所述hook事件对所述目标进程中的调用函数执行hook操作,能够有效提高hook操作的效率。附图说明图1为hook机制的一种实现方式的示意图;图2为本实施例中hook的方法的一种流程示意图;图3为本实施例中自定义hook函数与被hook函数关联的一种示意图;图4为本实施例中hook的方法的另一种流程示意图;图5为本实施例中ARM模式下跳转指令机器码的一种结构示意图;图6为本实施例中THUMB模式下跳转指令机器码的一种结构示意图;图7-1为本实施例中进程列表的示意图;图7-2为本实施例中模块列表的示意图;图7-3为本实施例中符号列表的示意图;图7-4为本实施例中在hook窗口修改参数和返回值的一种示意图;图7-5为本实施例中设置参数和返回值后的一种运行结果示意图;图7-6为本实施例中修改参数和返回值后的另一种运行结果示意图;图8为本实施例中终端设备的一种结构示意图;图9为本实施例中终端设备的另一种结构示意图。具体实施方式本专利技术实施例提供了一种hook的方法及终端设备,可用于数据处理
,例如游戏漏洞测试、应用的代码安全测试等场景,在进程大量测试时,通过提高hook效率来提高测试效率,减少测试工作量。下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例,基于本专利技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。本专利技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元,本文中所出现的单元的划分,仅仅是一种逻辑上的划分,实际应用中实现时可以有另外的划分方式,例如多个单元可以结合成或集成在另一个系统中,或一些特征可以忽略,或不执行,另外,所显示的或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元之间的间接耦合或通信连接可以是电性或其他类似的形式,本文中均不作限定。并且,作为分离部件说明的单元或子单元可以是也可以不是物理上的分离,可以是也可以不是物理单元,或者可以分不到多个电路单元中,可以根据实际的需要选择其中的部分或全部单元来实现本专利技术实施例方案的目的。下面针对本专利技术中出现的技术名词进行解释:函数的Hook是指当目标进程执行到某个函数(当需要hook这个函数的时候称这个函数为被hook函数)的时候,通过修改该函数头部的几条指令,让它跳转到自定义的一个函数(一般称之为自定义的hook函数)中去的过程,称之为函数的hook,有时被hook函数逻辑比较复杂的情况下需要在自定义hook函数中实现原函数的功能,这个时候hook框架会提供一个函数指针,调用该函数指针可以完成被hook函数原有功能,在本方案中提到的这类可以实现原函数功能的函数以Old_开头命名。如图1所示,为hook的一种原理机制,通用的hook框架会提供一个接口,用以告诉hook框架需要将哪个函数(图1的Function)hook到哪个自定义的函数(图1的My_Function)中去,并且还会提供一个用以实现被hook函数功能的函数(图1中的Old_Function)。现有的解决方案就是利用这套hook框架,将自定义的函数写入到一个动态链接库中,然后加载动态链接库到目标进程中执行hook框架,从而将Function函数hook到My_Function中,当目标进程执行到Function的时候会自动走到My_Function中,而在My_Function就可以编写自定义的代码来代替Function的逻辑,从而达到修改目标进程逻辑的目的。注入是指通过一定的黑客技术在目标进程中被动执行一段自定义的代码的过程,通过注入可以读取目标进程中任意数据和修改任意数据,注入也可称为加载,具体的名称本专利技术不作限定。逻辑漏洞是指能在交互式应用修改数据的代码缺陷,例如在游戏中可以被游戏外挂非法利用以达到获利的目的的代码缺陷。动态数据库是指一种不可执行的二进制程序,其需要被可执行程序加载后才可以执行其所包含的代码,在Windows系统中,动态数据库的扩展名一般为.dll,在安卓系统中,动态数据库的扩展名一般为.so,在需要运行时,可通过加载到可执行程序中运行,例如加载到上述目标进程中运行。本专利技术中是将编写好的自定义hook函数的代码编译为动态数据库,也可将动态数据库成为hook程序,该h本文档来自技高网
...
一种hook的方法及终端设备

【技术保护点】
一种hook的方法,其特征在于,所述方法包括:以挂钩hook服务的方式运行注入目标进程中的hook程序;通过所述hook程序监听与所述目标进程匹配的hook事件;通过所述hook程序,根据所述hook事件对所述目标进程中的调用函数执行hook操作。

【技术特征摘要】
1.一种hook的方法,其特征在于,所述方法包括:以挂钩hook服务的方式运行注入目标进程中的hook程序;通过所述hook程序监听与所述目标进程匹配的hook事件;通过所述hook程序,根据所述hook事件对所述目标进程中的调用函数执行hook操作。2.根据权利要求1所述的方法,其特征在于,所述hook程序中设置待监听的自定义hook函数,自定义hook函数与所述目标进程中的调用函数关联。3.根据权利要求2所述的方法,其特征在于,所述通过所述hook程序监听与所述目标进程匹配的hook事件;通过所述hook程序,根据所述hook事件对所述目标进程中的调用函数执行hook操作,包括:通过所述hook程序监听到与所述目标进程中的调用函数匹配的hook事件后,根据所述hook事件确定目标自定义hook函数;确定与所述目标自定义hook函数关联的目标被hook函数;通过所述hook程序,根据所述hook事件在所述目标进程中对所述目标被hook函数执行hook操作。4.根据权利要求3所述的方法,其特征在于,所述hook事件是指针对所述目标进程中的调用函数的hook操作,所述hook操作包括更新所述目标被hook函数的运行逻辑。5.根据权利要求4所述的方法,其特征在于,所述方法还包括:通过所述hook程序实时获取针对所述目标被hook函数更新的运行逻辑;通过所述hook程序,根据更新的运行逻辑在所述目标进程中对所述目标被hook函数执行hook操作。6.根据权利要求5所述的方法,其特征在于,所述通过所述hook程序监听到与所述调用函数匹配的hook事件后,确定与所述调用函数关联的目标被hook函数,包括:通过所述hook程序监听到外部数据变化后,根据变化的外部数据定位到与变化的外部数据对应的目标自定义hook函数,所述外部数据是指在所述目标进程之外的数据;确定与所述目标自定义hook函数关联的所述目标被hook函数。7.根据权利要求2-6任一所述的方法,其特征在于,所述方法还包括:设置多种类型的自定义hook函数;将参数个数相同的被hook函数关联到相同类型的自定义hook函数。8.根据权利要求7所述的方法,其特征在于,所述根据变化的外部数据定位到与变化的外部数据对应的目标自定义hook函数,确定与所述目标自定义hook函数关联的所述目标被hook函数,包括:根据所述变化的外部数据定位到与所述变化的外部数据对应的第一类型的自定义hook函数;从与所述第一类型的自定义hook函数关联的被hook函数中,确定与所述变化的外部数据对应的所述目标被hook函数。9.根据权利要求8所述的方法,其特征在于,所述从与所述第一类型的自定义hook函数关联的被hook函数中,确定与所述变化的外部数据对应的所述目标被hook函数,包括:计算与所述第一类型的自定义hook函数关联的各被hook函数的函数指针;根据所述各被hook函数的函数指针确定与所述变化的外部数据对应的所述目标被hook函数。10.根据权利要求9所述的方法,其特征在于,所述计算与所述第一类型的自定义hook函数关联的各被hook函数的函数指针,根据所述各被hook函数的函数指针确定与所述变化的外部数据对应的所述目标被hook函数,包括:获取与所述第一类型的自定义hook函数关联的各被hook函数的返回地址;根据被hook函数的返回地址确定调用被hook函数的指令集;根据被hook函数的返回地址和调用被hook函数的指令集,确定调用被hook函数的汇编指令;根据调用被hook函数的汇编指令得到当前被hook函数的目标函数指针;确定所述目标函数指针指向的所述目标被hook函数。11.根据权利要求10所述的方法,其特征在于,在确定所述目标函数指针指向的所述目标被hook函数之后,所述方法还包括:获取控制所述目标被hook函数执行的控制数据;根据所述控制数据控制所述目标被hook函数的执行操作,所述执行操作包括修改所述目标被hook函数的运行逻辑,所述运行逻辑包括调用信息,所述调用信息包括参数和/或返回值。12.根据权利要求10或11所述的方法,其特征在于,所述根据调用被hook函数的汇编指令得到当前被hook函数的目标函数指针,确定所述目标函数指针指向的所述目标被hook函数,包括:根据所述汇编指令的机器码确定所述被hook函数的调用方式为普通函数调用方式时,将所述机器码的低a位数据作为所述指令集跳转到所述机器码的偏移值,a为正整数;根据所述偏移值机器码的链接位和机器码的条件域得到被调用的所述目标自定义ho...

【专利技术属性】
技术研发人员:黄柳优李源纯姜润知王鹏魏学峰
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1