先講結論,我認為無法反組譯得到原始碼,受影響的MAS檢測項目有6個:
- 4.1.2.3.5.敏感性資料應採用適當且有效之金鑰長度與加密演算法,進行加密處理再儲存
- 4.1.2.3.7.敏感性資料應避免出現於行動應用程式之程式碼
- 4.1.2.5.3.行動應用程式分享敏感性資料時,應避免未授權之行動應用程式存取
- 4.1.5.1.1.行動應用程式應避免含有惡意程式碼
- 4.1.5.1.2.行動應用程式應避免資訊安全漏洞
- 4.1.5.4.2.行動應用程式應提供相關注入攻擊防護機制
其中前4個是幾乎完全無法測試,最後2個是部分無法測試(Client端無法測但Server端仍可測)。
加固保護後還是可以解出AndroidManifest.xml,這裡有身為一支Android App的基本資訊,還是可以觀察到一些東西。
加固保護後無法取得的是原始java檔,以原始碼做關鍵字搜尋敏感性資料或加密method、加密金鑰、Intent分享等步驟就無法執行,所以上述的6項測試項目可能就會有完全或部分無法測試。
反組譯結果
- apktool:可以,還是可以解出來看AndroidManifest.xml,但smali是已Wrapper後的。
- dex2jar+JD-GUI:可以,但解出來是Wrapper後的檔案,已無打包前的原始碼可看。
截圖說明:
(Wrapper過後即代表無法注入惡意程式碼,改寫後再重打包成apk)
這6個java檔的原始碼只是些無關痛癢的外部加殼設定檔
原始java檔已經隱藏在Wrapper引入的外部檔案了,無法取得
所以至少這種加殼保護,有做到基本防止反組譯並保護原始碼的作用。
Edited by hflin 2017.4.21