繁体   English   中英

如何保护核心数据iPhone应用程序中的sqlite数据库?

[英]How to protect sqlite db in your core-data iPhone app?

我有一个基于Core Data的iPhone应用程序,带有预先填充的只读数据库。 我可以对我的数据库应用什么保护(如果有的话)以减少盗版/数据库从被囚禁的iPhone中读取的可能性?

大多数使用预先填充的sqlite数据库的代码示例都显示数据库正在从应用程序包中复制到iPhone上的应用程序文档目录中,这在被囚禁的iPhone上完全可见。 相反,我考虑直接从应用程序包中使用数据库,如下所示:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

    if (persistentStoreCoordinator != nil) {
        return persistentStoreCoordinator;
    }

    NSURL *storeUrl = [NSURL fileURLWithPath: 
        [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:
             @"MyDatabaseName.sqlite"]];

    <... followed by standard persistentStoreCoordinator code ...>

当我在商店网址上放置一个断点时,这只会返回另一个文件位置,我猜这个位置就像在一个破损的iPhone中的文档目录一样可见:

<CFURL 0x139610 [0x38388ff4]>{type = 15, string = file://localhost/var/mobile/Applications/6ACD76F0-396D-4DB1-A46B-B2459A084063/MyiPhoneApp.app/MyDatabaseName.sqlite, base = (null)}

有人可以确认以上是否正确和/或是否有其他方法来解决这个问题(我不打算加密或类似的东西......希望快速保护解决方案)? 欣赏坚定的黑客会得到他们想要的东西 - 如果可以的话,我想至少提出一些阻力。

谢谢

首先,是的,您可以在应用程序包中存储只读数据库,并直接从那里访问它。

其次,保护数据的唯一方法是将其加密到磁盘上并在内存中加密。 使用当前形式的Core Data无法轻松完成此操作。 您可以做的是加密数据库的某些列并仅在内存中解密它们。 这是通过将列存储为二进制数据来实现的,但这也意味着您无法对这些列进行任何搜索。

更新

甚至试图避免越狱手机(这不是100%保证这个人是罪犯。请记住,开发人员经常以诚实的理由越狱他们的手机)。 不会保护您的数据。 数据位于桌面计算机上的zip文件内,无需运行或触摸CocoaTouch设备即可访问。

如果数据是私有的,那么您需要将其放在Web服务上,而不是将其存储在设备上。 该设备(或就此而言的任何设备)上的任何内容可以被访问且受到逆向工程。

你可以试试这个: https//github.com/calebmdavenport/encrypted-core-data它看起来很早,但如果你有一个简单的数据模型,你可能能够让它工作。 使用sqlcipher。

您也可以尝试加密Transformer类。 可以打破谓词。 如果您使用nspredicates并且根据您的安全需要,您可以选择保留相对字母顺序的加密算法(如果必须,请自行滚动)。 这将允许您使用谓词。 这个页面的底部用代码示例解释了如何做到这一点(尽管你需要找到一个合适的加密算法作为他们的断点谓词): http//blog.artlogic.com/tag/encryption/加密字段而不是整个数据库。

停止/检测越狱不会阻止任何事情。 您可以在Finder中打开应用程序包文件,而无需进行越狱或任何特殊操作。 同步到itunes将你的应用程序.ipa文件拉下来,所以你需要做的就是转到该文件并打开它以获取应用程序的包数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM