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