32

如何保护 Android 应用程序中的字符串?

选项:

  1. ProGuard:它不保护字符串? proguard 是否可以混淆静态字符串常量?

  2. 加密字符串:对于加密,我需要在某个地方存储加密密钥(字符串),这也是同样的问题,如何保护加密密钥。

  3. 从 Web 服务获取字符串:但是这个解决方案对我不起作用,因为应用程序没有互联网需求/访问,这是需求/业务决策。

  4. NDK:编写包含字符串的 c 文件并使用 JNI 返回,但我发现 Hex-Ray 反编译以反编译 *.so 文件 https://www.hex-rays.com/index.shtml

=================================================

C中的函数

jstring Java_com_abc_xyz_getString(JNIEnv* env, jobject javaThis) {
  return (*env)->NewStringUTF(env, "Hello String");
}

=====================================

请建议在 Android SDK/NDK 中保护字符串的最佳选项。

4

2 回答 2

7

密钥保护和分发是密码学中的一个大漏洞。它必须在您需要解密数据时可用。

因此,如果您的字符串是由使用设备的人输入的,您可以使用设备序列号/IMEI#/etc 作为键。有点安全,但逆向工程并不难。这将允许在无需用户输入密码的情况下在本地解密数据,但不允许以加密方式分发数据。

如您所见,如果您尝试使用应用程序分发加密数据,则密钥必须是设备本地的某个人。如果没有与外界的通信链接,唯一的选择是在设备中或与应用程序用户一起使用。

也许如果您能给我们提供预期的工作流程,您可以获得更多有用的建议?

于 2013-05-28T06:43:11.103 回答
1

对于字符串加密,我们创建了一个 gradle 插件来使用 NDK 和 XOR 运算符将您的密钥隐藏在您的 Android 应用程序中。目标是混淆您的密钥以防止对您的应用程序进行逆向工程。

您可以选择提供自定义编码/解码算法来提高密钥的安全性。

访问插件和所有详细信息:https ://github.com/klaxit/hidden-secrets-gradle-plugin

于 2020-11-09T16:34:57.657 回答