[发明专利]一种动态链接库函数的钩挂方法、装置和存储介质有效
申请号: | 201810167443.8 | 申请日: | 2018-02-28 |
公开(公告)号: | CN108415739B | 公开(公告)日: | 2020-04-14 |
发明(设计)人: | 房伟 | 申请(专利权)人: | 腾讯科技(深圳)有限公司 |
主分类号: | G06F9/445 | 分类号: | G06F9/445;G06F8/30 |
代理公司: | 北京同达信恒知识产权代理有限公司 11291 | 代理人: | 郭润湘 |
地址: | 518044 广东省深圳*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 动态 链接 库函数 方法 装置 存储 介质 | ||
本发明公开了一种动态链接库函数钩挂方法、装置和存储介质,用以实现对native层任意动态链接库函数进行钩挂。所述动态链接库函数钩挂方法,包括:在检测到系统调用目标函数时,根据所述目标函数在内存中存储的段基址和所述目标函数在可执行与可连接格式文件中的地址偏移信息确定跳转地址,其中,所述地址偏移信息为根据自定义函数的存储地址和所述段基址确定出的;根据跳转地址执行所述自定义函数得到自定义函数的执行结果;并在所述自定义函数中调用所述目标函数,返回所述目标函数的执行结果。
技术领域
本发明涉及计算机程序开发技术领域,尤其涉及一种动态链接库函数的钩挂方法、装置和存储介质。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑。Android的系统架构采用了分层的架构,共分为四层,从高到低分别是Android应用层,Android应用框架层,Android系统运行层(native层)和Linux内核层。Android平台将native层代码打包成so(动态链接库)的格式提供给外部或者内部使用。
现有技术中通过so函数的GOT(全局偏移表)可以对外部函数进行hook(劫持),通过修改外部函数的地址完成hook操作,但是,该方法对于函数的内部函数无法进行hook。
发明内容
本发明实施例提供一种动态链接库函数的钩挂方法、装置和存储介质,用以实现对native层任意so函数的hook。
第一方面,提供一种动态连接库函数的钩挂方法,包括:
在检测到系统调用目标函数时,根据所述目标函数在内存中存储的段基址和所述目标函数在可执行与可连接格式文件中的地址偏移信息确定跳转地址,其中,所述地址偏移信息为根据自定义函数的存储地址和所述段基址确定出的;
根据跳转地址执行所述自定义函数得到自定义函数的执行结果;并
在所述自定义函数中调用所述目标函数,返回所述目标函数的执行结果。
第二方面,提供一种动态链接库的钩挂装置,包括:
第一确定单元,用于在在检测到系统调用目标函数时,根据所述目标函数在内存中存储的段基址和所述目标函数在可执行与可连接格式文件中的地址偏移信息确定跳转地址,其中,所述地址偏移信息为根据自定义函数的存储地址和所述段基址确定出的;
执行单元,用于根据跳转地址执行所述自定义函数得到自定义函数的执行结果;
返回单元,用于在所述自定义函数中调用所述目标函数,返回所述目标函数的执行结果。
第三方面,提供一种终端设备,包括至少一个处理器、以及至少一个存储器,其中,所述存储器存储有计算机程序,当所述程序被所述处理器执行时,使得所述处理器执行上述任一动态链接库的钩挂方法所述的步骤。
第四方面,提供一种计算机可读介质,其存储有可由终端设备执行的计算机程序,当所述程序在终端设备上运行时,使得所述终端设备执行上述动态链接库的钩挂方法所述的步骤。
本发明实施例提供的动态链接库的钩挂方法、装置和存储介质,通过将目标函数在可执行与可连接格式文件中的地址偏移信息修改为根据自定义函数的存储地址确定出的地址偏移信息,这样,当系统调用目标函数时,根据修改后的地址偏移信息确定出的跳转地址可以跳转执行自定义函数实现自定义函数功能,同时在自定义函数中调用目标函数以返回目标函数的执行结果,以保证应用程序的正常运行,由此实现了对目标函数的钩挂。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于腾讯科技(深圳)有限公司,未经腾讯科技(深圳)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810167443.8/2.html,转载请声明来源钻瓜专利网。