1. 程式人生 > 其它 >Android IDA so檔案分析、動態除錯-xctf-so easy

Android IDA so檔案分析、動態除錯-xctf-so easy

 

無反除錯步驟:

 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除錯相似。