本文是記錄自己學習IDA的一些總結與歸納,並將其體現成具體功能,便於複習與交流,有不對之處望大家包容並指出,歡迎大家留言收藏
環境
- 小米5 - root - android7.0
- IDA pro 7.0
- so包是32位
- android運行demo並進入主界面這時候不會加載so包,點按鈕運行加載so包並執行native函數
- 如果出現其他問題可以參考IDA常見問題
- 附加GitHub地址下載apk
配置
- 複製IDA 安裝目錄下dbgsrv 文件裏面的android_server文件到 手機內存儲的 /data/local/tmp 目錄下
- 控制檯輸入
adb shell su
命令獲取管理員權限 - 控制檯輸入
setenforce 0
命令 關閉保護(每次關機後開機都要重新設置) - 控制檯輸入:
cd /data/local/tmp
進入android_server目錄 ,輸入:chmod 777 android_server
命令獲取執行權限
開始
-
控制檯輸入
adb shell su
命令獲取管理員權限 -
輸入:
./data/local/tmp/android_server
啓動android_server -
新開一個命令窗口 不用獲取管理員權限
-
直接輸入
adb forward tcp:23946 tcp:23946
命令 端口轉發 -
adb shell am start -D -n 包名/activity路徑 啓動應用,例如:
adb shell am start -D -n com.example.androidida/com.example.androidida.MainActivity
-
打開IDA -> 選擇so文件 -> 彈框全部確定
-
點擊IDA的菜單欄的Debugger菜單中的Select debugger項,按照如下彈框選擇
-
點擊IDA的菜單欄的Debugger菜單中的Debugger options項,按照如下彈框選擇
-
點擊IDA的菜單欄的Debugger菜單中的Process options項,按照如下彈框選擇,路徑按照自己的填
-
點擊IDA的菜單欄的Debugger菜單中的Attach to process項,按照如下彈框選擇自己的包名
-
點擊IDA 的開始運行按鈕(F9)。如果有反調試的話,一定要先下斷點,不然一運行就崩潰了,這裏運行自己的就沒事
-
打開Android Device Minitor , 查看端口,這裏是8612
-
控制檯輸入:
jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8612
注意:我這裏是8612,自己的是多少就填多少, 輸完這時候Android Device Minitor的小瓢蟲會變成綠色,並且IDA程序會開始運行 -
IDA一直按運行按鈕(F9)直到加載完沒法按運行按鈕之後 , 點擊MainActiivty的按鈕,這時候加載so包準備調用c方法,並且會自動斷住 , 這裏要慢點按運行按鈕 , 每次運行查看so包是否加載了 (control + s鍵可以查看已經加載的so包)
- 注意:(如果有彈框,有ok按ok , 有yes按yes , 有same 按 same)
-
加載so包之後, 在general registers查看so包的函數(ctrl +F可以搜索) , 雙擊so包
-
搜索自己定義的函數名稱,雙擊函數名
-
雙擊函數名後,在Debug View試圖會定位到函數位置,按F2 可以給選中行下斷點,如下:
-
按F9繼續運行,一直到指示線條變色,這時候說明已經運行到斷點的位置了(提示: F8運行下一個斷點)
總結
本次調試是結合靜態與動態調試,優點:只要加載出so包,就能查找到指定函數