【Android 逆向】Android 进程注入工具开发 ( SO 进程注入环境及 root 权限获取 | 进程注入时序分析 )
文章目錄
- 一、SO 進(jìn)程注入環(huán)境及 root 權(quán)限獲取
- 二、進(jìn)程注入時(shí)序分析
一、SO 進(jìn)程注入環(huán)境及 root 權(quán)限獲取
SO 注入的前提必須有 root 權(quán)限 , 有了 root 權(quán)限后 , 才能調(diào)用 ptrace 相關(guān)函數(shù) ;
SO 注入環(huán)境有兩種情況 , Android 模擬器 或 真實(shí)手機(jī) ;
這里特別推薦使用 雷電模擬器 進(jìn)行逆向操作 , 在真機(jī)上會(huì)出現(xiàn)各種問(wèn)題 ;
使用 Android 模擬器 , 如 雷電模擬器 , 使用 ld 工具查看日志 , 查看日志命令為 :
ld.exe logcat上述命令需要進(jìn)入雷電模擬器安裝目錄執(zhí)行 , ld.exe 在雷電模擬器安裝目錄的根目錄中 ;
如果使用 Android 真機(jī) , 則直接使用 adb logcat 命令查看日志即可 ;
二、進(jìn)程注入時(shí)序分析
調(diào)試程序 調(diào)試 目標(biāo)進(jìn)程 ;
在有 root 權(quán)限的前提下 , 調(diào)試程序 首先 調(diào)用 ptrace 函數(shù) attach 目標(biāo)進(jìn)程 , ptrace 函數(shù)調(diào)用必須有 root 權(quán)限 , 否則會(huì)崩潰 ;
調(diào)試程序 讀取 目標(biāo)進(jìn)程 寄存器信息 , 將寄存器值保存下來(lái) ;
遠(yuǎn)程調(diào)用 , 加載 libbridge.so , 在 【Android 逆向】修改運(yùn)行中的 Android 進(jìn)程的內(nèi)存數(shù)據(jù) ( Android 系統(tǒng)中調(diào)試器進(jìn)程內(nèi)存流程 | 編譯內(nèi)存調(diào)試動(dòng)態(tài)庫(kù)以及調(diào)試程序 ) 博客中 , 編譯過(guò)該動(dòng)態(tài)庫(kù) , 調(diào)試目標(biāo)進(jìn)程時(shí) , 需要將該動(dòng)態(tài)庫(kù)注入 目標(biāo)進(jìn)程 ;
然后調(diào)用 libbridge.so 動(dòng)態(tài)庫(kù)中的 load 方法加載真正的工作 so 動(dòng)態(tài)庫(kù) libnative.so ;
調(diào)用 libnative.so 的 invoke 方法 , 將返回值返回給 libbridge.so , 然后通過(guò) libbridge.so 返回給 調(diào)試程序 ;
libbridge.so 的作用僅用于 調(diào)試程序 和 目標(biāo)進(jìn)程 之間的通信 ;
調(diào)試完畢后 , 遠(yuǎn)程調(diào)用卸載 libbridge.so ;
最后恢復(fù) 目標(biāo)進(jìn)程 執(zhí)行 ;
遠(yuǎn)程調(diào)用流程 :
- 計(jì)算函數(shù)地址 : 通過(guò)計(jì)算 , 獲取遠(yuǎn)程調(diào)用函數(shù)的內(nèi)存地址 ;
- 設(shè)置 EIP 寄存器 : 將 EIP 寄存器指向遠(yuǎn)程調(diào)用函數(shù) ;
- 申請(qǐng)棧內(nèi)存地址 : 使用 mmap 申請(qǐng)內(nèi)存 , 并將遠(yuǎn)程調(diào)用函數(shù)參數(shù)設(shè)置到該內(nèi)存中 ;
- 設(shè)置 ESP 棧內(nèi)存地址 : 將 ESP 寄存器指向申請(qǐng)的內(nèi)存中 ;
- 收回控制權(quán) : 執(zhí)行完畢后 , 返回到 0 地址 , 令目標(biāo)進(jìn)程崩潰 , 調(diào)試進(jìn)程收回控制權(quán) ;
參考之前涉及到 SO 注入的流程 :
- 【Android 逆向】Android 進(jìn)程代碼注入原理 ( 進(jìn)程注入原理 | 遠(yuǎn)程調(diào)用流程 | 獲取函數(shù)地址 | 設(shè)置 IP 寄存器 | mmap 申請(qǐng)內(nèi)存 | 設(shè)置 SP 寄存器 )
- 【Android 逆向】修改運(yùn)行中的 Android 進(jìn)程的內(nèi)存數(shù)據(jù) ( Android 系統(tǒng)中調(diào)試器進(jìn)程內(nèi)存流程 | 編譯內(nèi)存調(diào)試動(dòng)態(tài)庫(kù)以及調(diào)試程序 )
- 【Android 逆向】Android 進(jìn)程注入工具開(kāi)發(fā) ( 遠(yuǎn)程調(diào)用總結(jié) | 遠(yuǎn)程調(diào)用注意事項(xiàng) )
總結(jié)
以上是生活随笔為你收集整理的【Android 逆向】Android 进程注入工具开发 ( SO 进程注入环境及 root 权限获取 | 进程注入时序分析 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【开发环境】StarUML 工具 ( 下
- 下一篇: 【错误记录】Visual Studio