保護你的程式碼免受黑客攻擊
混淆通常被認為是程式碼保護的神奇解決方案,通過使程式碼更難理解它是否被黑客反編譯。
但是,如果你認為刪除 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);
}
小費:
通過自行反編譯來測試對混淆程式碼的保護程度!