App加固保護之逆向分析

XX網銀加固保護之逆向分析

結論


先講結論,我認為無法反組譯得到原始碼,受影響的MAS檢測項目有6個:

  1. 4.1.2.3.5.敏感性資料應採用適當且有效之金鑰長度與加密演算法,進行加密處理再儲存
  2. 4.1.2.3.7.敏感性資料應避免出現於行動應用程式之程式碼
  3. 4.1.2.5.3.行動應用程式分享敏感性資料時,應避免未授權之行動應用程式存取
  4. 4.1.5.1.1.行動應用程式應避免含有惡意程式碼
  5. 4.1.5.1.2.行動應用程式應避免資訊安全漏洞
  6. 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後的檔案,已無打包前的原始碼可看。

截圖說明:

圖一、apktool解出來的AndroidManifest.xml,仍舊清晰可讀
圖二、但apktool解出來的smali檔,已經是Wrapper過後的了

(Wrapper過後即代表無法注入惡意程式碼,改寫後再重打包成apk)

圖三、dex2jar+JD-GUI解出來的java原始碼包,只剩打包後的6個java檔

這6個java檔的原始碼只是些無關痛癢的外部加殼設定檔

原始java檔已經隱藏在Wrapper引入的外部檔案了,無法取得

所以至少這種加殼保護,有做到基本防止反組譯並保護原始碼的作用。

Edited by hflin 2017.4.21