Прямой эфир

А что именно могут предложить фанаты арбитрам кроме денег?
  • avatar
  • LRN
  • 28 февраля 2011, 20:24
  • #
  • 0
Кому платить? Что платить? Зачем платить?
Понимаете ли. Одно дело — захостить у себя сервер. Другое дело платить кому-то
  • avatar
  • LRN
  • 28 февраля 2011, 20:20
  • #
  • 0
Арбитры работают за счёт фанатов.
Игровые сервера работают за счет фанатов. Такова ситуация в teeworlds.
  • avatar
  • LRN
  • 28 февраля 2011, 20:03
  • #
  • 0
А игровые сервера значит работают за просто так? :) Найти хоста — всегда проблема, в этом ничего нового нет.
Есть очень большая проблема. Арбитры не за просто так работают. А ресурсов у нас нет. Хотя схема очень интересна.
  • avatar
  • LRN
  • 28 февраля 2011, 19:28
  • #
  • +3
К сожалению мои познания в области реверс-инжиниринга бинарников и взлома компьютерных программ чрезвычайно ограничены. Поэтому есть вероятность того, что нижеизложенное основано на неверных предпосылках.

Проведём параллель с играми в реальном мире. Кто присутствует на каждом футбольном матче? Арбитр. Третье лицо, которое знает правила и следит за тем, чтобы все игроки эти правила соблюдали, причём все игроки должны соблюдать одни и те же правила. Игроки (и зрители) также могут наблюдать за процессом игры и, в принципе, могут поймать арбитра на жульничестве (если арбитр начинает рандомно показывать красные карточки, то он либо дебил, либо куплен, либо сошёл с ума). Арбитр (как правило?) дорожит своей репутацией. Игроки доверяют арбитру по умолчанию.

С компьютерными играми можно сделать то же самое: взять некое третье лицо (не обязательно сервер, принадлежащий разработчикам игры) и сделать его арбитром. Арбитр следит, за тем, чтобы ПО всех игроков было одной версии, а также мониторит отчёты, которые ему в реальном времени посылает контрольный модуль, присобаченный к клиенту. Контрольный модуль будет реагировать на попытки модификации исполняемого кода игры на лету и другие распространённые методы взлома.

Как это стыкуется с СПО? Вот тут, в общем-то, и содержится основное слабое место этой схемы.
Контрольный модуль — это бинарник, причём крепко зашитый. Предпочтительно — зашитый каким-то очень случайным образом (я хз, как вообще это делается). Плюс, его код также может содержать случайные последовательности. В общем, любые методы, которые предотвращают автоматический взлом. Бинарник этот посылается арбитром одновременно всем игрокам. Возможно потребуется некая синхронизация передачи данных, чтобы все игроки закончили скачивать бинарник примерно в один и тот же момент. В этот момент бинарник активируется на каждом из клиентов и в течение N секунд должен законнэктиться (PSK, ключ вшит в бинарник) к арбитру и подтвердить свою подлинность и целостность. После чего он запускает игру, проверяет версию её модулей, и начинает следить за её процессами, предотвращая их изменение. Периодически (раз в M минут) арбитр генерирует новую версию бинарника и отсылает её игрокам вместе с исходниками предыдущей версии (таким образом игроки получают действительно свободное ПО — только с некоторой задержкой) и информацией о том, как расшифровать данные, которые передавал бинарник всё это время.

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

То есть система основана на предположении, что можно генерировать бинарники, которые не могут быть взломаны игроками (и в которых зашитые ключи не могут быть найдены) быстрее чем за N секунд. Также предполагается, что игроки не могут модифицировать код модуля контроля после его запуска (или могут, но неспособны вычислить и внести все нужные изменения быстро и атомарно). Также предполагается, что игроки доверяют арбитру, то есть арбитры — не случайно выбранные компьютеры в Интернете, а вполне известные (имеют закрытый ключ для подтверждения) личности. Конечно, это не даёт 100% гарантию того, что они никогда не воспользуются получаемой властью в неправедных целях, но и в реальном мире никто этого не гарантирует. Кроме того возможности, которые дают им модули контроля, довольно ограничены.

Игра разбивается на несколько кусков, все важные для игрового процесса данные пересылаются через модуль контроля и поэтому передаются в зашифрованном виде. Куски, не содержащие влияющих на игровой процесс частей, могут модифицироваться свободно, модуль контроля не будет возражать. Куски, которые влияют на игровой процесс, в своей совокупности должны быть совместимы друг с другом и совместимы с клиентским кодом других игроков («совместимы» означает, что они поддерживают одну и ту же версию протокола и правил игры, они не обязательно должны быть идентичны с точностью до бита, т.к. могут быть на разных платформах), арбитр это проверяет по хэшам этих кусков (хэши считает и передаёт модуль контроля). Арбитр хранит у себя большой набор таблиц совместимости кусков по их хэшу, этот набор он также показывает игрокам перед началом игры (чтобы игроки знали, какие версии клиента поддерживаются). Одобренные как «чистые» версии происходят прежде всего из центрального репозитория сообщества разработчиков игры (подписываются релиз-инженером; списки одобренных версий регулярно обновляются), но арбитр волен поддерживать и модифицированные версии на своё усмотрение (главное, чтобы все игроки имели совместимые модификации).

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

Что-то типа того.
  • avatar
  • nsinreal
  • 28 февраля 2011, 19:12
  • #
  • +1
Ну впервые задумался я о этой проблеме именно из-за увлечением игрой и кодингом Teeworlds. Уже объявилась парочка клоунов (а точнее три) которые написали свои собственные версии античитов (Teeworlds Trusted Client, Apofig AntiCheat, Simple AntiCheat TeeWorlds). У всех из них есть большая трабла — они не поддерживают альтернативные клиенты. Первый из них — это сам по себе отдельный клиент. Третий — самый плохой вариант (ломается за 15 минут в текущем виде). А насчет второго — был очень веселый тред на форуме z-team.

Почему я считаю, что писать такие античиты для teeworlds — это плохо:
1. Это OpenSource игра, и либо вы забираете возможность использовать моды, либо вы не сможете отследить читы
2. Это чужая игра. Ни один из тех, кто писал свои античиты даже близко не майнтейнер teeworlds (а некоторые даже в принципе не понимают основ программирования, а также работы игры)
3. Нет системы игровых аккаунтов. Можно сменить имя и выйти из игры.

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

Как это можно было бы сделать:
1. Античит система (проприетарная, с закрытыми исходниками) при запуске сверяет файл с оригиналом или предыдущей версией игры.
2. Если есть отличия, то файл игры загружается на специальный сервер, где впоследствии будет проверяться (процесс загрузки можно оптимизировать, допустим для каждого 4096-байтного блока считать md5 и отправлять на сервер с целью узнавания, была ли такая версия игры уже).

Естественно, такая система имеет недостаток, который заключается в том, что используется ручная проверка, но по крайней мере это не убило бы всю систему моддинга.
— Однако, задача указанная в топике — немного другая. Там вообще не должно быть затрат со стороны администраторов. Т.е. запустил один раз — и оставил до следующей версии.
  • avatar
  • Brodyaga
  • 28 февраля 2011, 18:46
  • #
  • +1
Вы чуть ли не полностью описали teeworlds и его проблемы.
  • avatar
  • fog
  • 28 февраля 2011, 13:06
  • #
  • -1
О, похоже Parallels все же ждут перемены, и если уж их не купит кто-то из «больших» игроков, то вероятен выход на IPO:
На днях агентство Reuters сообщало, что IPO Parallels может состояться в 2011 г. — не ранее осени. Сергей Белоусов в конце прошлого года также не отрицал такой возможности.
Кстати, Еще один топ-менеджер Microsoft перешёл в Parallels
Под wine 1.3.13 iWallet у меня совсем не стартует, но предложение добавил в топик.
  • avatar
  • Solovej
  • 28 февраля 2011, 10:28
  • #
  • 0
Я два часа генерировал и плюнул на это дело. :)
Не на генерировал ни одной монеты.
Начал смотреть что можно за это купить. Оказалось что ничего путного не продается.
А я то думал что за эти деньги можно хотя бы HDD купить, а там только фига.
Вот пусть создатели и генерируют себе сами. :)
  • avatar
  • Expertis
  • 27 февраля 2011, 23:48
  • #
  • +1
Товарищи! Сумел несколько продвинуться в решении данной проблемы. Для того, чтобы в запущенном под вайном кошельке стояла англ. раскладка, но писались нормальные русские буквы, нужно передать при запуске переменную LC_MESSAGES=en_US.UTF8.
То есть запускать так: LC_MESSAGES=en_US.UTF8 wine iWallet.exe
У меня данный метод сработал, чего и вам желаю. Если автор включит эту информацию в пост, она должна многим помочь, ибо в рунете вопрос обсуждается часто, а нормальное решение никто толком не нашёл.

P.S.
Почему именно MESSAGES — хоть убей не пойму, вроде бы оно не за ввод отвечает, а скорее наоборот — за вывод.
Генерировать монеты — это хорошо. Но вот что потом с ними делать? Можно обменять на другую валюту или купить на них что-то, Мне нравится больше второй вариант.
  • avatar
  • NOX
  • 27 февраля 2011, 17:43
  • #
  • +1
«Что наша жизнь? — Игра!» :)
По прочтении понял что с толком потратил время, статья стоит того.
  • avatar
  • fog
  • 27 февраля 2011, 15:12
  • #
  • -1
у финов же наоборот нет софта
У финов хорошие операционки Symbian и MeeGo, которые реально довести до отличного состояния не более чем за 10 месяцев («массово» телефоны с WH7 у нокии появятся не раньше чем через год), великолепная платформа Qt, конкурентноспособные сервисы Ovi. Единственное, что не хвотало Nokia — грамотного управленца, не из тех «телифонистов», которые протирали штаны до последнего времени, а из молодых, амбициозных и видящих, куда движется рынок. Элоп совсем не из таких. И он потопит Nokia окончательно.
Какое же у вас скептическое отношение к сабжу. У мелкомягких все плохо потому что нет железа (моцарт ужасен, имхо), у финов же наоборот нет софта (миго загнулась из-за недостаточной рекламы). Так что, мне кажется, что не плохой получится альянс. Ну, как говорится, поживем — увидим.
:))
  • avatar
  • v1ctor
  • 27 февраля 2011, 10:56
  • #
  • 0
Хм… На счет растра сомневаюсь. Спокойной можно извлечь текст из pdf файла. Разделение вроде мета информацией. Файл стал в 2 раза больше (видимо из-за использования первого 2 раза). Как в одном файле 2 раза указать мету для правого и левого листа я не нашел.