【发布时间】:2013-05-22 23:05:55
【问题描述】:
如何在 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 中保护字符串的最佳选项。
【问题讨论】:
-
简短的故事是,您只能使获取字符串变得困难 - 您不能让它变得不可能,因为您使用的任何加密方案都会在设备上存储一个密钥。这里有很多关于如何混淆的讨论,但确实晦涩不是安全。您必须使回答“付出的努力是否值得”这个问题变得足够困难?如果您希望某些东西完全安全,请不要将其存储在手机上。
-
什么样的字符串?密码?出于什么目的?最适合您的解决方案将取决于您打算用它做什么。
-
@Simon :我同意你的观点,我已经尝试使用 NDK 让它变得困难,但是使用像反编译器这样的十六进制射线,任何开发人员都可以反编译 *.so 文件并获取数据,所以知道我如何使其更难反编译,
-
@Yoann : 我想存储很多东西,包括加密密钥、密码等......
标签: android security android-ndk