【Android 逆向】函数拦截实例 ( 函数拦截流程 | ① 定位动态库及函数位置 )
生活随笔
收集整理的這篇文章主要介紹了
【Android 逆向】函数拦截实例 ( 函数拦截流程 | ① 定位动态库及函数位置 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、函數攔截流程
- 二、定位動態庫及函數位置
一、函數攔截流程
函數攔截流程 :
- 定位動態庫及函數位置 : 獲取該動態庫在內存中的位置 , 以便于 查找函數位置 ;
- 插樁 : 在函數的入口處插樁 , 這個 " 樁 " 指的是 " 跳轉指令 " ;
- 刷新 CPU 高速緩存 : 執行 cache_flush 系統調用函數 刷新 CPU 的高速緩存 ; 該步驟 只在 ARM 架構的 CPU 中執行 , x86 架構的 CPU 不需要刷新緩存 ;
- 處理攔截函數 : 執行函數時 , 執行到插入的 " 樁 " , 即跳轉指令 , 跳轉到自定義的函數中 , 執行完畢后 , 又跳轉回原函數中繼續執行原函數 ;
- 返回特定結果 : 將想要返回的結果返回 ;
二、定位動態庫及函數位置
攔截 222 個函數 ,
- gettimeofday : 獲取時間 , 單位 秒 ; struct timeval*tv 參數保存獲取時間結果的結構體 ,struct timezone *tz 參數用于保存時區結果 ;
- clock_gettime : 獲取時間 , 單位 微秒 ; 計算 精度 和 納秒 ;
Hook 環境描述 : 使用 tool 工具 向 被調試進程 注入 libbridge.so 動態庫 , 然后執行該動態庫的 load 方法 , 將libnative.so 動態庫注入到遠程進程中 , Hook 操作就是在 libnative.so 動態庫中執行的 ;
注意 : libnative.so 動態庫 是運行在遠程進程中 ;
執行 C/C++ 程序 Hook 時 , 先定位函數在內存中的地址 , 由于當前執行的 libnative.so 動態庫 代碼已經注入到了遠程進程中 , 因此 libnative.so 動態庫執行在遠程被調試的進程 , 可以直接通過 gettimeofday 和 clock_gettime 函數指針 , 拿到該函數的地址 ;
函數名 就是 函數指針 , 也就是 函數在內存中的地址 ;
總結
以上是生活随笔為你收集整理的【Android 逆向】函数拦截实例 ( 函数拦截流程 | ① 定位动态库及函数位置 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 逆向】函数拦截 ( A
- 下一篇: 【错误记录】Visual Studio