1

AFAIK Android 反编译允许从 apk 中提取每一点信息。如何在 Java 或任何其他 XML 文件中存储 ftp 密码或其他机密字符串等信息?除了调用服务还有什么办法吗?

编辑问题:

String uname = "mks";
    String part1="pass";
    String part2="my";
    String part3="word";

根据大卫的回答,我混淆了一个字符串,但在 dcompilation 之后我可以看到我的密码

 String[] arrayOfString = new String[2]; arrayOfString[0] = "mks"; arrayOfString[1] = ("my" + "pass" + "word");
4

3 回答 3

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 应用程序中,而任何反编译应用程序的人都可以访问它。你所能做的就是让他们更难解释他们能找到的任何数据。

于 2012-09-27T05:36:56.093 回答
0

您可以使用某种加密。然后通过一些计算来混淆加密密钥,这样它们就不容易通过逆向工程来检索。确保在使用后立即处理密钥和解密数据。

如果您通过网络检索密码,使用身份验证和 SSL 以及源代码中的模糊 URL,那么您可以检测到检索密码的尝试并禁止来自该来源的连接。但是,如果您的服务器出现故障,这会增加很多工作量并引入潜在的问题。

于 2012-09-27T05:33:18.570 回答
0

如果它们是重要数据,切勿将其保留在您的代码中,例如 FTP 服务的凭据等。

混淆只会增加一点难度。最好的方法是向 WS 发出请求(当然是 https 并带有签名),答案就是这个凭证。

另一种解决方案(比混淆或拆分 JAVA 代码上的字符串更好)是将这些信息放入本机库并使用 JNI 接口实时访问它。

于 2016-11-17T16:50:29.707 回答