是否有可能对应用程序进行反编译?
我需要在我的网站的特定部分的authentication信息编码到我的应用程序。 应用程序是否可以被“反编译”,用户名和密码是否暴露?
NSURL *url = [NSURL URLWithString:@"https://predefinedUsername:predefinedPassword@www.website.com"];
对的,这是可能的。 假设如果你有任何编译到你的应用程序的东西,它可以[并且]被某个地方的人发现。 即使今天是不可能的,你也正在创build一个这样的信息的冻结logging,这些信息将会被任何未知的或未知的攻击所伤害。
你真的需要用户执行一些authentication他们的任务。 有一百万种方法可以做到这一点,而对于其中的每一种方法,都有一两百种做法是错误的。 🙂
在不了解更多关于您的具体要求的情况下,除了“保持简单,不要以明文forms存储或发送任何内容”之外,不可能再多说些什么。
正如@Hyperbole所说,如果你用纯文本存储用户名和密码,它将在可执行文件中可见。 检查string的可执行文件是非常微不足道的,而且这通常是有恶意的人尝试的第一件事情。
右键单击您在iTunes中下载的任何应用程序,然后select在查找器中显示。 在桌面上制作应用程序的副本,并将应用程序从AppName.ipa重命名为AppName.zip。 双击将其解压缩,然后查看该文件夹。 导航到Payload文件夹,然后右键单击名为AppName的(可能只有)文件,该文件看起来像一个应用程序,但有一个大圆圈,通过它的图标交叉。 select显示包内容。 滚动浏览,直到find一个名为AppName的文件,没有扩展名,黑色矩形为绿色字“exec”作为图标。 在文本编辑或其他文本编辑器中打开该文件。 你会发现,这大多数是随机符号和其他废话,但你偶尔应该看到一些纯文本。 编译器在大多数情况下编译string常量并将其直接embedded到应用程序中。
您询问了杂志应用程序和其他人访问内容的方式 – 有很多不同的方法可以做到这一点,但在服务器validation您的应用程序内购买收据之后,我的头顶上,服务器将logging特定于你的iTunes帐户,说你已经购买了杂志的特定问题。 然后,您的应用程序可以从服务器请求该文件,并在该过程中将标识符添加到请求中。 一旦服务器查看数据库并确定你已经购买了内容,服务器就会响应这个文件。
其他解决scheme包括签署/散列唯一密钥。
您的示例将显示用户名和密码,而不需要反编译,因为您通过URL请求中的纯文本发送它。 任何有嗅探器或MITM服务的人都会把它从空中抢走。 更好的方法是通过http * s *协议来使用SSL。 您可以更进一步,在运行时提示凭据和/或在应用程序中存储encryption版本。
这是非常糟糕的,因为通过针对应用程序二进制文件运行“string”而不需要对其进行反编译来恢复这些凭据是非常容易的。
你不能popup一个对话框,要求用户在第一次启动应用程序时input凭据吗? 或者,您可以将它们encryption存储在一个文件中,然后要求用户提供其他凭证,例如密码,它可以导出密钥,但即使这样,除非密码过长,否则即使这样也不能保留下来。