IDA動態調試Android的so文件

本文是記錄自己學習IDA的一些總結與歸納,並將其體現成具體功能,便於複習與交流,有不對之處望大家包容並指出,歡迎大家留言收藏

環境

  • 小米5 - root - android7.0
  • IDA pro 7.0
  • so包是32位
  • android運行demo並進入主界面這時候不會加載so包,點按鈕運行加載so包並執行native函數
  • 如果出現其他問題可以參考IDA常見問題
  • 附加GitHub地址下載apk

配置

  1. 複製IDA 安裝目錄下dbgsrv 文件裏面的android_server文件到 手機內存儲的 /data/local/tmp 目錄下
  2. 控制檯輸入 adb shell su 命令獲取管理員權限
  3. 控制檯輸入 setenforce 0 命令 關閉保護(每次關機後開機都要重新設置)
  4. 控制檯輸入:cd /data/local/tmp 進入android_server目錄 ,輸入:chmod 777 android_server命令獲取執行權限

開始

  1. 控制檯輸入 adb shell su 命令獲取管理員權限

  2. 輸入: ./data/local/tmp/android_server啓動android_server

  3. 新開一個命令窗口 不用獲取管理員權限

  4. 直接輸入 adb forward tcp:23946 tcp:23946 命令 端口轉發

  5. adb shell am start -D -n 包名/activity路徑 啓動應用,例如:adb shell am start -D -n com.example.androidida/com.example.androidida.MainActivity

  6. 打開IDA -> 選擇so文件 -> 彈框全部確定
    在這裏插入圖片描述

  7. 點擊IDA的菜單欄的Debugger菜單中的Select debugger項,按照如下彈框選擇
    在這裏插入圖片描述

  8. 點擊IDA的菜單欄的Debugger菜單中的Debugger options項,按照如下彈框選擇
    在這裏插入圖片描述

  9. 點擊IDA的菜單欄的Debugger菜單中的Process options項,按照如下彈框選擇,路徑按照自己的填
    在這裏插入圖片描述

  10. 點擊IDA的菜單欄的Debugger菜單中的Attach to process項,按照如下彈框選擇自己的包名
    在這裏插入圖片描述

  11. 點擊IDA 的開始運行按鈕(F9)。如果有反調試的話,一定要先下斷點,不然一運行就崩潰了,這裏運行自己的就沒事
    在這裏插入圖片描述

  12. 打開Android Device Minitor , 查看端口,這裏是8612
    在這裏插入圖片描述

  13. 控制檯輸入:jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8612 注意:我這裏是8612,自己的是多少就填多少, 輸完這時候Android Device Minitor的小瓢蟲會變成綠色,並且IDA程序會開始運行

  14. IDA一直按運行按鈕(F9)直到加載完沒法按運行按鈕之後 , 點擊MainActiivty的按鈕,這時候加載so包準備調用c方法,並且會自動斷住 , 這裏要慢點按運行按鈕 , 每次運行查看so包是否加載了 (control + s鍵可以查看已經加載的so包)
    - 注意:(如果有彈框,有ok按ok , 有yes按yes , 有same 按 same)

在這裏插入圖片描述在這裏插入圖片描述

  1. 加載so包之後, 在general registers查看so包的函數(ctrl +F可以搜索) , 雙擊so包
    在這裏插入圖片描述

  2. 搜索自己定義的函數名稱,雙擊函數名
    在這裏插入圖片描述

  3. 雙擊函數名後,在Debug View試圖會定位到函數位置,按F2 可以給選中行下斷點,如下:
    在這裏插入圖片描述

  4. 按F9繼續運行,一直到指示線條變色,這時候說明已經運行到斷點的位置了(提示: F8運行下一個斷點)
    在這裏插入圖片描述

總結

本次調試是結合靜態與動態調試,優點:只要加載出so包,就能查找到指定函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章