我最近读到了关于iOS应用程序反编译的文章,现在我真的很关心它。正如下面的文章(#1和#2)所述,可以对分发到App的iOS进行反编译。这可以通过越狱完成,我认为通过将应用程序从内存复制到hdd。有了一些工具,就有可能
似乎不可能将工程师转换为Cocoa代码。
由于安全性是我创建的软件的一个特性,所以我希望防止坏用户重新构建我的安全功能(使用密钥加密或登录到网站)。因此,我提出了以下问题:
NSStrings
?我知道一个人可以混淆字符串,但这仍然是不安全的,不是吗?发布于 2013-07-29 01:35:42
这是人们多年来一直在追求的问题,任何有足够动力的有技能的人都能够找到任何你不想让他们发现的信息,如果这些信息存储在设备上的话。
在没有越狱的情况下,可以使用购买或下载的二进制文件来拆卸应用程序。这是静态检查,并与标准拆卸工具方便。尽管您需要一个足够好的工具,可以从链接器中添加符号,并且能够充分理解方法调用,以便能够搞清正在发生的事情。如果您想了解这是如何工作的,请查看hopper,它是一个非常好的反汇编/反向工程工具。
特别是对于您的安全日志,如果您有一个有动机的攻击者:基于系统的中间人攻击,您有一个更大的问题。在这种情况下,攻击者可以避开系统使用的网络代码,查看通过标准网络发送的任何内容。因此,您不能依赖于能够在操作系统或库级别将任何形式的未加密数据发送到“安全”管道中,并期望它不会被看到。在将数据输入管道之前,您至少需要进行加密(也就是说,您不能依赖于将任何纯文本发送到标准SSL库)。您可以编译自己的SSL库,并将它们直接链接到应用程序中,这意味着随着时间的推移,您不会获得任何系统性能和安全性增强,但您可以根据需要手动升级SSL库。您也可以创建您自己的加密,但这充满了潜在的问题,因为有动机的黑客可能会发现此时攻击您的有线协议更容易(像SSL这样经过公开测试的协议通常比您自己能够组合的协议更安全,除非您是一个具有多年安全/加密经验的天才开发人员)。
但是,所有这些都假设攻击者有足够的动机。如果您删除了低挂水果,您可能能够防止一个偶然的黑客做一个简单的尝试,以了解您的系统。有些事情要避免:
serverkey.text
的文件或存储在带有key
名称的plist中的密钥都是经典的)但是,最重要的是创建一个系统,其中存储在应用程序中的密钥(如果有的话)在没有信息的情况下是无用的,用户必须(直接或间接地通过OAUTH等系统)输入自己。如果没有与可以信任的用户进行某种交互,服务器就不应该信任客户端进行任何重要操作。
Apple的Keychain为存储身份验证令牌提供了一个很好的地方,例如在OAUTH序列中检索到的令牌。API使用起来有点困难,但是系统是可靠的。
最后,问题是,无论你做什么,你只是在加大赌注,它所需的工作量,以击败你的措施。攻击者可以控制方程的所有重要部分,因此他们最终将击败设备上的任何东西。您需要决定在保护客户端、保护服务器和监视滥用方面付出了多少努力。由于攻击者持有设备上的所有卡片,所以您更好的方法将是可以在服务器上实现以增强目标的方法。
https://stackoverflow.com/questions/17919304
复制相似问题