保护你的代码免受黑客攻击
混淆通常被认为是代码保护的神奇解决方案,通过使代码更难理解它是否被黑客反编译。
但是,如果你认为删除 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);
}
小费:
通过自行反编译来测试对混淆代码的保护程度!