AFAIK Android反编译允许从apk中提取每一点信息。 如何在Java或任何其他XML文件中存储ftp密码或其他机密字符串等信息?除了呼叫服务之外还有其他办法吗?
编辑问题:
String uname = "mks";
String part1="pass";
String part2="my";
String part3="word";
根据David的回答我混淆了一个字符串,但在编译后我能看到我的密码
String[] arrayOfString = new String[2]; arrayOfString[0] = "mks"; arrayOfString[1] = ("my" + "pass" + "word");
答案 0 :(得分:1)
你在谈论在这里混淆一个字符串。实现此目的的最简单方法之一是将其拆分为代码中的多个部分,然后将这些部分组合在一起以生成最终结果。你的所有琴弦仍然存在,但它们很难再次重新组合在一起。
例如,如果您要隐藏的密码是“102938475601”,这是一种方法:
// Declare the parts
String part2 = "3847";
String part1 = "1029";
String part3 = "5601";
// Log in to the server
ftpServer.sendLogin("username", part1+part2+part3);
这是一种非常简单的混淆形式。如果您更热衷于保护数据,可以尝试其他方法,例如使用非标准加密形式加密密码,并按上述方法拆分密钥。
但最终你是对的 - 没有保证在Android应用程序中打包数据的方法,任何反编译应用程序的人都无法访问它。你所能做的只是让它更难让他们解释他们能找到的任何数据。
答案 1 :(得分:0)
您可以使用某种加密方式。然后通过一些计算对加密密钥进行模糊处理,以便通过逆向工程工作可以轻松地轻松地检索它们。确保密钥和解密数据在使用后立即处理。
如果您通过网络检索密码,在源代码中使用身份验证和SSL以及模糊处理的URL,则可以检测检索密码的尝试并禁止来自该源的连接。但是,如果您的服务器出现故障,这会增加很多工作并引入潜在问题。
答案 2 :(得分:0)
如果它们是重要数据,请不要将其保留在您的代码上,例如FTP服务的凭据等等。
混淆只会增加一点点困难。最好的方法是向WS(当然,https和签名)做一个请求,答案是这个凭据。
另一个解决方案(优于混淆或拆分JAVA代码上的字符串)是将此信息放入本机库并使用JNI接口实时访问它。