Как защитить sqlite db в приложении iPhone с основными данными? - PullRequest
6 голосов
/ 18 мая 2010

У меня есть приложение для iPhone на основе Core Data с предварительно заполненной базой данных только для чтения. Какую защиту (если таковая имеется) я могу применить к моей базе данных, чтобы уменьшить вероятность пиратства / чтения базы данных с поврежденного 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)}

Может ли кто-нибудь подтвердить, если вышеприведенное является правильным и / или есть ли другие способы решения этой проблемы (я не ищу шифрование или что-то в этом роде ... надеюсь на быстрое решение для защиты)? Ценить решительного хакера получит то, что он хочет - я хочу, по крайней мере, оказать некоторое сопротивление, если смогу.

Спасибо

Ответы [ 2 ]

9 голосов
/ 18 мая 2010

Во-первых, да, вы можете хранить базу данных, доступную только для чтения, внутри своего пакета приложений и получать к ней доступ напрямую.

Во-вторых, единственный способ защитить данные - это сохранить их в зашифрованном виде на диске и в незашифрованном виде в памяти. Это не может быть легко сделано с использованием Core Data в его нынешнем виде. Что вы можете сделать, это зашифровать определенные столбцы базы данных и расшифровать их только в памяти. Это достигается сохранением столбцов в виде двоичных данных, но это также означает, что вы не можете выполнять поиск по этим столбцам.

Обновление

Даже пытаясь избежать взломанных телефонов (что не является 100% гарантией того, что человек является преступником. Имейте в виду, что разработчики часто делают джейлбрейк своих телефонов по честным причинам). не будет защищать ваши данные. Данные хранятся в zip-файле на их настольном компьютере и доступны без запуска и без прикосновения к устройству CocoaTouch.

Если данные являются конфиденциальными, вам нужно поместить их в веб-сервис и никогда не сохранять на устройстве. Все, что на устройстве (или любом другом устройстве) доступно и подлежит реинжинирингу.

2 голосов
/ 28 ноября 2012

вы можете попробовать это: https://github.com/calebmdavenport/encrypted-core-data Он выглядит на ранних стадиях разработки, но если у вас есть простая модель данных, вы, возможно, сможете заставить ее работать. использует sqlcipher.

Вы также можете попробовать класс Encryption Transformer. Может нарушать предикаты. Если вы используете nspredicates и в зависимости от ваших потребностей в области безопасности, вы можете выбрать алгоритм шифрования, который сохраняет относительный алфавитный порядок (сверните свой собственный, если нужно). это позволит вам использовать предикаты. нижняя часть этой страницы объясняет с примерами кода, как это сделать (хотя вам нужно будет найти подходящий алгоритм шифрования в качестве предикатов их разрывов): http://blog.artlogic.com/tag/encryption/ Шифрует поля, а не всю базу данных.

остановка / обнаружение взлома тюрьмы ничего не остановит. Вы можете открыть файл пакета приложений на вашем Mac в Finder без джейлбрейка или чего-то особенного. синхронизация с itunes тянет файл .ipa вашего приложения вниз, поэтому все, что вам нужно сделать, это перейти к файлу и открыть его, чтобы получить данные пакета приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...