【问题标题】:Protect an sqlite file on IOS保护IOS上的sqlite文件
【发布时间】:2014-11-07 01:13:19
【问题描述】:

我花了几个月的时间收集、清理和构建一些数据。我正在构建的应用程序将能够搜索数据。到目前为止,我将 sqlite 文件存储在用户文件系统而不是远程服务器上,因为我希望搜索结果是即时的,以便为用户提供可能的最佳体验,而与他们的连接速度无关。

但我刚刚发现任何拥有越狱手机的人都可以“窃取”我的 sqlite 文件中的信息存储。

我最不希望有人得到我辛勤工作的成果并将其发布在网站上,这可能会使应用程序变得毫无用处。

有没有办法阻止这种情况发生?

感谢您的帮助!

【问题讨论】:

  • 手机不一定要越狱。我可以从我计算机上的 iTunes 库中打开您的应用程序的 IPA 文件(它只是一个 ZIP),然后在应用程序本身(它只是一个捆绑文件夹)中四处寻找,然后直接拉出 SQLite DB。

标签: iphone database ios sqlite


【解决方案1】:

您想要的是一种 DRM 形式。最终,DRM 无法阻止专门的攻击者获取底层数据。理论上,用户可以访问的任何内容都可能被恶意应用程序访问。

您可以加密数据库的行并将密钥隐藏在应用程序的某处,但勇敢的黑客会找到它。您可以在第一次运行时下载整个文件并使用该设备唯一的密钥对其进行加密,但随后您必须将密钥存储在某处或具有重新生成它的算法 - 黑客可以得到任何一个(即使它在钥匙串。)如果您需要网络连接并使用从服务器端和客户端生成的密钥......好吧,攻击者可以欺骗请求并获取该服务器端组件。

所以这真的取决于你想要有多安全。如果您只想让诚实的人保持诚实,简单的加密通常就足够了。如果您想制作一个防弹的 DRM 系统……您将是第一个完成它的人。

【讨论】:

  • 我喜欢你的幽默!但同时也有点郁闷……所以我想不复制用户文件系统中的sqlite文件并将其留在资源文件夹中不会有任何区别吗?
  • 不,文件的存储位置没有任何区别。
【解决方案2】:

您可以使用Encrypted Core Data 来保护您的数据。

这个库实际上会在运行时解密您的数据库。您可以将 PASSCODE 保留在 .m 文件中。 (我的假设是很难从目标文件中获取硬编码的PASSCODE)

正如@jonathan 所说,如果有人急于获取您的数据,他们会的。

编辑:

正如 Zaph 在 cmets 部分中提到的那样,不要尝试将密码直接放入您的代码中,或者通过某种逻辑在您的代码中混淆它们,因为任何急于获取您的密钥的人都可以reverse engineer your binary 并获得它。

Is it possible to reverse-engineer my iPhone application?

【讨论】:

  • 将密码放入钥匙串中,这就是它的用途。引用的 SO 问题指出:“不容易逆向工程”。如果潜在的攻击者是懒惰的,那很好,OP 可以依赖它吗?
  • 如果设备越狱了,是不是可以从设备上取密码?
  • 对于越狱的 iOS 设备,只有两个选项:针对 AES 密钥或针对用户密码 (PIN) 的暴力攻击。第一种基本上是不可能的。要攻击用户的 PIN 请求,必须向 Keychain 发出,并且受 Keychain 的速率限制,没有其他方法可以暴力破解用户的密码。 Apple 承诺,随着 CPU 速度的提高,密码尝试之间的最短时间不会减少。用户应选择扩展密码。注意:越狱的人不关心安全性,但内容所有者可能仍然关心。
  • 谢谢扎夫。我假设如果设备越狱,您可以破解钥匙串。 :)
猜你喜欢
  • 1970-01-01
  • 2011-06-24
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 2014-12-16
  • 2011-05-16
  • 1970-01-01
相关资源
最近更新 更多