iOS中的反编译可能性以及如何防止它们

问题描述 投票:6回答:2

我最近阅读了有关iOS应用反编译的信息,现在我真的很担心。如以下帖子(#1#2)所述,可以反编译分发到App Store的iOS。这可以通过越狱来完成,我认为可以将应用程序从内存复制到硬盘。使用某些工具可以

  • 读取字符串(字符串工具)
  • 转储头文件
  • 汇编代码的反向工程师

似乎不可能将工程师反向转换为可可代码。

由于安全性是我创建的软件的功能,因此我想防止不良用户重建我的安全性功能(使用密钥加密或登录网站)。因此,我提出了以下问题:

  1. 有人可以用汇编程序重构我的保存,加密或登录方法吗?我的意思是,他可以理解到底发生了什么吗(什么存储在什么路径,什么时间,使用了什么密钥等等,以及登录到哪个网站所使用的凭据)?我没有程序集的理解,它看起来像是我的矩阵...
  2. 我如何安全地使用不能用字符串读出或不能以汇编形式读出的NSStrings?我知道有人可以混淆字符串-但这仍然不安全,不是吗?
ios objective-c security assembly decompiling
2个回答
28
投票

这是人们一直追逐的问题,任何有足够动力的有技能的人都可以找到方法来找出您不希望他们找到的任何信息,如果这些信息曾经存储在设备。

无需越狱,就可以使用购买或下载的二进制文件来拆卸应用程序。这是静态检查,可通过标准拆卸工具方便进行。尽管您需要一个足够好的工具来从链接器添加符号并充分理解方法调用,以便能够弄清正在发生的事情。如果您想了解它的工作原理,请查看hopper,它是一个非常不错的反汇编/逆向工程工具。

特别是对于有问题的安全日志,如果您有积极的攻击者,那么您会遇到更大的问题:基于系统的中间人攻击。在这种情况下,攻击者可以清除您系统使用的网络代码,并查看通过标准网络发送的任何内容。因此,您不能依赖于能够在OS或库级别将任何形式的未加密数据发送到“安全”管道中并期望不会被看到。至少您需要先加密,然后再将数据放入管道(即,您不能依赖于将任何纯文本发送到标准SSL库)。您可以编译自己的SSL库集并将它们直接链接到您的应用程序,这意味着随着时间的推移您不会获得任何系统性能和安全性增强,但是可以根据需要手动升级SSL库。您也可以创建自己的加密,但这充满了潜在的问题,因为有动机的黑客可能会发现此时更容易攻击您的有线协议(像SSL这样的公开测试的协议通常比您自己放在一起的安全得多,除非您是一位具有多年安全/加密经验的特别有天赋的开发人员)。

但是,所有这些都假定攻击者有足够的动机。如果您删除了低挂的水果,则可以防止偶然的黑客简单地尝试弄清楚您的系统。要避免的一些事情:

  • 为加密的任何一侧存储纯文本加密密钥
  • 将密钥存储在专门命名的资源中(名称为serverkey.text的文件或存储在名称为key的plist中的密钥都是经典)]
  • 尽可能避免使用简单密码

但是,最重要的是创建一个系统,其中存储在应用程序本身中的密钥(如果有的话)本身毫无用处,而无需用户输入信息(直接或通过诸如OAUTH之类的系统来间接输入)。如果未与可信任的用户进行任何交互,则服务器不应信任客户端的任何重要操作。

Apple的钥匙串提供了一个存储身份验证令牌的好地方,例如在OAUTH序列中检索到的令牌。该API有点难以使用,但是系统很稳定。

最后,问题是,无论您做什么,都只是在增加失败的措施所需的工作量。攻击者可以控制方程式的所有重要部分,因此他们最终将击败设备上的任何东西。您将需要决定要花多少精力来保护客户端,而不是保护服务器并监视滥用。由于攻击者将所有卡都保留在设备上,因此,更好的方法是可以在服务器上实施以提高目标的方法。


0
投票

jhkewr342dsd sadad weaw dsa das dsadasdasdasd

© www.soinside.com 2019 - 2024. All rights reserved.