[發明專利]一種加載系統動態庫的方法和裝置有效
| 申請號: | 201810344656.3 | 申請日: | 2018-04-17 |
| 公開(公告)號: | CN108595218B | 公開(公告)日: | 2021-08-27 |
| 發明(設計)人: | 吳昕 | 申請(專利權)人: | 網宿科技股份有限公司 |
| 主分類號: | G06F9/445 | 分類號: | G06F9/445 |
| 代理公司: | 北京華智則銘知識產權代理有限公司 11573 | 代理人: | 劉榮鑫 |
| 地址: | 200030 上海市徐匯區*** | 國省代碼: | 上海;31 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 加載 系統 動態 方法 裝置 | ||
本發明公開了一種加載系統動態庫的方法和裝置,屬于計算機技術領域。所述方法包括:目標進程劫持dlopen函數,確定內存中dlopen_ext函數的第一邏輯地址,并確定所述dlopen函數的預定調用者的第二邏輯地址;所述目標進程將所述第二邏輯地址作為調用參數,根據所述第一邏輯地址調用所述dlopen_ext函數;所述目標進程通過所述dlopen_ext函數加載所述目標系統動態庫。采用本發明,可以繞開dlopen函數的調用權限檢測,實現對系統動態庫的加載處理。
技術領域
本發明涉及計算機技術領域,特別涉及一種加載系統動態庫的方法和裝置。
背景技術
函數劫持是指在不改變函數原有功能的前提下在函數中添加新功能,這樣,當函數運行的時候,可以同時實現原有功能和添加的新功能。在許多游戲加速或者流量引導的應用場景中,通常需要采用ELF Hook來劫持網絡API函數。
為了能夠劫持所有未加載的動態庫中的網絡API函數,應用進程可以加載用于劫持網絡API函數的動態庫A,然后基于動態庫A的執行邏輯先劫持dlopen函數,將其替換成new_dlopen函數。之后,當調用dlopen函數加載動態庫B時,應用進程可以先調用new_dlopen函數,再通過new_dlopen函數調用dlopen函數來加載動態庫B,然后可以對加載完成后的動態庫B進行ELF Hook處理,即劫持其中的網絡API函數。
在實現本發明的過程中,發明人發現現有技術至少存在以下問題:
在Android 7.0版本之后的操作系統中,dlopen函數增加了調用權限限制,即在調用dlopen函數加載系統動態庫時,dlopen函數會檢查調用者是否是具備dlopen函數調用權限的預定調用者,如果不是,則告知調用者加載失敗,而new_dlopen函數代碼位于用戶自己加載的動態庫(動態庫A)中,dlopen函數所檢測到的調用者可能不是預定調用者,并不具備加載系統動態庫的權限,因此無法調用dlopen函數加載系統動態庫。
發明內容
為了解決現有技術的問題,本發明實施例提供了一種加載系統動態庫的方法和裝置。所述技術方案如下:
第一方面,提供了一種加載系統動態庫的方法,所述方法包括:
目標進程劫持dlopen函數,確定內存中dlopen_ext函數的第一邏輯地址,并確定所述dlopen函數的預定調用者的第二邏輯地址;
所述目標進程將所述第二邏輯地址作為調用參數,根據所述第一邏輯地址調用所述dlopen_ext函數;
所述目標進程通過所述dlopen_ext函數加載所述目標系統動態庫。
可選的,所述確定內存中dlopen_ext函數的第一邏輯地址,包括:
目標進程根據其對應的資源映射文件,確定加載器文件的加載基地址;
所述目標進程解析所述加載器文件,獲取dlopen_ext函數的地址偏移量;
所述目標進程根據所述加載基地址和所述地址偏移量,確定內存中所述dlopen_ext函數的第一邏輯地址。
可選的,所述目標進程解析所述加載器文件,獲取dlopen_ext函數的地址偏移量,包括:
目標進程根據加載器文件的ELF頭部數據獲取節頭表;
所述目標進程根據所述節頭表查找并讀取字符串表和靜態符號表;
所述目標進程在所述字符串表中查找dlopen_ext對應的目標符號索引;
所述目標進程將所述靜態符號表中所述目標符號索引對應的符號地址作為dlopen_ext函數的地址偏移量。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于網宿科技股份有限公司,未經網宿科技股份有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201810344656.3/2.html,轉載請聲明來源鉆瓜專利網。





