標籤:個數 debug forward 連接埠號碼 選中 pat ddr 最好 安全性原則
安卓ida動態調試總結
不出問題的理想步驟(帶反調試的版本)
需要的軟體:
- ida7.0/6.8
- ddms(或者sdk/tools/monitor.bat)
- root真機一部(因為android_server是基於arm架構,而大多數模擬器基於x86,所以最好是真機)或者AVD模擬器
- 待調試apk(test.apk,包名:)
- adb
正確步驟:
- 新開一個cmd
- adb push android_server /data/local/tmp(android_server在ida的dbgsrv目錄下)
- adb shell
- su
- cd /data/local/tmp
- chmod 777 android_server
- ./android_server
- 新開一個cmd
- adb install test.apk
- adb forward tcp:23946 tcp:23946
- adb shell am start -D -n 包名/類名(程式包名可以在AndroidMainfest檔案中找到,類名我是用androidkiller的入口函數;這是以啟動模式啟動)
開啟IDA,Debugger->attach->android_server ,
先Debug options設定:
然後hostname設定
然後點擊ok,彈出進程列表
Search apk包名,然後記住進程ID,然後重要的一步,在Debug option裡面:
還是選中那三個選項。
4.cmd
- adb forward tcp:8899 jdwp:11514 (11514是進程的id)
- jdb -connect com.sun.jdi.SocketAttach:port=8657,hostname=127.0.0.1
jdb的port參考的是monitor的相關進程的連接埠號碼:
等前面的蜘蛛變綠(不用jdb,前面蜘蛛為紅色),然後就可以F9運行了。
下面說說遇到的問題:
1.首先保證apk是否支援debuggble模式,在AndroidMainfest檔案裡,application結點android:debuggable="true",如果不是,可修改後二次打包
如:
2.原手機android_server已經在運行問題:
在執行./android_server時彈出bind: Address already in use
解決方案:
在adb shell 裡:ps | grep android_server
然後他會輸出進程ID,第一個數即為進程id:
如輸出:root 12212 13423 23213 後省略
然後執行kill -s 9 12212
3.IDA attach報錯
(1)incompatible debugging serer:address size is 4 bytes
錯誤原因:是android_server是32位的,而ida是64位的。
解決方案:啟動32位ida
(2)Bogus or irresponsive remote server
錯誤原因:SELinex安全性原則限制
解決方案:
- adb shell
- su
- setenforce 0
安卓IDA動態調試總結