如何在Android中混淆资源字符串名称? [已关闭]

问题描述 投票:0回答:2

我目前使用 LVL 和 Proguard 的组合作为防范盗版的第一道防线。

但是,资源字符串呢? 例如,如果存在“许可证检查失败”之类的资源字符串,那么盗版者只需将该资源 ID 追溯到代码中使用它的位置即可。

android obfuscation proguard android-resources android-lvl
2个回答
13
投票

如果定义资源字符串,您可能会在以下位置定义或使用它:

  • 字符串资源文件res/values/strings.xml,
  • 布局文件res/layout/*.xml,
  • 生成的资源文件R.java,
  • 你的java代码src/**.java.

编译后,资源字符串、名称和整数代码最终为:

  • 资源文件resources.arsc(字符串、名称和代码),
  • 资源类R$string.class(名称,代码),
  • 您编译的代码**.class(内联代码)。

ProGuard 将完全删除 R$string.class,但 Android 反编译器可以从 resources.arsc 重建所有信息。这仍然需要一些工作,但字符串可能确实暗示了代码的目的(以及某些 API 调用)。

您可以通过加密/混淆代码中的字符串以及使用反射来访问某些 API 来改进这一点,如 Google 演示文稿中所建议的逃避海盗和阻止吸血鬼

ProGuard 的 Android 闭源同级工具 DexGuard 可以为您加密字符串(以及 API 调用和整个类),可能比您手动实现的效果更有效,并且不会增加源代码的负担。

(我是ProGuard和DexGuard的开发者)


5
投票

当我想隐藏 Android 中的重要字符串时,我将它们放入 C/C++ 库中。然后我使用 JNI 调用来检索它们。 在c库中,我更进一步,我将字符串转换为十六进制,当我检索相同的字符串时,我再次将其从十六进制转换为整数。 当黑客尝试查看 c/c++ 库时,将很难找到您的秘密字符串(特别是如果转换为十六进制)。

这是一篇不错的文章以及如何开始这样做。

© www.soinside.com 2019 - 2024. All rights reserved.