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