2018年6月28日 星期四

Android Native Debugger - 1

由於Android的Dex (Dalvik Executable format)檔案很容易透過軟體逆向工程,反編譯回原始的Java程式碼,對於一些惡意程式,會利用Native (Java Native Interface)的程式碼在裡面對數據加解密,或直接在這裡運行主要的程式碼,因此在Java程式碼,會找不到運行關鍵的程式碼,達到程式碼的隱密性,如果要分析真正惡意程式碼,就需要Debugger Native (副檔名是 .so)的程式碼,並了解內部的運作。

準備工具:

1. IDA Pro v6.6 以上

2. Android 模擬器 CPU armeabi-v7a (可使用Android Studio內建的)

一、Android Native Debugger環境設置
  • 從路徑C:\Program Files\IDA 7.0\dbgsrv 獲取android_server (這是CPU armeabi-v7a 的環境所使用的)
         
  • 開啟Android模擬器後再Android裡面創建資料夾 - adb shell mkdir /data/tmp
  • 將android_server移至Android裡面 - adb push android_server /data/tmp
  • 讓android_server有執行的權限 - adb shell chmod 777 /data/tmp/android_server
  • 執行android_server – adb shell、cd /data/tmp/、./android_server
  • 設定port forward (讓電腦端的IDA Pro 能和Android端的android_server通訊) - adb forward tcp:23946 tcp:23946
二、IDA Pro環境設置

  • 開啟IDA Pro 後,將 .so (由於Android Studio 在編譯時會有很多版本要確認是armeabi-v7a)檔案拖曳到IDA Pro視窗裡面



  • 在IDA Pro 上面的工具列選擇Debugger -> Select Debugger -> Remote ARM Linux/Android debugger

        

  • 設置Remote Debugger的連線,Debugger ->Process options,在Hostname填入localhost

        

  • 執行APP

       

  • Debugger APP – 在IDA Pro 工具列選擇Debugger -> Attach to process,然後再尋找要Debugger的APP

        

  • Debugger warning – 會跳出一些警告,都是詢問 .so檔是否與Android裡的 .so 是否一樣,都選擇Same就可以了

        

到這邊都已經配置完成,可以專心Debugger Native的程式碼,不過這裡還會遇到一些問題,就是分析不到 .so 的初始化程式碼,然而只能了解APP執行後觸發到Native的程式碼,並分析他的事件,那如果Native的初始化程式裡面有些會對一些Dex加密、解密的運作,就不能破解它的演算了。

下個章節就會對APP還未執行就中斷到Native的程式起始位址。