我的应用程序使用了许多我无法让用户看到的API密钥和URL。我一直将它们直接放在代码中,有时嵌入在使用它们的方法中,有时也在一个名为MyVals的类中,它存储常用的字符串和数字。
e.g:
public class MyVals {
private LGVals(){}
public static final String DB_URL = "https://mydb.dbprovider.org/";
public static final String DB_Key = "klJF*(oh8iyhkkde";
public static final String TableKey_UserList = "o9w6owifhayf98fnwihj";
}
这样安全吗?如果我用Proguard创建我的APK会有所不同吗?对此最好的做法是什么?
答案 0 :(得分:5)
将敏感字符串嵌入代码中绝对不安全。 Proguard模糊了类和方法名称,但任何已定义的字符串都保持完全不变。这是我通过Proguard运行的应用程序的一个示例。您可以看到方法和类名称是混淆的,但字符串(必须是)保持不变。
以下是原始代码:
public void shutdown() {
if (logger.logDebug()) {
logger.logDebug(LOGTAG, "Queuing shutdown message ...");
}
queueMessage(new BaseMessage(true));
}
混淆的代码,很容易通过JD-GUI获得:
public void c()
{
if (c.logDebug())
c.logDebug("MsgRouter", "Queuing shutdown message ...");
a(new a(true));
}
如果您在应用中的字符串中嵌入了敏感数据, 就可以并将对其进行反编译 。
答案 1 :(得分:-5)
不,这不安全。
您至少应该将信息放入SharedPreferences。
但是,任何拥有root访问权限的人都可以阅读它们。