[mobile]真機+IDA調試apk中的so

[mobile]真機+IDA調試apk中的so

很多mobile題目需要逆向分析apk中的so(尤其我們公司的比賽),所以這裏簡單總結一下調試apk中的so的方法。

材料:adb調試工具、root的真機一臺(模擬器無法調試so)、IDA

下載&安裝adb

adb是Android platform tools中的工具,可以去Androiddevtools下載:https://www.androiddevtools.cn/
在這裏插入圖片描述
下載完解壓出來:
在這裏插入圖片描述
在這裏插入圖片描述
裏面的這個就是adb,使用方法可以直接在這個目錄用命令號啓動:
在這裏插入圖片描述
也可以把它改名成adb.exe,之後和AdbWinApi.dll一起放在C:\Windows\system32目錄下:
在這裏插入圖片描述
然後就可以命令行直接啓動adb了:
在這裏插入圖片描述

準備調試

首先將apk安裝到手機上,然後手機usb連接電腦,插線的時候提示是否允許usb調試,選擇允許:

接下來在adb查看是否有設備連接: adb devices
在這裏插入圖片描述
可以看到設備已經連接,然後我們要用IDA調試so文件,所以需要把IDA的遠程調試server文件拷貝到手機中,使用adb 的push命令:

adb push .\android_server /data/local/tmp

接下來需要把手機的23946端口用adb forward命令轉發到本機的23946端口:

adb forward tcp:23946 tcp:23946

開始調試

使用adb shell命令可以開啓 一個手機的shell:
在這裏插入圖片描述
然後su到root,如果不su到root的話會發現一會IDA掛上去之後看不到可以掛的進程,這也是爲什麼要用root手機的原因:
在這裏插入圖片描述
然後在手機上運行我們需要調試的程序:

接下來在adb shell中cd 到剛剛傳了android_server的目錄/data/local/tmp 然後執行 android_server:
在這裏插入圖片描述
之後啓動IDA,選擇Debugger->attach->Remote ARM Linux/Android debugger:

debug options根據自己選擇設置一下,然後選擇自己要掛的進程:

在右側寄存器窗口下面可以看到modules窗口,裏面找到自己要調試的so:

雙擊之後可以查看so中的函數,選擇自己要調試的函數下斷點:
在這裏插入圖片描述
在這裏插入圖片描述
然後我這裏要在手機中輸入一些東西才能走到這:

成功斷住:
在這裏插入圖片描述
然後可以調試了。

用到的命令:

adb devices  //查看鏈接設備
adb push .\android_server /data/local/tmp //往手機拷貝東西
adb forward tcp:23946 tcp:23946 //端口轉發
adb shell //鏈接手機shell

補充:以調試模式啓動

上面介紹的方法是先在手機中運行要調試的程序,然後用IDA掛在上去,但有時候可能會有一點點問題(比如一些檢測是否被掛載的等等),這裏我的推薦還是找到程序中所有的反調試,然後patch掉,之後對apk進行重打包重簽名,然後安裝調試。

除此之外還有一種方法是讓apk直接以調試模式啓動,這種可以繞過一部分反調試,進入adb shell,用am命令以調試模式啓動程序:

am start -D -n  com.bin.MathGame/.MainActivity

在這裏插入圖片描述程序的名字可以啓動一下,然後用ps查看
在這裏插入圖片描述
之後手機上已經啓動了:

接下來再使用adb forward命令將這個進程的pid轉發到8700端口上:

adb forward tcp:8700 jdwp:{pid}

然後再使用jdb 的命令給進程一個啓動的信號:

jdb -connect “com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700”

在這裏插入圖片描述
然後用IDA掛載就可以正常調試了在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章