Легко редактировать com.something.plist
без джейлбрейка. С помощью бесплатного инструмента * вы можете просматривать свое устройство, вы также можете редактировать и сохранять эти файлы. Если вы храните свой inapp, купите что-то вроде этого:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"com.example.pack1"];
[[NSUserDefaults standardUserDefaults] synchronize];
тогда это будет записано в список:
<key>com.example.pack1</key>
<true/>
Если вы называете ваши пакеты так: pack1, pack2 и т. Д., И кто-то редактирует ваш plist (копирует / вставляет первый ключ), он может легко использовать заблокированную функцию.
Не слишком сложным для реализации методом было бы сохранить как это:
[[NSUserDefaults standardUserDefaults] setValue:[self sha1ValueForKey:@"com.example.pack1"]
forKey:@"com.example.pack1"];
[[NSUserDefaults standardUserDefaults] synchronize];
где -sha1ValueForKey:
равно
-(NSString *)sha1ValueForKey:(NSString *)key {
return [self sha1:[NSString stringWithFormat:@"<SALT>%@", key]];
}
Вы должны изменить <SALT>
на что-то.
Вы можете найти -sha1:
здесь: http://www.makebetterthings.com/iphone/how-to-get-md5-and-sha1-in-objective-c-ios-sdk/
После этого вы можете проверить, соответствует ли ключ хеш-значению.
Если кто-то хочет взломать ваш список, он / она должен знать ваш механизм хеширования и соль.
Это не самый безопасный способ защитить ваше приложение, но его легко реализовать.
* IEXPLORER
EDIT:
Предложенный метод лишь частично защищает ваш IAP, если у пользователя нет доступа к хешированному значению. Если кто-то откуда-то получает его, легко скопировать эти данные в plist. Если ОСВ зависит от устройства, копирование бесполезно.