iPhone: Как исправить чит на основе изменения даты устройства?Есть ли сервер, с которого я могу получить время? - PullRequest
6 голосов
/ 11 января 2011

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

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

Ответы [ 7 ]

4 голосов
/ 11 января 2011

Вы можете использовать NTP-сервер, который сообщает вам время.

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

Лучшим решением было бы использовать что-то вроде Google App Engine (бесплатно), чтобы отправить вашему приложению какой-то зашифрованный ответ, которыйбудет сводиться к времени сервера.Если время клиента слишком сильно отклоняется от этого, приложение просто использует время сервера для расчетов.Тогда даже если они перехватят запрос, им будет нелегко отправить правильный ответ.

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

1 голос
/ 11 января 2011

Вы можете использовать любой NTP-сервер (см. http://www.ntp.org/).

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

1 голос
/ 11 января 2011

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

0 голосов
/ 19 марта 2019

Если вы внимательно посмотрите в заголовках ваших HTTP-запросов и ответов, то обнаружите, что информация о времени, необходимая для определения смещения часов от сервера к клиенту, почти всегда уже доступна.

Для отслеживания абсолютного времени при отключенной работе вы можете использовать системные часы MONOTONIC, на iOS это часть интерфейса ядра . Вам также нужно сохранить загрузочный UUID и время загрузки из sysctl, чтобы можно было перезагружать систему.

0 голосов
/ 11 февраля 2016

iPhone: откройте игру, загрузите ее, используйте всю энергию, а затем перейдите к: * Настройки * Общие * Дата и время Выключить авто Установить на 1 час вперед (или больше, в зависимости от времени ожидания IE Energy заполнен за 3 часа, установлен на 3 часа вперед) Повторно открыть игру, не работает для каждой игры

0 голосов
/ 11 января 2011

Если он-лайн, вам следует проверить NTP-сервер или, предпочтительно, свой собственный сервер отметок времени, используя зашифрованный протокол.

В автономном режиме вы можете либо не добавлять валюту, либо ставить отметку времени при добавлении валюты и проверять на мошенничество (метки времени изменяются немонотонно слишком сильно, чтобы учесть перемещение и смещение часов) каждый раз, когда приложениестановится активным.Тогда вы можете каким-то образом обесценить любой нечестно полученный выигрыш: загорается виртуальный сарай, все в игре внезапно становится дороже, плата за банковский перевод становится больше суммы перевода и т. Д.

0 голосов
/ 11 января 2011

Один из способов обеспечить хотя бы уровень защиты, если вы абсолютно не можете проверить удаленный ntp-сервер

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

...