在分析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”的訊息。