一种第三方动态库接口拦截方法及系统技术方案

技术编号:18763588 阅读:35 留言:0更新日期:2018-08-25 10:24
本发明专利技术公开了一种第三方动态库接口拦截方法及系统。该方法包括如下步骤:获取第三方动态库接口接入的指针接口类,创建该指针接口类的子类;对该子类进行实例化创建子类实例化对象,得到虚函数表指针;获取指针接口类的虚函数表指针的内容,并将指针接口类的虚函数表指针的内容替换为子类的虚函数表的第一个内存位置;当第三方动态库接口访问指针接口类时,通过指针接口类的虚函数表指针的内容访问子类的虚函数表的第一个内存地址,实现拦截。该方法可以实现任意第三方动态库接口的拦截,不会因为第三方产品的规格和型号不同,或者其光学系统以及通信方式不同而产生遗漏。

【技术实现步骤摘要】
一种第三方动态库接口拦截方法及系统
本专利技术涉及一种第三方动态库接口拦截方法,同时涉及相应的第三方动态库接口拦截系统。
技术介绍
动态库又称动态链接库(DynamicLinkLibrary),缩写为DLL。DLL是一个包含可由多个程序同时使用的代码和数据的库。它使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个DLL中,该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL还有助于共享数据和资源,多个应用程序可同时访问内存中单个DLL副本的内容。随着动态库的迅速发展以及广泛应用,通过第三方动态库接口可以进行诸多操作,以达到系统本身对信息的需求。例如,在申请号为201410083145.2的中国专利申请中,提供了一种基于动态库API拦截的数据采集方法,通过编写与被替换动态库同名的新的替换动态库,将被替换动态库更改为其它名字;应用程序调用替换动态库的API,替换动态库获取目标信息系统处理或传输过程中的数据,以此来实现通过拦截动态链接库的API获取目标信息系统传输过程中的中间数据,从而获得系统运行的关键信息。另外,在专利号为ZL201210187455.X的中国专利技术专利中,提供了一种用于拦截电子设备的操作系统中应用程序对服务调用的方法和装置。通过将拦截动态库加载到服务所在的进程;将进程中的输入输出控制函数的地址替换为拦截动态库的第一地址;在应用程序对服务进行调用时,基于第一地址执行拦截动态库,获得应用程序的名称和信息和调用的信息,并将调用的信息中包括的要被调用的服务的地址替换为拦截动态库的第二地址;基于第二地址,根据应用程序的名称和/或信息来执行处理,以提高电子设备操作系统的安全性。
技术实现思路
针对现有技术的不足,本专利技术所要解决的首要技术问题在于提供一种第三方动态库接口拦截方法。本专利技术所要解决的另一技术问题在于提供一种第三方动态库接口拦截系统。为实现上述专利技术目的,本专利技术采用下述的技术方案:根据本专利技术实施例的第一方面,提供一种第三方动态库接口拦截方法,包括如下步骤:获取第三方动态库接口接入的指针接口类,创建所述指针接口类的子类;对所述子类进行实例化创建子类实例化对象,得到虚函数表指针;获取指针接口类的虚函数表指针的内容,并将指针接口类的虚函数表指针的内容替换为子类的虚函数表的第一个内存位置;当第三方动态库接口访问指针接口类时,通过指针接口类的虚函数表指针的内容访问子类的虚函数表的第一个内存地址,实现拦截。其中较优地,获取指针接口类的虚函数表指针的内容之后,将所述指针接口类的虚函数表指针的内容进行保存,通过访问所述指针接口类的虚函数表指针的内容,子类的实例化对象可以访问所述指针接口类。其中较优地,用于虚拟现实场景时,第三方设备动态库接入steam平台;包括如下步骤:第三方设备动态库和定位设备动态库分别获取steam平台中OpenVr的捕捉姿态设备接口类,创建该捕捉姿态设备接口类的子类,对所述子类进行实例化,并得实例化对象指针;获取第三方设备动态库接口接入的设备接入接口类,创建所述设备接入接口类的子类;对所述设备接入接口类的子类进行实例化创建子类实例化对象,得到虚函数表指针;当第三方设备动态库请求接入OpenVr时,虚函数指针替换函数获取设备接入接口类的虚函数表指针的内容,并将设备接入接口类的虚函数表指针的内容替换为设备接入接口类的子类的虚函数表的第一个内存位置;第三方设备动态库通过设备接入接口类的虚函数表指针的内容访问设备接入接口类的子类的虚函数表的第一个内存地址,实现拦截。其中较优地,在第三方设备动态库和定位设备动态库分别获取OpenVr的捕捉姿态设备接口类之前,定位设备动态库获取第三方设备动态库的配置文件,并进行改写,使Steam不能加载到第三方设备的库文件。其中较优地,当定位设备动态库通过实例化对象指针调用第三方设备动态库中的函数时,将第三方设备动态库加载到定位设备的驱动程序中。其中较优地,定位设备动态库通过第三方设备动态库的捕捉姿态设备接口类的子类实例化对象指针调用第三方设备动态库。其中较优地,采用虚函数指针还原函数,将设备接入接口类的虚函数表指针的内容还原为原始的虚函数表指针位置;定位设备动态库通过原始的虚函数表指针位置访问设备接入接口类的函数,通过定位设备动态库调用第三方设备动态库的数据。其中较优地,当定位设备动态库通过设备接入接口类的虚函数表指针的内容访问设备接入接口类的函数,通过定位设备动态库调用第三方设备动态库的数据完成之后,还包括如下步骤:继续调用虚函数指针替换函数将设备接入接口类的虚函数表指针的内容替换为设备接入接口类的子类的虚函数表的第一个内存位置;供第三方设备动态库访问OpenVr时对第三方设备动态库接口进行拦截。根据本专利技术实施例的第二方面,提供一种第三方动态库接口拦截系统,包括处理器和存储器;所述存储器上存储有可用在所述处理器上运行的计算机程序,当所述计算机程序被所述处理器执行时实现如下步骤:获取第三方动态库接口接入的指针接口类,创建所述指针接口类的子类;对所述子类进行实例化创建子类实例化对象,得到虚函数表指针;获取指针接口类的虚函数表指针的内容,并将指针接口类的虚函数表指针的内容替换为子类的虚函数表的第一个内存位置;当第三方动态库接口访问指针接口类时,通过指针接口类的虚函数表指针的内容访问子类的虚函数表的第一个内存地址,实现拦截。其中较优地,用于虚拟现实场景时,第三方设备动态库接入steam平台;包括处理器和存储器;所述存储器上存储有可用在所述处理器上运行的计算机程序,当所述计算机程序被所述处理器执行时实现如下步骤:第三方设备动态库和定位设备动态库分别获取steam平台中OpenVr的捕捉姿态设备接口类,创建该捕捉姿态设备接口类的子类,对所述子类进行实例化,并得实例化对象指针;获取第三方设备动态库接口接入的设备接入接口类,创建所述设备接入接口类的子类;对所述设备接入接口类的子类进行实例化创建子类实例化对象,得到虚函数表指针;当第三方设备动态库请求接入OpenVr时,虚函数指针替换函数获取设备接入接口类的虚函数表指针的内容,并将设备接入接口类的虚函数表指针的内容替换为设备接入接口类的子类的虚函数表的第一个内存位置;第三方设备动态库通过设备接入接口类的虚函数表指针的内容访问设备接入接口类的子类的虚函数表的第一个内存地址,实现拦截。本专利技术所提供的第三方动态库接口拦截方法,通过获取第三方动态库接口接入的指针接口类,创建该指针接口类的子类,对该子类进行实例化创建子类实例化对象,得到虚函数表指针。然后,获取指针接口类的虚函数表指针的内容,并将指针接口类的虚函数表指针的内容替换为子类的虚函数表的第一个内存位置。当第三方动态库接口访问指针接口类时,通过指针接口类的虚函数表指针的内容访问子类的虚函数表的第一个内存地址,实现拦截。该方法可以实现任意第三方动态库接口的拦截,不会因为第三方产品的规格和型号不同,或者其光学系统以及通信方式不同而产生遗漏。而且通过对第三方动态库接口的拦截,可以获取第三方的相关信息,包括设备序列号,Steam分配的设备ID,以及视口信息等,使我们的定位设备更好地适配于第三方产品。附图说明图1为本专利技术所提供的第三方动态库接口拦截方法本文档来自技高网
...

【技术保护点】
1.一种第三方动态库接口拦截方法,其特征在于包括如下步骤:获取第三方动态库接口接入的指针接口类,创建所述指针接口类的子类;对所述子类进行实例化创建子类实例化对象,得到虚函数表指针;获取指针接口类的虚函数表指针的内容,并将指针接口类的虚函数表指针的内容替换为子类的虚函数表的第一个内存位置;当第三方动态库接口访问指针接口类时,通过指针接口类的虚函数表指针的内容访问子类的虚函数表的第一个内存地址,实现拦截。

【技术特征摘要】
1.一种第三方动态库接口拦截方法,其特征在于包括如下步骤:获取第三方动态库接口接入的指针接口类,创建所述指针接口类的子类;对所述子类进行实例化创建子类实例化对象,得到虚函数表指针;获取指针接口类的虚函数表指针的内容,并将指针接口类的虚函数表指针的内容替换为子类的虚函数表的第一个内存位置;当第三方动态库接口访问指针接口类时,通过指针接口类的虚函数表指针的内容访问子类的虚函数表的第一个内存地址,实现拦截。2.如权利要求1所述的第三方动态库接口拦截方法,其特征在于:获取指针接口类的虚函数表指针的内容之后,将所述指针接口类的虚函数表指针的内容进行保存,通过访问所述指针接口类的虚函数表指针的内容,子类的实例化对象访问所述指针接口类。3.如权利要求1所述的第三方动态库接口拦截方法,用于虚拟现实场景,第三方设备动态库接入steam平台;其特征在于包括如下步骤:第三方设备动态库和定位设备动态库分别获取steam平台中OpenVr的捕捉姿态设备接口类,创建该捕捉姿态设备接口类的子类,对所述子类进行实例化,并得实例化对象指针;获取第三方设备动态库接口接入的设备接入接口类,创建所述设备接入接口类的子类;对所述设备接入接口类的子类进行实例化创建子类实例化对象,得到虚函数表指针;当第三方设备动态库请求接入OpenVr时,虚函数指针替换函数获取设备接入接口类的虚函数表指针的内容,并将设备接入接口类的虚函数表指针的内容替换为设备接入接口类的子类的虚函数表的第一个内存位置;第三方设备动态库通过设备接入接口类的虚函数表指针的内容访问设备接入接口类的子类的虚函数表的第一个内存地址,实现拦截。4.如权利要求3所述的第三方动态库接口拦截方法,其特征在于:在第三方设备动态库和定位设备动态库分别获取OpenVr的捕捉姿态设备接口类之前,定位设备动态库获取第三方设备动态库的配置文件,并进行改写,使Steam不能加载到第三方设备的库文件。5.如权利要求3所述的第三方动态库接口拦截方法,其特征在于:当定位设备动态库通过实例化对象指针调用第三方设备动态库中的函数时,将第三方设备动态库加载到定位设备的驱动程序中。6.如权利要求3所述的第三方动态库接口拦截方法,其特征在于:定位设备动态库通过第三方设备动态库的捕捉姿态设备接口类的子类实例化对象指针调用第三...

【专利技术属性】
技术研发人员:冉瑞元张佳宁张道宁
申请(专利权)人:北京凌宇智控科技有限公司
类型:发明
国别省市:北京,11

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

1