保護你的程式碼免受黑客攻擊

混淆通常被認為是程式碼保護的神奇解決方案,通過使程式碼更難理解它是否被黑客反編譯。

但是,如果你認為刪除 Log.x(..) 實際上刪除了黑客需要的資訊,你會有一個令人討厭的驚喜。

刪除所有日誌呼叫:

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    ...etc
}

確實會刪除 Log 呼叫本身,但通常不會刪除你放入它們的字串。

例如,如果在日誌呼叫中輸入了一條公共日誌訊息,例如:Log.d(MyTag,"Score="+score);,編譯器會將+轉換為 Log 呼叫之外的’new StringBuilder()’。ProGuard 不會更改此新物件。

你的解編碼程式碼仍然會為 Score= 掛起 StringBuilder,附加了 score 變數的混淆版本(假設它被轉換為 b)。
現在黑客知道什麼是 b,並理解你的程式碼。

從程式碼中實際刪除這些殘差的一個好習慣是不要將它們放在那裡(使用 String 格式化程式,使用 proguard 規則刪除它們),或者用以下方法包裝你的 Log 呼叫:

    if (BuildConfig.DEBUG) {
        Log.d(TAG,".."+var);
    }

小費:

通過自行反編譯來測試對混淆程式碼的保護程度!

  1. dex2jar - 將 apk 轉換為 jar
  2. jd - 反編譯 jar 並在 gui 編輯器中開啟它