Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Безопасные онлайн-списки рекордов для не-веб-игр
Я играю с родной (не веб -) однопользовательской игрой, которую я пишу, и мне пришло в голову, что наличие списка рекордов daily/weekly/all-time онлайн (думаю, что Xbox Live Leaderboard) сделает игру намного интереснее, добавив некоторое (небольшое) количество сообщества и конкуренции. Однако я боюсь, что люди увидят такую функцию, как приглашение к взлому, что будет препятствовать обычным игрокам из-за невероятно высоких баллов.
Я думал об очевидных способах предотвращения таких попыток (public/private key encryption, например), но я выяснил достаточно простые способы, которыми хакеры могли бы обойти все мои идеи (извлечение открытого ключа из двоичного файла и, таким образом, отправка поддельных зашифрованных результатов, например).
Вы когда-нибудь реализовывали онлайн-список рекордов или таблицу лидеров? Нашли ли вы разумно защищенный от хакеров способ реализации этого? Если да, то как вы это сделали? Каковы ваши впечатления от попыток взлома?
В конце концов, вы полагаетесь на доверие клиента. Если клиент отправляет повторы на сервер, достаточно легко воспроизвести или изменить успешное прохождение игры и отправить его на сервер.
Ваша лучшая ставка-поднять планку для мошенничества выше того, что игрок посчитал бы достойным преодоления. Для этого существует ряд проверенных (но часто не упоминаемых) методов, которые вы можете использовать:
- Оставьте черный список мошенников в горшочке с медом. Они могут видеть свои собственные оценки, но никто другой не может. Если они не подтвердят это, войдя в систему с другой учетной записью, они думают, что успешно взломали вашу игру.
- Когда кто-то помечен как мошенник, отложите любые последствия для учетной записи до определенного момента в будущем. Сделайте этот пункт случайным, в течение одного-трех дней. Как правило, мошенник будет пробовать несколько методов и в конечном итоге добьется успеха. Откладывая отзыв о состоянии счета до более поздней даты, они не понимают, что их поймало.
- Захватите все команды пользователя игры и отправьте их на сервер. Сверьте их с другими оценками в пределах данной дельты. Например, если игрок использовал действие выстрела 200 раз, но получил оценку 200 000, но соседние игроки в игре выстрелили 5000 раз, чтобы получить оценку 210 000, это может вызвать порог, который помечает человека для дальнейшего или человеческого исследования.
- Добавьте ценность и сохраняемость вашим учетным записям пользователей. Если ваши учетные записи пользователей имеют разблокируемые файлы для вашей игры, или если ваша игра требует покупки, вес бана больше, поскольку пользователь не может восстановить свой предыдущий статус учетной записи, просто создав новую учетную запись через веб-прокси.
Ни одно решение никогда не будет идеальным, пока игра работает на системе под контролем пользователя, но есть несколько шагов, которые вы можете предпринять, чтобы сделать взлом системы более сложным. В конце концов, цель может быть только в том, чтобы сделать взлом системы больше проблем, чем это стоит.
- Отправьте некоторую дополнительную информацию с запросами высокого балла для проверки на стороне сервера. Если вы получаете 5 очков за каждый X, а игра содержит только 10 Xs, то у вас есть несколько дополнительных обручей, чтобы заставить хакера перепрыгнуть через них, чтобы их оценка была признана действительной.
- Пусть сервер отправит случайный вызов, который должен быть удовлетворен несколькими байтами двоичного кода игры из этого смещения. Это означает, что хакер должен хранить нетронутую копию двоичного файла (просто немного больше проблем).
- Если у вас есть лицензионные ключи, требуйте высоких баллов, чтобы включить их, так что вы можете запретить людям, пойманным на взломе системы. Это также позволяет отслеживать недействительные попытки, как определено выше, чтобы запретить людям тестировать протокол до того, как они когда-либо даже представят действительный балл.
В целом, однако, получить достаточно популярную игру, чтобы люди захотели взломать ее, вероятно, гораздо более сложная задача.
Честно говоря, я не думаю, что это возможно.
Я уже делал это раньше, используя довольно простое шифрование ключа с помощью сжатого двоичного кода, который работал достаточно хорошо для безопасности, которую я требовал, но я честно думаю, что если кто-то считает взлом вашей онлайн-таблицы рекордов взломом, это будет сделано.
Есть некоторые довольно грустные люди, которые также оказываются довольно умными, если вы не можете заставить их всех переспать, это безнадежное дело.
Я проделал кое-что из этого с моими Flash играми, и это действительно проигранная битва. Особенно для ActionScript, который может быть декомпилирован в несколько читаемый код без особых усилий.
То, как я это делаю, - это довольно обычный подход к отправке счета и имени игрока в обычном тексте, а затем hash из двух (правильно посоленных). Очень немногие люди достаточно решительны, чтобы приложить усилия, чтобы понять это, и те немногие, кто это делает, все равно сделают это, отрицая все время, которое вы вкладываете в это.
Подводя итог, моя философия заключается в том, чтобы тратить время на то, чтобы сделать игру лучше и просто сделать ее достаточно сложной, чтобы обмануть.
Одна вещь, которая может быть довольно эффективной, - это то, что игра отправляет счет на сервер несколько раз, когда вы играете, отправляя каждый раз немного информации о геймплее, позволяя вам проверить, является ли счет "realistic". Но это может быть немного over-the-top на самом деле.
Это действительно трудный вопрос.
Я никогда не реализовывал такую вещь, но вот простой пример.
Ваша главная проблема связана с тем, что хакеры угадывают, что именно делает ваше приложение, а затем отправляют свои собственные результаты.
Ну, во-первых, если ваша заявка не будет иметь большого успеха, я бы не волновался. Делать такое крайне сложно.
Шифрование не поможет решить эту проблему. Видите ли, шифрование помогает защитить данные на своем пути, но оно не защищает ни одну из сторон транзакции до того, как данные будут зашифрованы (что является основной уязвимостью). Таким образом, если вы зашифруете данные, то они останутся конфиденциальными, но не будут безопасными.
Если вы действительно беспокоитесь об этом, я предложу запутать код и разработать систему оценки таким образом, чтобы не было совершенно очевидно, что происходит. Здесь мы можем позаимствовать некоторые вещи из протокола шифрования. Вот такой пример:
- Допустим, счет идет на какое-то число m
- Вычислите какую-то проверку по счету (например, CRC или любую другую систему, которую вы видите). На самом деле, если вы просто придумаете один, независимо от того, насколько он хромает, он будет работать лучше)
- Получите закрытый ключ пользователя (D) с вашего удаленного сервера (очевидно, через защищенное соединение). Ты единственный, кто знает этот ключ.
- Вычислите X=m^D mod n (n - открытый модуль вашего алгоритма с открытым/закрытым ключом) (то есть зашифруйте его :P)
Как вы видите, это просто путаница другого рода. Вы можете спускаться по этой дороге столько, сколько захотите. Например, вы можете найти ближайшие два простых числа к X и использовать их для шифрования CRC и отправить его также на сервер, так что вы будете иметь CRC и счет отдельно и с различными схемами шифрования.
Если вы используете это в сочетании с обфускацией, я бы сказал, что это будет трудно взломать. Немыслимо даже то, что может быть обратным engingeered, все зависит от интереса и способности хакера, но ... серьезно, какой урод тратит столько усилий, чтобы изменить свои результаты в игре? (Если только это не WoW или что-то еще)
Последнее замечание
Обфускатор для ассемблера (x86)
@Martin.
Вот как, по-моему, работает Mario Kart Wii. Дополнительный бонус заключается в том, что вы можете позволить всем другим игрокам смотреть, как обладатель высокого балла получил высокий балл. Самое смешное в этом то, что если вы проверите самое быстрое время "ворчания вулкана" trail, вы увидите, что кто-то нашел ярлык, который позволил вам пропустить 95% трека. Я не уверен, что у них все еще есть это самое быстрое время.
Как говорится в другом ответе, вы вынуждены доверять потенциально вредоносному клиенту, и простого сдерживающего фактора плюс небольшого человеческого мониторинга будет достаточно для небольшой игры.
Если вы хотите получить причуду, то вам придется искать мошеннические схемы в данных о баллах, симметричные компании кредитных карт, просматривающей данные о сборах. Чем больше состояний клиент передает на ваш сервер, тем потенциально легче найти шаблон правильного или неправильного поведения с помощью кода. Например. предположим, что клиент должен был загрузить журнал аудита счета на основе времени (который, возможно, вы также можете использовать, чтобы позволить другим клиентам смотреть лучшие игры), сервер может затем проверить, нарушает ли журнал счета какие-либо правила игры.
В конце концов, это все еще о том, чтобы сделать его достаточно дорогим, чтобы отбить охоту обманывать табло. Вам нужна система, в которой вы всегда можете улучшить (проще обновить)код сервера, чтобы справиться с любыми новыми атаками на вашу систему проверки.
Вы не можете сделать это на недоверенной клиентской платформе. На практике можно победить даже некоторые платформы "trusted".
Существуют различные атаки, которые невозможно обнаружить в общем случае-в основном изменение переменных в памяти. Если вы не можете доверять переменным своей собственной программы, вы не можете достичь очень многого.
Другие методы, описанные выше, могут помочь, но не решают основную проблему работы на ненадежной платформе.
Из интереса, вы уверены, что люди будут пытаться взломать таблицу рекордов? У меня уже более двух лет есть онлайн-игра с тривиально-трескучей таблицей рекордов. Многие люди играли в нее, но у меня нет доказательств, что кто-то пытался взломать высокие баллы.
Как правило, самый большой защитник от мошенничества и взлома-это часы сообщества. Если оценка кажется довольно подозрительной, пользователь может сообщить о ней за мошенничество. И если достаточное количество людей сообщают об этом балле, повтор может быть проверен администраторами на предмет достоверности. Довольно легко увидеть разницу между ботом и реальным игроком, если уже есть куча игроков, играющих в игру в полной легитимности.
Администраторы должны следить только за теми баллами, которые будут подвергнуты сомнению, потому что есть небольшой шанс, что куча пользователей может вмешаться, чтобы удалить идеально заработанный балл. А администраторам приходится просматривать только те немногие результаты, о которых сообщается, так что это не слишком много их времени, даже меньше для небольшой игры.
Даже просто зная, что если вы усердно работаете, чтобы сделать бота, просто чтобы снова быть сбитым системой отчетов, это само по себе является сдерживающим фактором.
Возможно, даже шифрование данных воспроизведения тоже не повредит. Данные воспроизведения часто невелики, и их шифрование не займет слишком много места. И чтобы помочь улучшить это, сервер сам опробует повтор по контрольному журналу и удостоверится, что он соответствует достигнутому результату.
Если есть что-то, что анти-чит-система не может найти, пользователи найдут это.