從普通開發環境來說,思考apk的安全性有以下幾點
1、防止二次打包:
由於android打包過程中系統只要求自簽名,不強制要求第三方權威機構簽名認證,所以很容易通過解析apk包,修改或者是刪除其中存儲簽名信息的META-INF文件來進行重新簽名打包,
解決方案
在系統安裝apk時拿到正確的簽名文件,與當前簽名文件做對比,是與否進行不同操作
2、防止反編譯:GitHub上有很多開源反編譯工具,這些工具流程都大同小異:反編譯,修改,優化,dex轉jar,簽名,打包
解決方案
現在主流的觀點是加密apk文件中的.dex文件,然後將解密辦法存儲到另外一個路徑中,然後給程序加一個殼,在運行apk時先運行殼apk,然後取出解密辦法解密dex文件運行程序
3、防止惡意篡改:理論上防止二次打包和反編譯就能防止惡意篡改apk內容
4、防止動態分析調試:比如在開發工具中拿到調試Log等,
解決方案
清單文件中或者Gradle設置了debuggable="true"才能調試應用程序,所以發佈版中禁止debuggable模式,還要防止第三方人員惡意篡改,可以在代碼中做二次檢測確保條件是否符合
5、防止模擬器運行apk:模擬器很容易爲非法分析apk提供便利
- 模擬器很容易拿到root權限
- 模擬器對應用程序調試條件限定很寬鬆
- 模擬器的IMEI號並不是真實物理設備
- 模擬器的dev目錄下有特殊文件
- 模擬器build信息和真機有差異