【问题标题】:Dexguard security during debugging调试期间的 Dexguard 安全性
【发布时间】:2014-11-19 06:20:54
【问题描述】:

我在我的 android 应用程序中使用 Dexguard 来防止 逆向工程。现在在我的应用程序中,我有 在我所在的许多课程中使用了几个地方 System.out.println 打印我的服务器 URL 以方便调试。现在当我发布 这个应用程序,以及我给其他开发人员的这个 apk,他们 可以在他们的 logcat 中看到所有 System.out.println 的东西。如何 我应该避免这种情况吗?这有严重的问题。

【问题讨论】:

    标签: android logcat dexguard


    【解决方案1】:

    首先,您不应该在任何地方直接使用System.out.println。使用您自己的包装类进行日志记录。

    在 dexguard/proguard 中,您可以使用 assumenosideeffects 删除不需要发布的代码。

    所以对于System.out.print,您可以在您的 dexguard 规则中添加以下内容。

     -assumenosideeffects class java.io.PrintStream {
         public void println(%);
         public void println(**);
     }
    

    但这是有风险的,因为此类可能用于日志记录以外的目的。

    您最快的方法是使用android.util.Log 代替System.out.print,然后添加以下内容

    -assumenosideeffects class android.util.Log {
        public static boolean isLoggable(java.lang.String, int);
        public static int v(...);
        public static int i(...);
        public static int w(...);
        public static int d(...);
        public static int e(...);
    }
    

    proguard docs

    【讨论】:

    • 我在我的应用程序中写了很多地方。有没有办法在发布 apk 时加密或禁用它们??
    • 这不是@vKashyap 建议的吗?将这些 sn-ps 添加到您的 proguard/dexguard 配置文件中,它将从您编译的发布代码中删除它们。你试过了吗?
    • 你能否告诉我如何加密 dexguard 中的资源文件夹。它不起作用。当我反编译我的 apk 时,我可以很容易地得到我的布局文件
    【解决方案2】:

    @vKashyap 的回答很好,您可能还想添加这个...

    -assumenosideeffects class java.lang.Exception {
        public void printStackTrace();
    }
    

    【讨论】:

    • 你能否告诉我如何加密 dexguard 中的资源文件夹。它不起作用。当我反编译我的apk时,我可以很容易地得到我的布局文件?
    • 这更适合提出另一个问题和/或联系 dexguard 支持。不过我猜你真的关心布局文件吗?
    猜你喜欢
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 2022-10-16
    相关资源
    最近更新 更多