2018年5月24日 星期四

Android Smalidea Debugger

在分析Android apk時,常常都是使用靜態分析(反編譯成Java的語法,不執行程式),不過現在大部分的apk內部程式碼都會被混淆,很多的Class Name、Method Name、成員和字串都被修改成無意義的名稱,使得分析上的困難。

使用動態分析可以在想要了解的區塊設置中斷,然後觀察變數的訊息和回傳值,再分析APP時,就能事半功倍。

準備工具:

1. Android Studio:https://developer.android.com/studio/

2. Android 模擬器 (可使用Android Studio內建的)

3. apktool:https://ibotpeaches.github.io/Apktool/install/

4. smalidea:https://github.com/JesusFreke/smali/wiki/smalidea

一、反編譯apk

使用apktool工具,將apk檔案反編譯成smali (Android的組合語言)的程式語言,apktool.bat d Calcularor.apk –o 2/Calculator。



可以從輸出的資料夾底下2/Calculator可以看到smali的資料夾,裡面就是存放Calculator.apk的全部smali程式碼,可以分析;也可以任意修改再封裝回apk。


二、開啟Android Studio 載入程式碼

File -> New -> Import Project,選取剛剛反編譯完的檔案夾。



選擇Create project from existing sources,之後就一直Next就可以完成匯入了。



三、安裝smalidea plugin

File -> Setting -> Plugins,選擇Install plugin from disk。



然後將下載完的smalidea-0.05.zip安裝到Android Studio。



安裝smalidea成功後,在已安裝Plugins底下,會有Smalidea的名稱。




四、設定Android遠端Debugger環境

首先在程式碼中設定中斷,在運行Debugger才會被斷下,可以觀察變數的狀態。



在Android Studio上面的工具列點選Run -> Debugger



然後再選擇Edit Configurations…



在左上角會看到 + 的圖示,左鍵選擇它,在下面會看到Remote。



選擇Remote後,會跳出配置Remote Debugger的視窗,可以修改Name和Port等等資訊,不過要記得Port的號碼,因為後續要在Android模擬器裡面導向Port給要Debugger的App。

完成配置後,先左鍵點擊Apply,還不要選擇Debug,因為還沒有配置Android模擬器的Debugger。



五、設定模擬器Debugger App

執行adb shell am start –D –S –W package/android:name,然後等個10秒左右,會出現Complete。



在模擬器裡面會看到Waiting For Debugger。



然後使用ps指令查看APP的ProcessID,再使用adb forward tcp:8800 jdwp:5259,8800是剛剛在配置Android Remote Debugger的Port號。




六、Android Remote Debugger

都設定完之後,可以點擊Debug了。




然後在Android模擬器可以看到APP成功被執行,然後再點選APP的Button就會被中斷,從底下的變數可以看出,是按下Button “9”的訊息。