前言:
現(xiàn)在 市面上的 Hook 框架有很多 警检,Xposed,Frida,YAHAK 等?
Frida 是目前最火的 调衰,跨平臺注入 框架 夷野,支持 java和 Naive 層
安卓 目前 沙盒注入 方式 應該 就 兩種Ptrace?和 Zygote
各有各的優(yōu)點和短板? 曾經(jīng)Hook之王 Xposed 在 Native層顯得比較無力
也就導致 市場上很多 模塊都 不能 進行Native層的 Hook?
一直在想著 能不能 試著 完善一下蜒什。
如何利用xposed Hook Native層 函數(shù) - 簡書
在之前這篇帖子里? 簡單實現(xiàn)了 Xposed 在 4.4的 版本的 NativeHook?
主要 原理就是 在加載 被Hook So的 時候 利用Xposed攔截?
在 java層 調用System.load函數(shù) 把Xposed 模塊里面的so進行 加載注入??
在so里面 直接調用 dlopen拿到 被Hook So地址 即可
在高版本里面 是不允許直接 System.load 的 認為是 不安全的?
大概意思就是說 直接?System.load 容易被串改 在高版本會失效 應該使用 System.loadLib
這個函數(shù)是加載 app內部 Lib下So的函數(shù)? ?但最終 都會調用 doLoad函數(shù) (具體 可以參考對應源碼 )我們就從 這個函數(shù)入手
Xposed 先掛鉤 作為 So名字 作為 條件過濾依據(jù)?
這塊 有個問題 就是 怎么把 Xposed模塊里面的 So注入到 目標 進程中??
在 4.4 版本的時候 可以 直接 System.load 打開即可 然后進行 裝載和鏈接
這個 問題 我想了很長時間 有兩種 可行方案?
第一種方案 :可以吧 模塊里的 so 利用shell權限 進行 copy 直接 拷貝到 被 Hook的 lib下面?
然后?System.loadLib 去加載即可 因為 因為shell需要 root 會導致 被 Hook 進程 申請 Root權限才可以?
(比如 Hook A app 因為 Xposed 走的是 A所在的進程? 所以如果 在 代碼里申請 Root 最終 會提示A app 申請 Root)
進行操作?不方便 和 不實用?
第二種方案:直接利用反射 調用?doLoad? 函數(shù) 進行 So的 加載? 如圖
第一個 參數(shù) 是 So的 路徑 第二個參數(shù) Classloader 其實他是一個 PathClassloader
如果 發(fā)現(xiàn) 加載的 So 是被Hook的 So 便進行 注入 把第二個 參數(shù) 傳入 進去 反射備用
這塊的 Path是 絕對路徑? 有人會問 為什么要這么寫? ??
我在Hook 這個 函數(shù)的時候? 把參數(shù) 1 打印了一下 可以看到 加載的 是 So的絕對路徑
(這塊 樓主 也有一件事 不太懂 為什么 路徑 要加個 -1 很奇怪 算了 照葫蘆畫瓢? 先這么寫 )
這里科普一下 /data/data/ 下面 都是 App的數(shù)據(jù) 而/data/App/下面放的是 app 包?
然后吧 路徑 改成自己Xposed模塊里的 So 進行? 注入 成功院峡!
這塊有個調用時機 問題 一定要在 目標 So加載完畢 以后 在進行 注入?
因為后期需要 實現(xiàn) 突破 7.0? dlopen 限制? 需要遍歷 內存對應的Map文件?
下來 開始 在 Xposed模塊的 so得?JNI_OnLoad 進行? 掛鉤 Hook 樓主用的是 InlineHook
在 4.4 版本 以前 可以 直接 dlopen直接打開 任意目錄的 So 進制 裝載和鏈接?
在 4.4的 時候 直接打開 被Hook的 so即可?
在高版本 因為 權限問題 不能 直接打開?
樓上圖片參考 地址?https://www.cnblogs.com/eniac1946/p/7515557.html
樓主 用的是? 感謝大佬提供的 輪子?
GitHub - lizhangqu/dlfcn_compat: 兼容Android 7.0 dlfcn(dlopen兴使、dlsym、dlclose照激、dlerror)
? 主要是遍歷 Map文件 拿到so的 地址 和 dlopen的 Hook
(具體可參考 項目的 reademe)
下面 我們看看 內存里的 文件對應內容 樓主用的是 7.1的 安卓? 系統(tǒng)?
利用GG修改器 導出內存? 看看 對應 文件的 地址的映射 和 路徑?
有人 會問 這個 怎么導出的发魄??
內存 管理頁面 點導出 內存?
結束地址 隨便 輸入?
保存即可?
(GG修改器 是個 神器 ,可以 用來 dex脫殼? So 還原 俩垃,Dll提取等 直接操作內存? 感興趣可以 學學? )
將路徑 改為 絕對路徑?
直接 dlopen打開?
拿到 句柄 以后 直接進行 用dlsym 拿到 對應函數(shù)地址 用 InlineHook 進行 掛鉤??
還是以loadbuffer函數(shù) 為 目標 函數(shù) dump lua文件?
在?my_luaL_loadbuffer 進行保存?
保存成功?
上面的 只是一個 demo 一個Hook的 模板?
Xposed 模塊 可以用 這種方式 進行 so層的 Hook和 注入?
具體代碼 上傳到?
https://github.com/w296488320/ArtXposedNativeHook
喜歡的話可以點個關注哦 励幼,
如果對 逆向,脫殼口柳,新技術 感興趣的 同學 可以加 我Q群 歡迎各位能人志士 一起討論
歡迎加入故事苹粟,群聊號碼:773642813?
---------------------------------------------------------------------------------------------------------------------
喜歡逆向 ,有問題需要求助的 可以 加下 小密圈? 不懂得可以直接問我?
我正在「故事」和朋友們討論有趣的話題跃闹,你?起來吧嵌削?