我正在使用DexGuard来处理我的Android应用程序。 在DexGuard的主页上,他们说它的特点是:XML资源混淆
我已经测试过DexGuard并用apktool反编译我的输出.apks。 问题是所有资源文件都被成功反编译,所以它们显然没有被混淆。
现在我的问题是,DexGuard会自动模糊XML资源,还是必须在我的dexguard-project.txt文件中以某种方式激活它? 是否有可能混淆像strings.xml这样的XML资源,还是我误解了这个特性?
答案 0 :(得分: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/**
答案 1 :(得分: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文件不会有任何差异。