一种实现函数hook的方法、装置、计算机设备及存储介质制造方法及图纸

技术编号:30650293 阅读:20 留言:0更新日期:2021-11-04 01:08
本发明专利技术公开了一种实现函数hook的方法、装置、计算机设备及存储介质。所述方法包括:将目标函数地址与标识所述目标函数地址的标识符一起写入共享内存中,所述目标函数地址从预设前置头文件中获取;在满足hook条件时,从所述共享内存中获取所述目标函数地址和所述标识符;确定所述标识符对应的hook函数;将所述hook函数注入到所述目标函数地址上,实现函数hook。利用该方法,能够有效获取到静态库中的目标函数地址,扩大了hook的范围。扩大了hook的范围。扩大了hook的范围。

【技术实现步骤摘要】
一种实现函数hook的方法、装置、计算机设备及存储介质


[0001]本专利技术实施例涉及计算机
,尤其涉及一种实现函数hook的方法、装置、计算机设备及存储介质。

技术介绍

[0002]一般hook函数需要两个变量,一个是函数的声明方式,用以声明定义钩子函数;一个是被hook函数的地址。对于函数的地址获取,现有技术是通过查询动态库的函数导出符号表来获取进程中对应函数的地址,再通过一些hook库将钩子注入。
[0003]现有技术中,通过查询动态库导出符号表获取函数地址局限性较大,当需要hook的函数是动态库中其他未导出的函数,或者是静态库函数,或者是应用内部函数,都无法有效获取到对应的函数地址,从而无法进行函数hook。

技术实现思路

[0004]本专利技术实施例提供了一种实现函数hook的方法、装置、计算机设备及存储介质,能够有效获取到静态库中的目标函数地址,扩大了hook的范围。
[0005]第一方面,本专利技术实施例提供了一种实现函数hook的方法,包括:
[0006]将目标函数地址与标识所述目标函数地址的标识符一起写入共享内存中,所述目标函数地址从预设前置头文件中获取;
[0007]在满足hook条件时,从所述共享内存中获取所述目标函数地址和所述标识符;
[0008]确定所述标识符对应的hook函数;
[0009]将所述hook函数注入到所述目标函数地址上,实现函数hook。
[0010]第二方面,本专利技术实施例还提供了一种实现函数hook的装置,包括:
[0011]写入模块,用于将目标函数地址与标识所述目标函数地址的标识符一起写入共享内存中,所述目标函数地址从预设前置头文件中获取;
[0012]获取模块,用于在满足hook条件时,从所述共享内存中获取所述目标函数地址和所述标识符;
[0013]确定模块,用于确定所述标识符对应的hook函数;
[0014]注入模块,用于将所述hook函数注入到所述目标函数地址上,实现函数hook。
[0015]第三方面,本专利技术实施例还提供了一种计算机设备,包括:
[0016]一个或多个处理器;
[0017]存储装置,用于存储一个或多个程序;
[0018]所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器用于实现本专利技术任意实施例中所述的实现函数hook的方法。
[0019]第四方面,本专利技术实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本专利技术任意实施例所提供的实现函数hook的方法。
[0020]本专利技术实施例提供了一种实现函数hook的方法、装置、计算机设备及存储介质,首
先将目标函数地址与标识所述目标函数地址的标识符一起写入共享内存中,所述目标函数地址从预设前置头文件中获取;然后在满足hook条件时,从所述共享内存中获取所述目标函数地址和所述标识符;之后确定所述标识符对应的hook函数;最后将所述hook函数注入到所述目标函数地址上,实现函数hook。利用上述技术方案,能够有效获取到静态库中的目标函数地址,扩大了hook的范围。
附图说明
[0021]图1为本专利技术实施例一所提供的一种实现函数hook的方法的流程示意图;
[0022]图2为本专利技术实施例二所提供的一种实现函数hook的方法的示例流程图;
[0023]图3为本专利技术实施例三提供的一种实现函数hook的装置的结构示意图;
[0024]图4为本专利技术实施例四所提供的一种计算机设备的结构示意图。
具体实施方式
[0025]下面将参照附图更详细地描述本专利技术的实施例。虽然附图中显示了本专利技术的某些实施例,然而应当理解的是,本专利技术可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本专利技术。应当理解的是,本专利技术的附图及实施例仅用于示例性作用,并非用于限制本专利技术的保护范围。
[0026]应当理解,本专利技术的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本专利技术的范围在此方面不受限制。
[0027]本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
[0028]需要注意,本专利技术中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
[0029]需要注意,本专利技术中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
[0030]本专利技术实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
[0031]实施例一
[0032]图1为本专利技术实施例一所提供的一种实现函数hook的方法的流程示意图,该方法可适用于对依赖库中的函数进行hook的情况,该方法可以由一种实现函数hook的装置来执行,其中该装置可由软件和/或硬件实现,并一般集成在计算机设备上。
[0033]如图1所示,本专利技术实施例一提供的一种实现函数hook的方法,包括如下步骤:
[0034]S110、将目标函数地址与标识所述目标函数地址的标识符一起写入共享内存中,所述目标函数地址从预设前置头文件中获取。
[0035]其中,目标函数可以为用户希望hook的函数,目标函数可以为动态库的导出函数、动态库的未导出函数、类的静态成员函数、类的常规函数等。其中,类可以为面向对象编程
的一种抽象概念,可以理解为数据和函数的一种聚合。在本实施例中,对目标函数的个数不作具体限制。
[0036]其中,目标函数地址的标识符可以为一种标志性的符号,标识符可以为标识函数地址的函数声明,例如枚举类型。标识符的作用为在之后进行hook函数时可以通过标识符区分目标函数地址的具体类型。需要说明的是,此处仅通过目标函数地址无法识别函数签名,函数签名即函数声明。
[0037]在本实施例中,预设前置头文件可以为预先设置好的一个头文件,头文件的主要作用在于多个代码文件全局变量的重用、防止定义的冲突,对各个被调用函数给出一个描述,其本身不需要包含程序的逻辑实现代码,它只起描述性作用,用户程序只需要按照头文件中的接口声明来调用相关函数或变量,链接器会从库中寻找相应的实际定义代码。需要说明的是,hook不同的库时引入的预设前置头文件也是不尽相同的。在编译期,用户可以主动引入一个预设前置头文件到主程序中,通过一个预设前置头文件来获取其他非动本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种实现函数hook的方法,其特征在于,所述方法包括:将目标函数地址与标识所述目标函数地址的标识符一起写入共享内存中,所述目标函数地址从预设前置头文件中获取;在满足hook条件时,从所述共享内存中获取所述目标函数地址和所述标识符;确定所述标识符对应的hook函数;将所述hook函数注入到所述目标函数地址上,实现函数hook。2.根据权利要求1所述的方法,其特征在于,所述共享内存为通过所述预设前置头文件申请后得到的。3.根据权利要求1所述的方法,其特征在于,所述预设前置头文件编译在主程序的可执行文件中,所述预设前置头文件为与hook库对应的头文件。4.根据权利要求3所述的方法,其特征在于,从所述预设前置头文件中获取所述目标函数地址之后,还包括:在所述预设前置头文件中声明一个单例类的静态实例;在所述静态实例初始化时,调用单例类的构造函数;在所述构造函数中,根据目标函数名称获取对应的目标函数地址。5.根据权利要求1所述的方法,其特征在于,将目标函数地址与标识所述目标函数地址的标识符一起写入共享内存中,包括:通过所述预设前置头文件将所述目标函数地址对应的函数声明进行标识,得到标识符;通过所述预设前置头文件将所述标识符写入所述共享内存中。6.根据权利要求1所述的方法...

【专利技术属性】
技术研发人员:袁耀辉曹智轶
申请(专利权)人:北京博睿宏远数据科技股份有限公司
类型:发明
国别省市:

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

1