安卓IDA動態調試總結


安卓ida動態調試總結

不出問題的理想步驟(帶反調試的版本)

需要的軟件:

  • ida7.0/6.8
  • ddms(或者sdk/tools/monitor.bat)
  • root真機一部(因為android_server是基於arm架構,而大多數模擬器基於x86,所以最好是真機)或者AVD模擬器
  • 待調試apk(test.apk,包名:)
  • adb

正確步驟:

  1. 新開一個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
  1. 新開一個cmd
  • adb install test.apk
  • adb forward tcp:23946 tcp:23946
  • adb shell am start -D -n 包名/類名(程序包名可以在AndroidMainfest文件中找到,類名我是用androidkiller的入口函數;這是以啟動模式啟動)
  1. 打開IDA,Debugger->attach->android_server ,

    1535516403245

先Debug options設置:

1535516474765

然后hostname設置如圖:

1535516510798

然后點擊ok,彈出進程列表

1535516577671

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的相關進程的端口號:

1535518215474

等前面的蜘蛛變綠(不用jdb,前面蜘蛛為紅色),然后就可以F9運行了。

下面說說遇到的問題:

1.首先保證apk是否支持debuggble模式,在AndroidMainfest文件里,application結點android:debuggable="true",如果不是,可修改后二次打包

如:

1535517617383

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM