我应该在 proGuard 上使用 dexGuard、redEX 来混淆广播接收器吗

Posted

技术标签:

【中文标题】我应该在 proGuard 上使用 dexGuard、redEX 来混淆广播接收器吗【英文标题】:Should i use dexGuard,redEX over proGuard to obfuscate broadcastReceiver 【发布时间】:2016-01-24 20:22:26 【问题描述】:

DexGuard 会帮助我混淆我的 broadcastReceiver 吗?我的一个广播接收器中有一个重要的算法,我需要一种方法来混淆它,但是 DexGuard 需要购买许可证吗? Proguards免费,有什么建议吗?而且我找不到通过 facebook 下载 redex 的链接,所以我认为它仍在开发中。所以我的问题是其中哪一个会混淆我的广播接收器。

我的 proguard 文件的内容如下:

    -keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
**-keep public class * extends android.content.BroadcastReceiver**
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

注意它说要保留广播接收器,我怎样才能隐藏我的数据?我不得不尝试将我所有的逻辑转移到另一个类,但是广播接收器会积极地收集垃圾。所以不是一个选择。

【问题讨论】:

【参考方案1】:

你是对的,默认 ProGuard 和 DexGuard 配置不包括扩展 BroadcastReceiver 的类,所以只需移动到另一个类。将您的逻辑放在单独的类中会更好的 OO 设计 - 使其更易于测试。当然,DexGuard 将提供比 ProGuard 更强大的保护,因为它具有特定的保护功能类加密和 API 隐藏声音,就好像它们很有用一样。请注意,还有其他适用于 Android 的商业混淆器。

为了提高安全性,一种选择是在本机代码中存储/运行算法,因为逆向工程更加困难。

但实际上正如您所说important algorithm 我想知道它是否应该在应用程序中。在受控的服务器环境中存储和运行算法并拥有安全的 API 会更好 IMO - 当然没有 100% 的安全性,因为您的服务器可能会被黑客入侵,但这可能比在每个 .apk 中都有一个算法副本更好已下载。

【讨论】:

以上是关于我应该在 proGuard 上使用 dexGuard、redEX 来混淆广播接收器吗的主要内容,如果未能解决你的问题,请参考以下文章

Android proguard 混淆代码实际上不应该导致 NullPointerException

我怎样才能告诉 proguard 假设一个包没有被使用?

android中的proguard - 我应该混淆gson POJO

Proguard:有 210 个重复的类定义?

使用 ProGuard,对测试策略有何影响?

在 Android 上使用 omitField() 的 Proguard 和 XStream