Насколько легко взломать файл plist в приложении магазина приложений? - PullRequest
6 голосов
/ 17 марта 2010

Не волнуйтесь, я не пытаюсь взломать чужое приложение, если вы об этом думаете =).

Я хочу иметь 2 версии моего приложения, бесплатную версию и версию «делюкс». Мой план состоял в том, чтобы использовать покупку из приложения, чтобы включить версию deluxe, установив логическое значение в файле plist.

У меня вопрос: это безопасно или его легко обойти? И если это не безопасно, кто-то может предложить простую альтернативу? Я не хочу загружать дополнительный контент, я бы предпочел сохранить все функции в приложении и как-то включить его.

Редактировать: я имею в виду не файл plist приложения, а что-то вроде файла по умолчанию пользователя.

Ответы [ 7 ]

4 голосов
/ 17 марта 2010

Вы должны хранить это в связке ключей, это то, что я сделаю. Связка ключей гораздо более безопасна, чем .plist или пользовательские настройки по умолчанию (которые, насколько я знаю, тоже .plists). Взгляните на SFHFKeychainUtils , вы должны быть в состоянии использовать это или просто реализовать лучший метод именно для того, чтобы сохранить простой bool.

3 голосов
/ 26 сентября 2012

Легко редактировать 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. Если ОСВ зависит от устройства, копирование бесполезно.

2 голосов
/ 18 марта 2010

Я бы рекомендовал прочитать на проверку покупок в приложении . Для меня это звучит так, будто вы пытаетесь создать собственную систему проверки покупок в приложении, которая может быть связана с проблемами, о которых вы, возможно, еще не думали. С покупками вашего пользователя нужно быть осторожным, чтобы в вашем приложении он вел себя так же, как и в любом другом, чтобы вы не потеряли его доверие (и будущие продажи!)

1 голос
/ 18 марта 2010

У любого пирата сломанный iPhone Любое сломанное устройство предлагает полный доступ к файловой системе через такие инструменты, как PhoneDisk и т. Д. Любой доступ к файловой системе позволяет людям изменять значения в ваших приложениях .plist file

Игра окончена.

Теперь, это не тривиально, чтобы обернуть это для детишек сценария, но опять же это не так сложно.

1 голос
/ 17 марта 2010

У меня нет ответа, но кажется, что динамическое редактирование вашего plist-файла невозможно, если я доверяю этой теме :

Вы не можете редактировать свой info.plist файл динамически. Когда вы отправляете приложение в App Store, ваш пакет приложений, который включает в себя info.plist, не может изменить, потому что подпись создана когда вы компилируете ваше приложение основано на расслоение.

1 голос
/ 17 марта 2010

Вместо того, чтобы беспокоиться о файле Info.plist, почему бы просто не установить предпочтения? Где-то в вашем коде это даст вам логическое значение:

[[NSUserDefaults standardUserDefaults] boolForKey:@"someKey"];

Если значение не существует, результат будет nil. Этот код устанавливает значение:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"someKey"];

Кроме того, эти значения будут сохранены в iTunes, поэтому, если пользователь перемещает свою резервную копию на новый iPhone или просто восстанавливает из резервной копии, значения будут восстановлены.

0 голосов
/ 18 марта 2010

Сохранение состояния по умолчанию не более и не менее безопасно от конфиденциальности, чем наличие двух версий вашего приложения. Пираты либо пиратят версию deluxe, либо пиратят унифицированную версию с установленным флагом.

...