如何反向工程 Android APK並尋找敏感性資訊?

如何反向工程 Android APK並尋找敏感性資訊?

這篇文章主要說明如何將一個Android的應用程式反組譯,讓我們可以進一步分析

這個Android App是否有讀取或是含有敏感性資訊。

透過這篇文章說明Android App反向工程的技巧與工具。

基本步驟

1. 透過APKtool 反組譯Android APK

2. 分析APKTool 所產生的檔案(特別是 YML, XML, Smali),並且尋找關鍵字 (電子信箱、帳號、密碼等)

3. 將步驟1與2自動化

如何下載與安裝 APKtool?

筆者建議這個套裝工具,Appie

可以執行於Windows/Linux,包含所有Android APK所需要用到的分析工具

http://sourceforge.net/projects/appiefiles/files/

Reverse Engineering APK簡介

一般的APK檔案,可以使用WinZip 或是一般的解壓縮工具開啟,

APK open by ZIP

APK檔案結構

使用APKtool 的工具,將APK的內容進行反組譯,

apktool   d   xxxx.apk

APKTool執行後,會得到下列的檔案結構

  • META-INF (APK 檔案的認證資訊)
    • MANIFEST.MF
    • CERT.RSA—The certificate of the application.
    • CERT.SF—The list of resources and SHA-1 digest of the corresponding lines in the Manifest.MF file.
  • lib: (每個不同處理器的編譯碼)
    • armeabi—compiled code for all ARM based processors only.
    • armeabi-v7a—compiled code for all ARMv7 and above based processors only.
    • x86—compiled code for x86 processors only.
    • mips—compiled code for MIPS processors only.
  • assets: 應用程式相關的資源檔案
  • AndroidManifest.xml
  • classes.dex:  Dalvik virtual machine的程式執行碼
  • resources.arsc : pre-compiled 的資源檔案.
  • res: 資源檔案
  • smali: 讓人比較好閱讀的反編譯程式碼

我們就可以針對輸出的檔案進行搜尋,看看是包含有敏感性的關鍵字。

例如:IP位址、電子郵件、帳號密碼等。

 

敏感性關鍵字搜尋

哪些關鍵字是我們要搜尋的呢?

IP位址,看看是否有異常的IP位址對外傳輸資訊,用regular expression 表示法如下

  • ip = re.compile(((?:\d{1,3}\.){3}\d{1,3}))

email,是否有異常的email信箱傳輸資訊,用regular expression 表示法如下

  • email=re.compile(([\w.]+)@([\w.]+))

其它關鍵字,例如帳號、密碼等關鍵字

  • pwlist,sql,dbconnect,dbname,username,pass,passwd,pwd,user,IMEI,connecTodb,dbname,server,API, apikey,api,ftp:

 

檔案類型

哪些檔案類型是我們主要關心的呢? XML、Smali、YML

[‘.xml’,’.smali’,’.yml’]

 

自動化整個過程(moblizer)

這個python程式 moblizer會將所指定的APK先執行APKtool反組譯後,

針對 XML, Smali, YML等檔案,進行檔案內容特殊關鍵字(IP, email, 帳號密碼)的搜尋,

如果有搜尋到特殊關鍵字,則列印出找到的檔案與行數。

  1. 下載moblizer.py 至Apktool目錄
  2. 將APK檔案拷貝至該目錄
  3. Python   moblizer.py

 

Mobilizer程式碼

https://github.com/SudhanshuC/Android-Testing/blob/master/moblizer

(Windows執行,將程式中,修改為 call([‘apktool.bat‘,’d’,b]))

Leave a Reply

Your email address will not be published. Required fields are marked *