---
# System prepended metadata

title: Android Proguard
tags: [Android 資安區, Proguard]

---

# Android Proguard 

Android Proguard 是 Android 原生的混淆程式套件，其目的是為了不讓反組譯的編碼易於被看清

導引步驟
--
- [ ]     1.  設定 build.gradle 的 buildTypes --> minifyEnabled = true (啟用 Proguard 混淆)
    - 建議在 release 中啟用就好，因為在 debug 模式中會需要查看 log 及相關的資訊 
    - proguard-android-optimize.txt 是原生預設混淆的規則
    - proguard-rules.pro.txt 是可以再加註客製的混淆規則

        ![](https://i.imgur.com/AhVU7WS.png)

- [ ]     2. 在 proguard-rules.pro.txt 檔中加註客製的規則
    -  proguard-rules.pro.txt 在專案結構 Gradle Scripts 中的 proguard - rules 
      ![](https://i.imgur.com/7VEvY4o.png)
      
    -  添加自己客製的規則
      ![](https://i.imgur.com/kUKQg8j.png)
      
          - 常用規則可查看文獻 - [ProGuard 程式碼混淆保護](https://tw-hkt.blogspot.com/2018/12/proguard.html)
      
    - ***坑：由於 Proguard 會將 class 混淆，這可能造成 Gson 在 Parser Model 的時候會有異常，因此客製了一條規則  -keep class com.cfd.voxy.data.remote.model.{;} ，確保 Model 不會被混淆*** 


- [ ]     3. 輸出 aab / apk ，供 JADX 反組譯套件查看混淆程式碼
 
- [ ]     4. 請下載 [反組譯 Jadx 下載 - jadx-1.4.4.zip](https://github.com/skylot/jadx/releases/tag/v1.4.4)，確認下載後解壓進入 bin ，並執行 jadx.gui 。
- [ ]     5. 將上述輸出的 aab/apk 匯入 jadx 中，即可查看混淆後的結果
         ![](https://i.imgur.com/mwmwbuH.png)

- [ ]     6. 可利用 jdax 的 search 尋找想要混淆的 class/function ，並查看是否符合您的混淆結果
![](https://i.imgur.com/ZCzBQfe.png)

- [ ]     7. 測試 App 運作情況，如有異常，很可能是混淆的程式碼沒辦法被第三方套件判讀


參考文獻
---
- [Proguard 簡介](https://jamesqi.medium.com/proguard-d8cc2e67211)
- [ProGuard 程式碼混淆保護](https://tw-hkt.blogspot.com/2018/12/proguard.html)
- [如何反組譯檢測 App - Jadx](https://ithelp.ithome.com.tw/articles/10208426)
- [反組譯 Jadx 下載 - jadx-1.4.4.zip](https://github.com/skylot/jadx/releases/tag/v1.4.4)

###### tags: `Android 資安區` `Proguard`
