在 Android 项目中是否有更安全的方法来存储敏感字符串?
Is there a more secure way to store sensitive string in an Android project?
在我的 Android 项目中,我想保持我的 Web 服务地址未知。
我将 link 存储如下:
private final String SERVICE_LINK = "mywebservicelink..."
不过看到apk可以反编译,不知这个link可否知道。
如何安全地存储它?
谢谢。
您可以在 gradle.properties
中设置敏感字符串
例如:
在你的gradle.properties
(通常位于你的根项目)中,你可以定义:
SERVICE_LINK = "mywebservicelink"
然后在您的应用程序 build.gradle
android {
...
defaultConfig {
resValue "string", "service_link", SERVICE_LINK
}
...
}
然后,此服务 link 将作为 R.string.service_link
在您的资源中准备就绪。也就是说,您可以通过以下方式简单地获取值:
getString(R.string.service_link);
编辑 1:
如果您询问如何在 APK 中隐藏字符串,那么您可以使用 ProGuard。
但是,请注意。无论您在源代码中放入什么,都不能 100% 保证它不会被逆向工程。
ProGuard 会混淆您的代码,这将使逆向工程变得更加困难。
有关更多信息,这个帖子很棒:
How to avoid reverse engineering of an APK file?
你可以在SERVICE_LINK变量做一些操作后赋值,而不是直接赋值。例如对一些无意义的字符串进行字符串操作,从某些特定位置获取字符或子字符串,从一些算术运算得到的ASCII码中获取一些字符等可能对此有所帮助。
这增加了复杂性,使第三方人员无法轻易找到您的恒定值。他们可能认为这是一个随 运行 时间变化的动态值,或者一些不相关的东西。但是如果直接在" "里,就很容易找到了。
根据经验,无法隐藏任何网络地址。
任何正在搜索网络服务、地址或相关内容的人都可以监控自己的网络并捕获数据包。
主机的域或 IP 将始终清晰可见。
在我的 Android 项目中,我想保持我的 Web 服务地址未知。 我将 link 存储如下:
private final String SERVICE_LINK = "mywebservicelink..."
不过看到apk可以反编译,不知这个link可否知道。
如何安全地存储它?
谢谢。
您可以在 gradle.properties
例如:
在你的gradle.properties
(通常位于你的根项目)中,你可以定义:
SERVICE_LINK = "mywebservicelink"
然后在您的应用程序 build.gradle
android {
...
defaultConfig {
resValue "string", "service_link", SERVICE_LINK
}
...
}
然后,此服务 link 将作为 R.string.service_link
在您的资源中准备就绪。也就是说,您可以通过以下方式简单地获取值:
getString(R.string.service_link);
编辑 1:
如果您询问如何在 APK 中隐藏字符串,那么您可以使用 ProGuard。 但是,请注意。无论您在源代码中放入什么,都不能 100% 保证它不会被逆向工程。 ProGuard 会混淆您的代码,这将使逆向工程变得更加困难。
有关更多信息,这个帖子很棒: How to avoid reverse engineering of an APK file?
你可以在SERVICE_LINK变量做一些操作后赋值,而不是直接赋值。例如对一些无意义的字符串进行字符串操作,从某些特定位置获取字符或子字符串,从一些算术运算得到的ASCII码中获取一些字符等可能对此有所帮助。
这增加了复杂性,使第三方人员无法轻易找到您的恒定值。他们可能认为这是一个随 运行 时间变化的动态值,或者一些不相关的东西。但是如果直接在" "里,就很容易找到了。
根据经验,无法隐藏任何网络地址。
任何正在搜索网络服务、地址或相关内容的人都可以监控自己的网络并捕获数据包。
主机的域或 IP 将始终清晰可见。