是否可以对应用程序进行反编译?

时间:2012-03-28 20:13:38

标签: iphone objective-c ios ipad

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

NSURL *url = [NSURL URLWithString:@"https://predefinedUsername:predefinedPassword@www.website.com"];

4 个答案:

答案 0 :(得分:6)

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

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

在不了解您的具体要求的情况下,除了“保持简单并且不以明文形式存储或发送任何内容”之外,不可能真正说出更多内容。

答案 1 :(得分:5)

正如@Hyperbole所说,如果您以明文形式存储用户名和密码,它将在可执行文件中显示。检查字符串的可执行文件是非常简单的,而且通常是有恶意的人会尝试的第一件事。

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

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:2)

这非常糟糕,因为只需对应用二进制文件运行“字符串”而无需对其进行反编译即可轻松恢复这些凭据。

您是否可以弹出一个对话框,要求用户在首次启动应用时输入凭据?或者,您可以将它们加密存储在文件中,然后向用户询问替代凭证,例如导出密钥的密码,但即使这样也无法在确定的攻击中存活,除非密码很长。