2012-03-28 83 views
3

我需要将我的网站特定部分的认证信息编码到我的应用程序中。应用程序是否可以“反编译”,用户名和密码是否暴露?应用程序是否可以反编译?

NSURL *url = [NSURL URLWithString:@"https://predefinedUsername:[email protected]"]; 
+3

也许你应该阅读这里:http://stackoverflow.com/questions/3919765/how-safe-is-information-contained-within-iphone-app-compiled-code – 2012-03-28 20:18:31

+6

如果你以纯文本在应用程序的机会是,它不会反编译。 – Hyperbole 2012-03-28 20:21:09

回答

6

是的,这是可能的。假设如果你有任何东西编译到你的应用程序中,它可以[并且]被某个地方的人发现。即使今天是不可能的,你也会创建一个这样的信息的冻结记录,这些信息很容易受到未知的或未知的攻击。

您确实需要用户执行一些验证它们的任务。有一百万种方法可以做到这一点,对于其中的每一种方法,都有一两百种方法可以做到这一点。 :)

不知道更多关于您的具体要求,除了“保持简单并且不要以明文形式存储或发送任何内容”之外,不可能再多说几句。

+0

非常感谢您的帮助。你有什么想法,更流行的应用程序,特别是杂志吗?内容是从一个安全的网站下载的,并且每次都不会输入用户名和密码?为什么不能反编译应用程序并免费下载问题?还是我看着这个错误的方式?谢谢。 – 2012-03-28 20:20:34

+1

@JackHumphries可用选项因平台而异。如果不是由应用程序的所有实例共享一个单一的硬编码帐户,而是拥有每个购买的令牌,则在每个付费购买的后端创建一个新帐户(如果滥用/共享/退款可以撤销),那将会成为一个开始。虽然我只知道一点关于Android Market的内容,但对Apple的App Store基础设施一无所知,所以我不能给你任何更具体的提示。 – 2012-03-28 20:28:55

2

您的示例将公开用户名和密码,而不需要反编译,因为您通过URL请求中的纯文本发送它。任何有嗅探器或MITM服务的人都会把它从空中抢走。更好的方法是通过http协议使用SSL。您可以更进一步,并在运行时提示凭据和/或在应用程序中存储加密版本。

+0

谢谢。所有信息将通过SSL发送。当您说在应用程序中存储加密版本的证书时,您能否进一步解释您的意思?当他们需要被发送到服务器时,我将如何解密他们?非常感谢。 – 2012-03-28 20:31:59

5

正如@Hyperbole所说,如果您以纯文本形式存储用户名和密码,它将在可执行文件中可见。检查字符串的可执行文件是非常微不足道的,它通常是具有恶意目的的人会尝试的第一件事。

右键单击您在iTunes中下载的任何应用程序,然后选择在查找器中显示。在桌面上制作应用程序的副本,并将应用程序从AppName.ipa重命名为AppName.zip。双击将其解压缩,然后查看该文件夹。导航到Payload文件夹,然后右键单击那里名为AppName的(可能只有)文件,该文件看起来像一个应用程序,但有一个大圆圈,并有一个穿过它的图标。选择显示包内容。滚动浏览直到找到一个名为AppName的文件,其中没有扩展名,并且带有绿色单词“exec”的黑色矩形作为图标。在文本编辑或其他文本编辑器中打开该文件。你会发现大部分结果都是随机符号和其他垃圾,但偶尔你应该看到一些纯文本。编译器在大多数情况下编译字符串常量并将它们直接嵌入到应用程序中。

您问过什么杂志应用程序和其他人可以访问内容 - 有很多不同的方法可以做到这一点,但在服务器验证您的应用程序内购买收据后,我的头顶,服务器将记录一个特定于您的iTunes帐户的标识符,表示您已购买该杂志的特定问题。然后,您的应用程序可以从服务器请求该文件,并在该过程中将标识符添加到请求中。一旦服务器查看数据库并确定您购买了内容,服务器就会响应该文件。

其他解决方案包括签署/散列唯一密钥。

2

这是非常糟糕的,因为仅通过针对应用程序二进制文件运行“字符串”而无需对其进行反编译就可以轻松恢复这些凭据。

不能弹出一个对话框,要求用户在第一次启动应用程序时输入凭据吗?或者,你可以将它们加密存储在一个文件中,然后向用户询问另一个凭证,例如导出密钥的密码,但即使如此,也不会在确定的攻击中存活,除非密码很长。

相关问题