[英]Is there a more secure way to store sensitive string in an Android project?
在我的Android项目中,我想保持我的Web服务地址未知。 我将链接存储如下:
private final String SERVICE_LINK = "mywebservicelink..."
但是,因为我看到可以对APK进行反编译,所以我想知道是否可以知道此链接。
如何安全存放?
谢谢。
您可以在gradle.properties
设置敏感字符串
例如:
在gradle.properties
(通常位于根项目中)中,您可以定义:
SERVICE_LINK = "mywebservicelink"
然后在您的应用程序的build.gradle
android {
...
defaultConfig {
resValue "string", "service_link", SERVICE_LINK
}
...
}
然后,此服务链接将在您的资源中作为R.string.service_link
。 也就是说,您可以通过执行以下操作简单地获取价值:
getString(R.string.service_link);
编辑1:
如果您询问如何在APK中隐藏字符串,则可以使用ProGuard。 但是,请注意。 不管您在源代码中放入什么内容,都无法100%保证不能对其进行反向工程。 ProGuard会混淆您的代码,这将大大增加反向工程的难度。
有关更多信息,该主题很棒: 如何避免对APK文件进行反向工程?
您可以在执行一些操作后分配SERVICE_LINK变量的值,而不是直接分配。 例如,使用具有几个无意义的字符串的字符串操作,从某些特定位置获取字符或子字符串,从通过某些算术运算获得的ASCII代码中获取一些字符等可能对此目的有所帮助。
这提供了一种复杂性,因此第三方无法轻易找到您的不变价值。 他们可能认为这是一个随运行时间变化的动态值,或无关紧要的东西。 但是,如果直接在“”中,则很容易找到。
根据经验,不能隐藏任何网络地址。
任何正在搜索Web服务,地址或相关内容的人都可以监视自己的网络并捕获软件包。
主机的域或IP将始终清晰可见。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.