【轉】Android IDA 動態調試最完善攻略,跨過各類坑

前提條件和運行環境必定要寫清楚,否則會有不少坑,坑死人。android

(1)IDA 是最新的7.0版本  (2) JDB 使用Java安裝目錄下的 (3)系統是win10 使用命令窗口時有很大的差異shell

(4)手機是4.4 如下系統    app

1.手機要有Root權限tcp

2.複製IDA 安裝目錄下dbgsrv 文件裏面的android_server文件到   手機內存儲的 /data/local/tmp 目錄下函數

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

4.cd /data/local/tmp 進入android_server目錄 ,輸入chmod 777 android_server命令獲取執行權限debug

5.  ./android_server啓動android_server調試

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

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

7.adb shell am start -D -n  包名/activity路徑   啓動應用

adb shell am start -D -n com.cmxxzwy.mz/com.e4a.runtime.android.mainActivity

8.打開IDA 

9.菜單 debugger->attach->Remote ARM Linux/android debugger

10.debug options必定要選

 

 

 

11.hostname處輸入127.0.0.1

12.點擊ok後,在彈出的進程選擇框 選擇要調試的com.cmxxzwy.mz 進程

13.手機上的App開始運行後必定要點擊IDA 的開始運行按鈕。若是有反調試的話,必定要先下斷點,否則一運行就崩潰了,一切從新來過。

.

14.打開DDMS,將Eclipse切換到DDMS界面,下一步要用

 

15.查看  要調試的進程,發現8700端口被佔用。可使用8677端口

 jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700要改成

 jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8677

用jdb將app恢復執行。

16.好了能夠開始調試了 F7進入函數,F8單步調試,F9跳到下一個斷點,F2下斷點,G調到函數地址

 

17.以某數字加固爲例 給libc.so 的fopen函數起始位置下斷點。

而後一路F9,直到出現

 

而後開始F8,一直F8執行,知道出現以下提示框

 

才真正進入咱們要調試的so庫

18.動態調試的時候面對的都是Arm彙編,理解能力要跟的上調試速度,這有點難。怎麼辦?

那就是動靜態結合調試。咱們來看動態調試窗口

1爲這句代碼的動態內存地址, 2爲該so文件的動態內存基地址  3爲內存段的大小

那麼咱們知道,靜態調試窗口顯示的都是代碼的相對偏移地址,因此咱們用  1動態內存地址  - 2內存基地址 = 靜態相對偏移地址

因此 F24B4就是靜態代碼的偏移地址。

因此咱們打開靜態調試窗口就能夠看到

 

這樣,動態和靜態的代碼就對上了,用靜態的代碼來記錄動態調試的位置信息,就不怕調試過程當中斷帶來的麻煩。並且使用F5來輔助理解代碼也是棒棒噠

19.動態調試過程每每反反覆覆,命令有時候懶得從新輸入。快捷鍵 ctrl +c結束當前命令程序,按上下鍵輸入以前輸過的命令。

20.有時候,跳轉到指定地址的時候全是DCB 數據,這怎麼辦

 

這個時候能夠按 C 鍵識別爲代碼,或者按 P 鍵識別爲函數

21.咱們動態調試常常就是爲了看內存,那麼怎麼看內存。很簡單,執行下圖前三步,就能在4步的視圖中查看內存

 

from:https://blog.csdn.net/marketandtechnology/article/details/82116074

相關文章
相關標籤/搜索