保护你的代码免受黑客攻击

混淆通常被认为是代码保护的神奇解决方案,通过使代码更难理解它是否被黑客反编译。

但是,如果你认为删除 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 编辑器中打开它