一种新型的APIHOOK方法技术

技术编号:38411540 阅读:10 留言:0更新日期:2023-08-07 11:17
本发明专利技术公开了一种新型的APIHOOK方法,包括如下步骤:将动态链接库程序注入到目标进程中;在目标进程中开辟出预设大小的空间,并将用于替换目标API的函数地址存入空间中;从目标进程中定位待HOOK的动态链接库代码段,并记录动态链接库代码段中调用的目标API函数地址;将调用的目标API函数地址替换成上述开辟出来的空间地址。该方法通过HOOK调用API的代码位置,更为有效获取相关API函数控制权。更为有效获取相关API函数控制权。更为有效获取相关API函数控制权。

【技术实现步骤摘要】
一种新型的API HOOK方法


[0001]本专利技术涉及Windows底层安全
,更具体的说是涉及一种新型的API HOOK方法。

技术介绍

[0002]API HOOK为挂钩API函数,用于拦截和控制某些API函数的调用,用于改变API执行结果的技术。API HOOK根据实现的方法可以分为Inline Hook(内联Hook)和IAT Hook(导入表Hook)。其中,Inline Hook是通过修改目标函数(API函数)的头,令其跳转到执行目标函数来实现;IAT Hook技术是通过分析目标程序PE结构,替换目标API在IAT中的地址为钩子函数的地址来实现。
[0003]由于在同一进程同一应用程序接口(API)被多个程序HOOK时,其中一个HOOK是否生效,取决于该HOOK的位置,所以越早执行的HOOK越能有效获取相关API函数控制权。又因为前面的HOOK可以跳过后面HOOK的代码执行,所以IAT hook比inline hook更为有效。但是在具体应用中,IAT HOOK中Hook的位置并不满足实际需求。
[0004]因此,如何在现有的IAT HOOK方法的基础上,将HOOK的位置进一步提前,从而更为有效获取相关API函数控制权,是本领域技术人员亟需解决的问题。

技术实现思路

[0005]有鉴于此,本专利技术提供了本专利技术提供一种至少解决上述部分技术问题的一种新型的API HOOK方法。
[0006]为了实现上述目的,本专利技术采用如下技术方案:
[0007]S1、将动态链接库程序注入到目标进程中;
[0008]S2、在所述目标进程中开辟出预设大小的空间,并将用于替换目标API的函数地址存入所述空间中;
[0009]S3、从所述目标进程中定位待HOOK的动态链接库代码段,并记录所述动态链接库代码段中调用的目标API函数地址;
[0010]S4、将所述调用的目标API函数地址替换成所述步骤S2中开辟出来的空间地址。
[0011]进一步地,在所述步骤S3中,若所述动态链接库代码段的字节码为FF15字节码,且所述FF15字节码的后多位字节为目标API函数地址,则将该多位字节的目标API函数地址作为所述动态链接库代码段中调用的目标API函数地址,并进行记录。
[0012]进一步地,所述S4具体为:将所述调用的目标API函数地址的多位字节偏移值替换成所述步骤S2中开辟出来的空间地址。
[0013]经由上述的技术方案可知,与现有技术相比,本专利技术公开提供了一种新型的API HOOK方法,具有如下有益效果:
[0014]传统的IAT HOOK和INLINE HOOK可以实现通用性,但是HOOK位置不够靠前,所以有效性不够;而硬编码HOOK可以实现某处HOOK的前置性从而提高其有效性,但是硬编码HOOK
需要知道HOOK的具体地址,所以通用性不够;本专利技术实施例所提供的HOOK方法只需要明确目标进程和目标模块,就可以实现某API的具通用有效性的前置的HOOK,所以本专利技术关键是在于提供了一种通用的办法来实现对目标进程的目标模块的所有调用该API的地址进行前置HOOK,从而保证了通用性和有效性。
附图说明
[0015]为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
[0016]图1附图为本专利技术提供的新型的API HOOK方法流程示意图。
具体实施方式
[0017]下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0018]本专利技术实施例公开了一种新型的API HOOK方法,包括如下步骤:
[0019]S1、将动态链接库程序注入到目标进程中;
[0020]S2、在目标进程中开辟出预设大小的空间,并将用于替换目标API的函数地址存入空间中;
[0021]S3、从目标进程中定位待HOOK的动态链接库代码段,并记录动态链接库代码段中调用的目标API函数地址;
[0022]S4、将调用的目标API函数地址替换成步骤S2中开辟出来的空间地址。
[0023]现有的INLINE HOOK代码执行的流程为目标进程的目标模块的代码,通过引入表IAT,找到目标API函数的地址,并调用API函数;本专利技术实施例直接修改目标进程的目标模块的代码,因此要比IAT HOOK和修改的API函数头的INLINE HOOK位置更靠前,从而更为有效,更易获得API的控制权;而且这种HOOK方法比起硬编码HOOK更有通用性,具体体现在:硬编码HOOK需要手工的去确定每一个HOOK点的代码位置和代码内容,定制的实现HOOK,本专利技术实施例只需要明确目标进程和目标模块,以及想HOOK哪个API,就可以使用本专利技术实施例提供的方法自动的实现HOOK,所以具有通用性。
[0024]接下来对上述步骤进行详细说明。
[0025]在上述步骤S1中,将开发的动态链接库程序(DLL程序)注入到目标进程中,便于后续在该DLL程序中实现替换目标API函数;该目标进程包括进程结构地址、进程名和进程当前模块结构指针。
[0026]在上述步骤S2中,在目标进程中开辟出预设大小的空间,并将待HOOK的目标API函数地址存入该空间中;该待HOOK的目标API函数地址即为后续要被替换的目标API函数的地址。
[0027]在上述步骤S3中,从目标进程中定位待HOOK的动态链接库代码段,并记录动态链
接库代码段中调用的目标API函数地址;由于调用的目标API函数地址均以FF 15字节码开头,因此在搜索定位时可以先判断字节码是否为FF 15,如果是,再判断后面4个字节是否为目标API函数地址,如果是,则将该4位字节的目标API函数地址作为动态链接库代码段中调用的目标API函数地址,并进行记录。
[0028]在上述步骤S4中,将调用的目标API函数地址的4位字节偏移值替换成上述步骤S2中开辟出来的空间地址,实现对目标API函数的替换。具体地,替换之前,FF 15后面四个字节是一个存有目标API函数地址的一个导入表地址,替换之后,这四个了字节被替换成了所分配的地址,这个地址中存的是用来替换目标API函数的地址。
[0029]综上,本专利技术实施例公开了一种新型的API HOOK方法,通过HOOK调用API的代码位置,实现更早执行从而获取相关API函数控制权,该方法相比现有的inline HOOK和IAT HOOK来讲,具有HOOK位置提前的特点,从而更为有效,更易获得API的控制权,而且这种HOOK方法本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种新型的APIHOOK方法,其特征在于,包括如下步骤:S1、将动态链接库程序注入到目标进程中;S2、在所述目标进程中开辟出预设大小的空间,并将用于替换目标API的函数地址存入所述空间中;S3、从所述目标进程中定位待HOOK的动态链接库代码段,并记录所述动态链接库代码段中调用的目标API函数地址;S4、将所述调用的目标API函数地址替换成所述步骤S2中开辟出来的空间地址。2.根据权利要求1所述的一种新型的APIHO...

【专利技术属性】
技术研发人员:孟海彬
申请(专利权)人:云袭网络技术河北有限公司
类型:发明
国别省市:

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

1