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

时间:2013-05-28 05:06:06

标签: android security android-ndk

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

选项:

  1. ProGuard:它不保护字符串? Does proguard work to obfuscate static string constants?

  2. 加密字符串:用于加密我需要在某些地方存储加密密钥(字符串),以及如何保护加密密钥。

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

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

  5. =============================================== =

    C中的功能

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

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

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

2 个答案:

答案 0 :(得分:5)

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

因此,如果您的字符串是由使用该设备的某人输入的,您可以使用serial#/ IMEI#/ etc等设备作为密钥。有点安全,但并不难以进行逆向工程。这将允许在没有用户输入密码的情况下在本地解密数据,但是不允许数据被加密分发。

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

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

答案 1 :(得分:0)

对于字符串加密,我们创建了gradle插件,使用NDK和XOR运算符将您的密钥隐藏在Android应用程序中。目的是使您的密钥模糊不清,以防止对应用程序进行反向工程。

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

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