1、概述
APP安全性一般可以從以下幾方面進行考量:
以及其他一些雜項(或者通用並不局限於APP的安全項):
本文討論反編譯問題。
2、APK反編譯
安卓開發的APP,如果不做任何處理是很容易被反編譯的。也就是說,一個APP的源代碼可以輕易的被泄露。
對於商業軟件而言,這當然是不可接受的。而作為測試團隊,應該確保自己的產品能夠妥善抵御反編譯。
測試可以可以自己嘗試反編譯來進行驗證,這是一種滲透性測試思維。
2.1 反編譯工具
- apktool
作用:用於提取APK中的資源文件,比如圖片文件和布局文件等。
下載:https://bitbucket.org/iBotPeaches/apktool/downloads/
- dex2jar
作用:將apk反編譯成jar文件
下載:https://sourceforge.net/projects/dex2jar/files/
- jd-gui
作用:查看dex2jar反編譯得到的jar包中的源碼
下載:http://java-decompiler.github.io/
將以上工具包下載並放置到同一文件夾,解壓其中的ZIP包。將待反編譯的APK也放置進同一文件夾(方便起見)。
若官網下載有困難,以下是工具的網盤地址:
鏈接:https://pan.baidu.com/s/18YGxwVX9KNnRU3rm3qvOUg
提取碼:zskt
2.2 apktool提取資源文件
打開windows命令行,CD進入上一步中的目錄。
第一步使用apktool進行資源文件提取,命令語法:
java -jar [apktool_2.3.4.jar] d -f [apk地址] -o [輸出目錄]
執行效果:
C:\Users\Administrator\Desktop\APKrecompile>java -jar apktool_2.3.4.jar d -f 檢測包09111134.apk -o 09111134 I: Using Apktool 2.3.4 on 檢測包09111134.apk I: Loading resource table... I: Decoding AndroidManifest.xml with resources... I: Loading resource table from file: C:\Users\ADMINI~1\AppData\Local\Temp\1.apk I: Regular manifest package... I: Decoding file-resources... I: Decoding values */* XMLs... I: Baksmaling classes.dex... I: Copying assets and libs... I: Copying unknown files... I: Copying original files...
執行完畢后,得到APK反編譯提取的資源文件:
2.3 dex2jar反編譯得到Jar包
將APK后綴名改寫為ZIP,打開此ZIP文件,提取出其中的class.dex:
這個文件實際上就是java源文件使用dx工具打包而來的,而dex2jar(dex to jar)顧名思義就是將dex文件轉換回jar
將classes.dex放置進第一步准備好的dex2jar文件夾中。
命令行中,進入該文件夾,輸入命令:
d2j-dex2jar classes.dex
執行效果:
d2j-dex2jar classes.dex
dex2jar classes.dex -> .\classes-dex2jar.jar
執行完畢后,得到反編譯而來的classes-dex2jar.jar文件:
2.4 jd-gui查看jar文件
打開第一步准備的jd-gui.exe(無需安裝)。
將第三步中得到的classes-dex2jar.jar拖拽進打開的界面中,即可查看jar包中源代碼了。
3、防御和檢測
現今對於APK反編譯的應對手段主要有以下幾種:
- 代碼混淆技術
- 簽名比對技術
- 動態庫技術
- 動態加載技術
- 第三方加固
作為審計和測試方,應該結合滲透性測試和代碼審計,確定被測的產品已經加入了妥善的防御措施。