如何反向工程 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檔案結構
使用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, 帳號密碼)的搜尋,
如果有搜尋到特殊關鍵字,則列印出找到的檔案與行數。
- 下載moblizer.py 至Apktool目錄
- 將APK檔案拷貝至該目錄
- Python moblizer.py
Mobilizer程式碼
https://github.com/SudhanshuC/Android-Testing/blob/master/moblizer
(Windows執行,將程式中,修改為 call([‘apktool.bat‘,’d’,b]))