6

我有一个基于 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 ...>

当我在商店 url 上放置一个断点时,它只返回另一个文件位置,我猜它与越狱 iPhone 中的文档目录一样可见:

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

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

谢谢

4

2 回答 2

9

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

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

更新

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

如果数据是私有的,那么您需要将其放在网络服务上,并且永远不要将其存储在设备上。 设备(或与此相关的任何设备)上的任何内容都可以访问并进行逆向工程。

于 2010-05-18T15:41:14.580 回答
2

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

您也可以尝试加密转换器类的。可以打破谓词。如果您使用 nspredicates 并根据您的安全需求,您可以选择一种保留相对字母顺序的加密算法(如果必须,请自行选择)。这将允许您使用谓词。本页底部通过代码示例解释了如何执行此操作(尽管您需要找到合适的加密算法作为其中断谓词):http : //blog.artlogic.com/tag/encryption/ 加密字段而不是整个数据库。

停止/检测越狱不会停止任何事情。您可以在 finder 中打开 Mac 上的应用程序包文件,而无需越狱或任何特殊操作。同步到 iTunes 会拉下您的应用程序 .ipa 文件,因此您需要做的就是转到该文件并打开它以获取应用程序的包数据。

于 2012-11-28T17:47:53.523 回答