[發明專利]一種動態鏈接庫函數的鉤掛方法、裝置和存儲介質有效
| 申請號: | 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.szxzyx.cn/pat/books/201810167443.8/2.html,轉載請聲明來源鉆瓜專利網。





