如何在Android应用程序中保护字符串?
ProGuard:它不保护字符串? Does proguard work to obfuscate static string constants?
加密字符串:用于加密我需要在某些地方存储加密密钥(字符串),以及如何保护加密密钥。
从网络服务中获取字符串:但是此解决方案对我不起作用,因为应用程序没有互联网要求/访问权限/需求/业务决策。
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中保护字符串的最佳选项。
答案 0 :(得分:5)
密钥保护和分发是密码学的一大漏洞。它必须在您需要解密数据时可用。
因此,如果您的字符串是由使用该设备的某人输入的,您可以使用serial#/ IMEI#/ etc等设备作为密钥。有点安全,但并不难以进行逆向工程。这将允许在没有用户输入密码的情况下在本地解密数据,但是不允许数据被加密分发。
如果您尝试使用应用程序分发加密数据,正如您所发现的那样,密钥必须是设备本地的某个人。没有与外界的通信链接,唯一的选择是在设备中或与应用程序用户。
也许如果你能给我们预期的工作流程,你可以获得更多有用的建议吗?
答案 1 :(得分:0)
对于字符串加密,我们创建了gradle插件,使用NDK和XOR运算符将您的密钥隐藏在Android应用程序中。目的是使您的密钥模糊不清,以防止对应用程序进行反向工程。
您可以选择提供自定义编码/解码算法,以提高密钥的安全性。
访问插件和所有详细信息:https://github.com/klaxit/hidden-secrets-gradle-plugin