無反調試步驟:
1)adb push d:\android_server(IDA的dbgsrv目錄下) /data/local/tmp/android_server(這個目錄是可以隨便放的,server文件根據內核版本更換)。
2) adb shell
3) su(一定要有root權限)
4) cd /data/local/tmp
5) chmod 777 android_server (給android_server可執行權限)
./android_server對本地設備端口進行監聽
6)再開一個cmd:
adb forward tcp:23946 tcp:23946(端口轉發,調試手機上的某個進程要有協議支持通信)讓遠程調試端IDA可以連接到被調試端
7)使用IDA連接上轉發的端口,查看設備的所有進程,找到需要調試的進程。具體步驟方法為:在Debugger選項卡中選擇Attach,選擇android debugger,點擊Ok。
8)動靜結合方式(基地址+相對地址)確定函數地址進行調試。
1)啟動android_server
2)端口轉發adb forward tcp:23946 tcp:23946
3)adb shell am start -D -n 包名/類名;出現Debugger的等待狀態
(說明:以啟動模式啟動,是停在加載so文件之前,包名可以在androidmanifest文件中找到)
4)打開IDA,附加上對應的進程之后,設置IDA中的load so時機,即在debug options中設置;
5)運行命令:jdb -connect com.sun.jdi.SocketAttach:hostname=localhost, port=8700
6)點擊IDA運行按鈕,或者F9快捷鍵。
一、使用IDA對so文件進行分析

導出so文件,使用IDA打開。
在IDA中直接搜索該函數,只有一個結果,直接點進去看看。

可以看到通過一系列計算之后,得到的值需要為f72c5a36569418a20907b55be5bf95ad
通過對其算法進行分析,其計算過程是先將輸入值前半部分與后半部分調換,后將相鄰數值兩兩對換,得到flag:90705bb55efb59da7fc2a5636549812a

二、使用IDA對so文件進行調試
https://blog.csdn.net/u012195899/article/details/52780062
找到IDA中的dbgsrv文件夾下的android_server文件,根據內核版本,將這個文件使用adb命令上傳到手機/data/local/tmp目錄下
上傳過程中有時會出現 Read-only file system 提示,大概率是權限問題:
1、adb remount,這條命令的功能是重新裝載Android文件系統;
2、adb shell—su— mount -o rw,remount /system

給予權限777(chmod 777 文件名)后啟動傳入的腳本文件。
成功啟動后開啟端口轉發(固定端口23946)。
adb forward tcp:23946 tcp:23946
- 啟動后無法獲取模擬器IP, 啟動后提示 Address already in use(端口被占用)
- 通過查詢發現IDA,frida等,由於內核問題都無法使用雷電模擬器進行連接,故更換夜神模擬器
https://my.oschina.net/u/4940693/blog/4927341
使用夜神模擬器成功連接。

ctrl+f 搜索需要附加的包名
成功附加進入,可以動態分析so文件。

通過ctrl+s 可以打開當前加載的so文件目錄,通過搜索so文件名稱,找到需要的so文件。選擇帶有X標識的文件,進入即可跳轉至所需so文件內。


在靜態調試的IDA中找到函數的偏移地址,然后在動態調試的IDA加上so文件基址,跳轉至對應函數位置。
后續調試報錯,判斷還是內核問題,等待使用真機嘗試。

真機使用后還是一樣報錯,嘗試尋找原因。
更換android_server64文件,重啟設備后,成功連接設備。
通過基地+偏移地址找到目標函數。

出現提示 got unknown signal #33
重啟IDA后,繼續操作,成功斷在斷點處,未知原因。

F8單步調試,查看寄存器改變。(前面出現問題是因為鍵盤F8無法使用!!!!!)
后續調試與OD調試相似。
