前提條件和運(yùn)行環(huán)境一定要寫清楚,不然會(huì)有很多坑,坑死人。
(1)IDA 是最新的7.0版本 (2) JDB 使用Java安裝目錄下的 (3)系統(tǒng)是win10 使用命令窗口時(shí)有很大的差別
(4)手機(jī)是4.4 以下系統(tǒng)
1.手機(jī)要有Root權(quán)限
2.復(fù)制IDA 安裝目錄下dbgsrv 文件里面的android_server文件到 手機(jī)內(nèi)存儲(chǔ)的 /data/local/tmp 目錄下
3.控制臺(tái)輸入 adb shell su 命令獲取管理員權(quán)限
4.cd /data/local/tmp 進(jìn)入android_server目錄 ,輸入chmod 777 android_server命令獲取執(zhí)行權(quán)限
5. ./android_server啟動(dòng)android_server
6.新開一個(gè)命令窗口 不用獲取管理員權(quán)限
直接輸入 adb forward tcp:23946 tcp:23946 命令 端口轉(zhuǎn)發(fā)
7.adb shell am start -D -n 包名/activity路徑 啟動(dòng)應(yīng)用
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.點(diǎn)擊ok后,在彈出的進(jìn)程選擇框 選擇要調(diào)試的com.cmxxzwy.mz 進(jìn)程
13.手機(jī)上的App開始運(yùn)行后一定要點(diǎn)擊IDA 的開始運(yùn)行按鈕。如果有反調(diào)試的話,一定要先下斷點(diǎn),不然一運(yùn)行就崩潰了,一切重新來過。
.
14.打開DDMS,將Eclipse切換到DDMS界面,下一步要用
15.查看 要調(diào)試的進(jìn)程,發(fā)現(xiàn)8700端口被占用??梢允褂?677端口
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恢復(fù)執(zhí)行。
16.好了可以開始調(diào)試了 F7進(jìn)入函數(shù),F(xiàn)8單步調(diào)試,F(xiàn)9跳到下一個(gè)斷點(diǎn),F(xiàn)2下斷點(diǎn),G調(diào)到函數(shù)地址
17.以某數(shù)字加固為例 給libc.so 的fopen函數(shù)起始位置下斷點(diǎn)。
然后一路F9,直到出現(xiàn)
然后開始F8,一直F8執(zhí)行,知道出現(xiàn)如下提示框
才真正進(jìn)入我們要調(diào)試的so庫
18.動(dòng)態(tài)調(diào)試的時(shí)候面對(duì)的都是Arm匯編,理解能力要跟的上調(diào)試速度,這有點(diǎn)難。怎么辦?
那就是動(dòng)靜態(tài)結(jié)合調(diào)試。我們來看動(dòng)態(tài)調(diào)試窗口
1為這句代碼的動(dòng)態(tài)內(nèi)存地址, 2為該so文件的動(dòng)態(tài)內(nèi)存基地址 3為內(nèi)存段的大小那么我們知道,靜態(tài)調(diào)試窗口顯示的都是代碼的相對(duì)偏移地址,所以我們用 1動(dòng)態(tài)內(nèi)存地址 - 2內(nèi)存基地址 = 靜態(tài)相對(duì)偏移地址
所以
F24B4就是靜態(tài)代碼的偏移地址。所以我們打開靜態(tài)調(diào)試窗口就可以看到
這樣,動(dòng)態(tài)和靜態(tài)的代碼就對(duì)上了,用靜態(tài)的代碼來記錄動(dòng)態(tài)調(diào)試的位置信息,就不怕調(diào)試過程中斷帶來的麻煩。而且使用F5來輔助理解代碼也是棒棒噠
19.動(dòng)態(tài)調(diào)試過程往往反反復(fù)復(fù),命令有時(shí)候懶得重新輸入??旖萱I ctrl +c結(jié)束當(dāng)前命令程序,按上下鍵輸入之前輸過的命令。
20.有時(shí)候,跳轉(zhuǎn)到指定地址的時(shí)候全是DCB 數(shù)據(jù),這怎么辦
這個(gè)時(shí)候可以按 C 鍵識(shí)別為代碼,或者按 P 鍵識(shí)別為函數(shù)
21.我們動(dòng)態(tài)調(diào)試經(jīng)常就是為了看內(nèi)存,那么怎么看內(nèi)存。很簡(jiǎn)單,執(zhí)行下圖前三步,就能在4步的視圖中查看內(nèi)存
聯(lián)系客服