2

我正在使用 DexGuard 来处理我的 android 应用程序。在 DexGuard 的主页上,他们说它的特点是:XML 资源混淆

我已经测试了 DexGuard 并使用 apktool 反编译了我的输出 .apks。问题是所有资源文件都被成功反编译,所以它们显然没有被混淆。

现在我的问题是,DexGuard 会自动混淆 XML 资源还是我必须在我的 dexguard-project.txt 文件中以某种方式激活它?是否可以混淆像 strings.xml 这样的 XML 资源,还是我误解了这个功能?

4

2 回答 2

3

为什么要混淆 strings.xml?是因为那里有 api 密钥或 oauth 秘密吗?如果是这样,那么最好将它们移动到 assets/config.properties 文件并加载到这样的java.util.Properties对象......

Properties appConfigProperties = new Properties();
appConfigProperties.load(context.getAssets().open("config.properties"))
String myApiKey = appConfigProperties.get("my_api_key");

(为简洁起见,我删除了异常处理)

请务必在您的 DexGuard 配置文件中启用资产加密:

-encryptassetfiles assets/**
于 2014-11-13T12:39:40.600 回答
1

我收到了来自 DexGuard 的以下声明:

资源 XML 文件在发布版本中会自动混淆,尽管差异可能很细微。您可以将差异与例如 aapt d xmltree application.apk AndroidManifest.xml 进行比较。我们正在为即将发布的版本进行更多的资源混淆。

执行建议的命令aapt d xmltree application.apk(其中 application.apk 是一个简单的 HelloWorld 应用程序)后,我终于可以看到 DexGuard 在 XML 文件中实际混淆了什么:

XML 资源文件中的每个属性都由名称标识,但通常也由数字标识符标识。例如在 AndroidManifest.xml 中:

android:versionName(0x010102lc) = "1.0"

在混淆步骤中,DexGuard 可以删除属性的名称,但前提是该属性还具有数字标识符。

在 DexGuard 混淆后,上面的属性将如下所示:

:(0x010102lc) = "1.0"

例如,strings.xml 的 XML 元素只有名称而没有数字标识符,因此反编译的 XML 文件不会有任何差异。

于 2014-11-30T23:25:27.733 回答