日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android IDA 动态调试最完善攻略,跨过各种坑

發(fā)布時(shí)間:2024/7/23 Android 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android IDA 动态调试最完善攻略,跨过各种坑 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

From:https://www.pianshen.com/article/3409449384/

IDA 靜態(tài)分析動(dòng)態(tài)分析:https://zhuanlan.zhihu.com/p/38983223

新手向總結(jié):IDA 動(dòng)態(tài)調(diào)試 So 的一些坑:https://zhuanlan.zhihu.com/p/145383282

Android 逆向之旅 --- 動(dòng)態(tài)方式破解 apk 進(jìn)階篇 ( IDA 調(diào)試 so 源碼 ):https://zhuanlan.zhihu.com/p/23321571

IDA 動(dòng)態(tài)調(diào)試 逆向 so 庫:https://zhuanlan.zhihu.com/p/40174083

Android 未root 環(huán)境下使用 IDA 調(diào)試https://www.pianshen.com/article/6759779793/

?

IDA 動(dòng)態(tài)調(diào)試 android 的 so 文件 (二):https://www.pianshen.com/article/29271382106/

?

*********************?前提條件 運(yùn)行環(huán)境 一定要寫清楚,不然會(huì)有很多坑,坑死人。?*********************

雷電、藍(lán)疊的 cpu 是 x86 的,ida不能正常調(diào)試,需要用 Android 編譯器自帶的創(chuàng)建模擬器。
ida模擬器動(dòng)態(tài)調(diào)試,當(dāng)執(zhí)行到斷點(diǎn)時(shí)會(huì)出現(xiàn)錯(cuò)誤,通過百度知道是因?yàn)槔纂?、藍(lán)疊模擬器的cpu都是x86的架構(gòu),所以用來調(diào)試就會(huì)出錯(cuò),通過觀看視頻發(fā)現(xiàn)教程中用的是Android自帶的模擬器,所以這里也是創(chuàng)建一個(gè)模擬器。
用 Android studio 創(chuàng)建模擬器會(huì)出現(xiàn)下面的選項(xiàng),選擇 Other Images 選項(xiàng),這時(shí)顯示出 armeabi-v7a,選擇這個(gè)創(chuàng)建模擬器,就是 arm 的模擬器不是 x86,能正常調(diào)試。

?

動(dòng)態(tài)啟動(dòng)調(diào)試IDA 調(diào)試 Android 方法及簡單的脫殼實(shí)現(xiàn)https://www.pianshen.com/article/12891271497/

Android Killer 反編譯 x.apk,取出 classes.dex Dalvik文件,記錄包名和啟動(dòng)類名。

修改 AndroidManifest.xml 文件,在 <application> 標(biāo)簽里添加屬性 android:debuggable="true" ?這一步越早修改越好,防止忘記改??梢圆榭匆幌翧ndroidManifest.xml 他們的對應(yīng)關(guān)系,加深理解。

用 AndroidKiller 重新編譯修改過的 x_fix.apk。
adb install x_fix.apk? 安裝到手機(jī)
將 IDA 安裝目錄 dbgsrv 目錄下的 android_server 文件拷入手機(jī)
adb push dbgsrv\android_server /data/data/android_server
接著執(zhí)行
? ? ? ? adb shell chmod 655 /data/data/android_server 添加可執(zhí)行權(quán)限
? ? ? ? adb shell /data/data/android_server?? ? ? ? ? 將其運(yùn)行起來

?

步驟:

(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 目錄下

adb push dbgsrv\android_server /data/data/android_server

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,下一步要用

15. 查看? 要調(diào)試的進(jìn)程,發(fā)現(xiàn) 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 恢復(fù)執(zhí)行。

最后在命令行中輸入: jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700 這一步的作用是使程序恢復(fù)運(yùn)行。(注意這時(shí)候如果ida里還沒有點(diǎn)擊運(yùn)行,程序是不會(huì)真的繼續(xù)運(yùn)行的) 這時(shí)候就可以正常地在IDA里下斷調(diào)試了。

?

為了使用 jdb 恢復(fù)程序的運(yùn)行,我們需要:

  • APK 的 AndroidManifest.xml 中 debuggable 為 true
  • 或是 根目錄下ro.debuggable的值為1,如下圖所示:

參考:IDA調(diào)試 :https://www.pianshen.com/article/1916803437/

C:\>adb devices List of devices attached 040ACGD7SAE2 deviceC:\>adb shell shell@mx2:/ $ su root@mx2:/ # exit shell@mx2:/ $ exitC:\>adb shell su root@mx2:/ # cat default.prop | grep debug cat default.prop | grep debug ro.debuggable=0 root@mx2:/ # getprop ro.debuggable getprop ro.debuggable 0 root@mx2:/ #

?

16. 好了可以開始調(diào)試了 F7進(jìn)入函數(shù),F8單步調(diào)試,F9跳到下一個(gè)斷點(diǎn),F2下斷點(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í)候面對的都是 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)試窗口顯示的都是代碼的相對偏移地址,所以我們用? 1動(dòng)態(tài)內(nèi)存地址? - 2內(nèi)存基地址 = 靜態(tài)相對偏移地址

所以?F24B4 就是靜態(tài)代碼的偏移地址。所以我們打開靜態(tài)調(diào)試窗口就可以看到

這樣,動(dòng)態(tài)和靜態(tài)的代碼就對上了,用靜態(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)存。很簡單,執(zhí)行下圖前三步,就能在4步的視圖中查看內(nèi)存

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的Android IDA 动态调试最完善攻略,跨过各种坑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。