Подтвердить что ты не робот

Безопасные онлайн-рекорды для не-веб-игр

Я играю с родной (не-паутинной) однопользовательской игрой, которую я пишу, и мне показалось, что с ежедневным/еженедельным/все время онлайн-рекордом (думаю, Xbox Live Leaderboard) сделают игру намного интереснее, добавив немного (небольшого) количества сообщества и конкуренции. Тем не менее, я боюсь, что люди увидели бы такую ​​функцию, как приглашение на взлом, что помешало бы обычным игрокам из-за невероятно высоких результатов.

Я думал о очевидных способах предотвращения таких попыток (например, шифрование с открытым/закрытым ключом, например), но я выяснил достаточно простые способы, которыми хакеры могли обойти все мои идеи (извлечение открытого ключа из двоичного файла и, таким образом, отправка поддельных зашифрованных баллов, например).

Были ли вы когда-либо внедрены онлайн-рекорды или списки лидеров? Вы нашли достаточно безопасный для хакеров способ реализации этого? Если да, то как вы это сделали? Каковы ваши впечатления от попыток взлома?

4b9b3361

Ответ 1

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

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

  • Оставьте черных читеров в honeypot. Они могут видеть свои собственные оценки, но никто другой не может. Если они не проверяются при входе в систему с другой учетной записью, они считают, что они успешно взломали вашу игру.
  • Когда кто-то помечен как мошенник, отложите любые последствия учетной записи от трансляции до определенного момента в будущем. Сделайте этот случай случайным, в течение одного-трех дней. Как правило, читер попробует несколько методов и в конечном итоге добьется успеха. Откладывая обратную связь с учетной записью до более поздней даты, они не понимают, что их поймало.
  • Захват всех пользовательских команд игры и отправка их на сервер. Проверьте их на другие оценки в пределах определенной дельта. Например, если игрок использовал действие стрельбы 200 раз, но получил 200 000 очков, но соседние игроки в игре выстрелили 5000 раз, чтобы получить партию в 210 000, это может спровоцировать порог, который обозначает человека для дальнейшего или человеческого исследование.
  • Добавьте значение и постоянство в учетные записи пользователей. Если у ваших учетных записей пользователей есть открываемые блоки для вашей игры или если ваша игра требует покупки, вес запрета больше, так как пользователь не может восстановить свой прежний статус учетной записи, просто создав новую учетную запись через веб-прокси.

Ответ 2

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

  • Отправьте дополнительную информацию с помощью запросов с высокой оценкой, чтобы подтвердить ее на стороне сервера. Если вы получаете 5 очков за каждый X, а игра содержит только 10 Xs, то у вас есть дополнительные обручи, чтобы хакер мог перепрыгнуть, чтобы получить их оценку, принятую как действительную.
  • Попросите сервер отправить случайный вызов, который должен быть выполнен с несколькими байтами двоичного файла игры из этого смещения. Это означает, что хакер должен хранить чистую копию двоичного файла (просто немного больше проблем).
  • Если у вас есть лицензионные ключи, для их включения требуются высокие баллы, поэтому вы можете запретить людям, пойманным взломать систему. Это также позволяет отслеживать недействительные попытки, как указано выше, чтобы запретить людям тестировать протокол до того, как когда-либо даже представит действительный результат.

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

Ответ 3

Честно говоря, я не думаю, что это возможно.

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

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

Ответ 4

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

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

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

Одна вещь, которая может быть довольно эффективной, состоит в том, чтобы заставить игру отправить баллы на сервер несколько раз, когда вы играете, каждый раз отправляя бит информации о геймплеях, позволяя вам проверить, является ли оценка "реалистичной". Но это может быть немного по-настоящему.

Ответ 5

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

Этот метод не идеален, вы все равно можете обманывать, замедляя игру (если она основана на действии) или написанием бота.

Ответ 6

Это очень трудный вопрос.

Я никогда не реализовывал такую ​​вещь, но здесь было простое aproximmation.

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

Хорошо, прежде всего, если ваше приложение не имеет большого успеха, я бы не стал беспокоиться. Делать такие вещи крайне сложно.

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

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

  • Скажем, оценка - это некоторое число m
  • Вычислите какую-то проверку по счету (например, CRC или любая другая система, которую вы видите на ногах. На самом деле, если вы просто изобретаете ее, независимо от того, насколько она хромой, она будет работать лучше).
  • Получить секретный ключ пользователя (D) с удаленного сервера (очевидно, через безопасное соединение). Вы единственный, кто знает этот ключ.
  • Вычислить X = m ^ D mod n (n - открытый модуль вашего алгоритма общедоступного/закрытого ключа) (то есть шифровать его: P)

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

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

Последнее примечание

Obfuscator для .NET

Обфускатор для Delphi/С++

Обфускатор для ассемблера (x86)

Ответ 7

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

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

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

Ответ 8

@Martin.

Вот как я считаю, что Марио Карт Вий работает. Дополнительный бонус состоит в том, что вы можете позволить всем остальным игрокам наблюдать за тем, как обладатель высоких очков получил высокий балл. Самое забавное в том, что если вы проверите самый быстрый "временной маршрут" Grumble Volcano, вы увидите, что кто-то нашел ярлык, который позвольте вам пропустить 95% дорожки. Я не уверен, что у них все еще есть самое быстрое время.

Ответ 9

Вы не можете сделать это на ненадежной клиентской платформе. На практике можно победить даже некоторые "доверенные" платформы.

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

Другие методы, описанные выше, могут помочь, но не решают основной проблемы работы на ненадежной платформе.


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

Ответ 10

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

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

Даже просто зная, что если вы упорно трудиться, чтобы сделать бота, просто быть сбит снова с помощью системы отчетов, является сдерживающим фактором в себе.

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

Если что-то анти-чит-система не может найти, пользователи найдут ее.