2016-01-18 3 views
0

Я создаю игру для iOS и OSX в Xcode с помощью Objective-C.Как безопасно хранить данные для моего приложения

Основная проблема, с которой я сталкиваюсь, заключается в поиске методов предотвращения мошенников от взлома моей игры.

Недавно я узнал, как сохранять/читать информацию через списки свойств. В версии OSX приложения я могу напрямую обращаться к этим спискам и редактировать их, щелкнув правой кнопкой мыши на приложении, выбрав «Содержимое пакета», а затем «Ресурсы». Мой первоначальный план состоял в том, чтобы хранить/редактировать данные, например, высокие баллы и т. Д. Очевидно, что основным недостатком этого будет то, что пользователи этого приложения смогут легко обманывать.

В дополнение к этому, я сыграл много игр для iOS, где я видел, как пользователи обманывали табло, а иногда даже пользователи, которые, похоже, взломали игру, поскольку у них есть большие суммы денег, которые у них определенно не могут быть (пример, о котором я думаю, - это соревновательная игра с защитой башни, в которой оба игрока начинают с 0 наличными и зарабатывают определенное количество каждые несколько секунд. Игроки определенно взломали, если они приобрели 100x наличных денег, чем это возможно в первые несколько секунд).

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

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

  2. Есть ли способ скрыть эти списки свойств/данные внутри приложения, чтобы хакеры не могли получить к ним доступ? Или они, в конце концов, найдут их, если они будут выглядеть достаточно жестко?

  3. Если вышеприведенные 2 невозможно или по-прежнему оставляют возможность читеров, то лучшим решением будет кодирование данных в этих списках, чтобы их можно было читать только с помощью какого-либо ключа? Например. каждый балл, который я хранил, будет закодирован путем деления на -129, в то время как они будут прочитаны приложением путем умножения на -129.

Возможно, кто-то порекомендует решение этой проблемы как для OSX, так и для iOS?

+0

Я бы предложил использовать plist для хранения данных, но по соображениям безопасности перед сохранением данных в Pilst вы можете использовать некоторые алгоритмы кодирования-декодирования в вашем коде. Если какой-либо хакер может получить ваш plist, он/она не сможет расшифровать ваши данные. –

ответ

0

Я бы сказал, что лучшим решением для этого было бы сохранить это значение на сервере, и они будут доступны только после аутентификации и соединения HTTPS.

Недостатком другого подхода является то, что он не будет доступен в автономном режиме.

Так что если вы хотите иметь автономный доступ, а затем вы можете очень хорошо использовать plist. Единственное, что вам нужно сделать, это зашифровать файл и записать его в каталог документов. Вы можете конвертировать ваши plists в данные, а затем шифровать и писать. Ключ может быть паролем пользователя, который можно сохранить в цепочке ключей iOS.

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

Вы можете использовать этот library для шифрования.

+0

Благодарим вас за ответ.Нет ли места, где я могу «спрятать» файл, если я ищу офлайн-доступ? И с помощью метода сервера, могут ли хакеры не пытаться изменять значения, которые отправляются на сервер из приложения? – Shuri2060

+1

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

+0

Раньше я планировал также хранить здесь настройки игры (например, я имею в виду, например, количество врагов/трудности и т. Д.), Но, видя, что я не могу скрыть файлы, возможно, это было бы лучше всего жестко кодировать эту информацию в самом коде (если я не беспокоюсь о кодировании информации)? – Shuri2060

Смежные вопросы