У меня есть Базовое Основанное на данных приложение для 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)}
Кто-то может подтвердить, корректно ли выше и/или если существуют другие способы решить эту проблему (я не надеюсь шифровать, или что-нибудь как этот... надеющийся на быстрое защищает решение)? Цените решительного хакера, получит то, что они хотят - я хочу, по крайней мере, поднять некоторое сопротивление, если я могу.
Спасибо
Во-первых, да, вы можете хранить базу данных, доступную только для чтения, внутри вашего пакета приложений и получать к ней доступ прямо оттуда.
Во-вторых, единственный способ защитить данные - это хранить их в зашифрованном виде на диске и в незашифрованном виде в памяти. Это нелегко сделать с использованием Core Data в его нынешнем виде. Что вы можете сделать, так это зашифровать определенные столбцы базы данных и расшифровать их только в памяти. Это достигается за счет сохранения столбцов в виде двоичных данных, но это также означает, что вы не можете выполнять поиск в этих столбцах.
Даже при попытках избежать взломанных телефонов (что не является 100% гарантией того, что этот человек является преступником. Имейте в виду, что разработчики часто делают джейлбрейк своих телефонов по честным причинам). не защитит ваши данные. Данные хранятся в zip-файле на их настольном компьютере и доступны без запуска или касания устройства CocoaTouch.
Если данные являются конфиденциальными, вам необходимо разместить их в веб-сервисе и никогда не хранить на устройстве. Все на устройстве (или любом другом устройстве) доступно и подлежит обратному проектированию.