14 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Разбор протокола World Of Tanks

Разбор протокола World Of Tanks

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

Хорошо, что опыта игрового модостроительства у меня было немного — так, пару кастомных прицелов для Deer Hunter 2005 и «нелицензионный» недоклиент VATSIM/FSD с сопутствущим «взломом» протокола последнего. Ещё лучше, что ни разу не приходилось с головой погружаться в сколь-нибудь трудоёмкую и длительную отладку и дизассемблирование. То есть, с IDA и OllyDBG я поверхностно знаком, но не как с ежедневными рабочими инструментами.

В WOT играю с начала 2011 года. Не запоем, а, скорее, набегами — по 5-6 боёв вечером. Было время 2 года назад, наш клан состоял в Красном Альянсе, ходил на глобалку по ночам, выполнял какие-то тактические задачи на европейском ТВД , устраивал тренировки и спарринги, вовсю бурлили внутриигровые политические страсти, отпочковывались учебные кланы. Сейчас всего этого уже нет, и наш золотой ёжик превратился в табличку над «Домом Ветеранов».

Итак, я уверен, что в обозримом будущем никаких планов по введению полноценного режима спектатора в WOT нет и не будет. Под полноценным режимом спектатора я понимаю множественные подключения игроков в сеанс боя изначально как невзаимодействующих на игру «привидений»-наблюдателей, а не на технике. Это тот самый режим, из-за отсутствия которого комментаторы на чемпионатах WOT вынуждены заходить в бой 15-м танком, убиваемым своими на базе. Это тот самый режим, из-за которого появились моды «командирского zoom» и «кинематографической камеры» — по сути, просто костыли. А нужен такой режим затем, чтобы командир роты занимался командованием, а не скакал впереди на лихом танке по-чапаевски, чтобы он видел ситуацию на карте в целом непрерывно, а не отвлекался на неё в пылу нападения из засады. В идеале, командиру даже не нужны красоты трёхмерного мира — достаточно одной большой карты на весь монитор с игровой ситуацией в реальном времени — HP, повреждениями модулей, членов экипажа, направлениями стволов и прицелов союзной техники, засвеченных в каждый момент вражеских юнитов и прочей вспомогательной информации.

Статья в тему:  Как играют разработчики world of tanks

WOT предоставляет широкие возможности модостроительства, но такая идея выходит за рамки классического «заменить пару swf-файлов на свои». Потребуется перехват и разбор самого игрового протокола для того, чтобы иметь возможность передать на командирский планшет своё видение игровой ситуации.

Обход шифрования 0x0A-й дорогой

Первые робкие попытки пролезть в протокол танков я предпринял ещё в 2011 году. Начинать это, как и везде в подобных задачах, стоит с хорошего сниффера (кстати, в случае с VATSIM/FSD на этом можно и остановиться — внезапно оказалось, что протокол там текстовый), и я, вооружившись Microsoft Network Monitor’ом, ринулся в бой. За отчётные 3 года в схеме входа ничего кардинально не поменялось, кроме количества игровых кластеров. Сервис авторизации у каждого кластера живёт на одном IP, к нему уходит один пакет с логином-паролем, и от него приходит один пакет — как минимум, с идентификатором конкретного игрового сервера из этого же кластера, на который клиенту надо переключиться, и с чьим IP происходит весь дальнейший обмен. Выглядит это всё приблизительно так

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

Статья в тему:  Как настроить nvidia для игр world of tanks

Итак, если трафик проходит потоковое шифрование, логично предположить, что где-то в глубинах программы есть функция наподобие SendToServer(), в которой есть вызов вроде EncryptBuffer() и в которой, в конечном счёте, выполнение доходит до конкретного sendto(). Наша задача, для начала — найти, где это происходит. Загружаем танки в OllyDbg и перед нажатием на кнопку «Войти» ставим логирующий брейкпоинт на sendto().

Через несколько десятков срабатываний, уже в ангаре, вызовы sendto() становятся более монотонными, в том плане, что адрес буфера для отправки данных не меняется:

Чтобы узнать, где шифруется этот буфер, я сначала пошёл по неправильному пути — начал изучать графы вызовов в IDA и отслеживать вручную возвраты из функций. Где-то на 15-й такой функции мне это надоело, я полностью заблудился в коде и поставил брейк на запись по адресу буфера.

Брейк сработал внутри вот такой чудесной функции по адресу 0x00BAF76F, чудесность которой состоит в том, что в неё передаются 3 параметра — два адреса буфера и ещё один — их одинаковая длина. Тот самый EncryptBuffer(ptr_src,ptr_dest,len), который нам нужен. Что там лежит в незашифрованном виде, мы пока смотреть не будем, об этом позже.

Это что касается отправки данных. Как быть с приёмом? Немного сложнее, но, в целом, так же, поэтому не буду утомлять вас большими и страшными скриншотами отладчика. Схема такая — ставим брейк на recvfrom(), смотрим адрес буфера, куда складывается принятый зашифрованный пакет. Ставим брейкпоинт на чтение с адреса буфера и тут нам в очередной раз повезло — брейк срабатывает на вызове функции по адресу 0x00BAFB79, которая занимается расшифровкой блоков по 8 байт и находится, в свою очередь, в теле функции по адресу 0x00BAFB30. А уже эта функция почти такая же чудесная, как и та, что мы нашли выше: она принимает 4 параметра — два адреса буфера, их длину и какой-то флаг.

Назовём её DecryptBuffer(ptr_src,ptr_dest,len,flag). Адреса буферов, как видно, совпадают. Что полностью логично, так как при потоковом шифровании стоит ожидать одинаковой длины блоков исходного и шифротекста.

Статья в тему:  Что подарить парню который любит world of tanks

Осталась одна тонкость. Если функцию EncryptBuffer() достаточно перехватывать непосредственно перед её вызовом (т.е. ставим INT3-брейкпоинт вместо CALL) вытаскивая память по адресу ptr_src длиной len, то в момент вызова DecryptBuffer() оба указателя покажут на один и тот же блок, который ещё пока зашифрован. Поэтому перехватывать эту функцию надо перед самым возвратом, который у неё происходит командой RETN 10 по адресу 0x00BAFBA8. В этот момент на стэке лежат те же параметры, за исключением того, что ptr_src равен нулю (это нововведение версии 0.8.11, в предыдущей указатели как-то оставались равны) и адрес возврата. И ptr_dest, конечно, показывает на расшифрованный буфер. Теперь, когда мы знаем, где в клиенте WOT сообщения ещё не зашифрованы и где уже расшифрованы, нужно их оттуда автоматически вытаскивать для дальнейшего анализа.

Что же там внутри?

Здесь матёрые гуру реверс-инжиниринга, в духе «There’s an emacs command to do that» подумают: «ага, ну теперь можно написать на питонеэзотерическом языке вот такой скриптплагин для олькииды, который будет делать с этими данными всё что хочешь и даже за пивом сбегает». Но мы пойдём другим путём. Я хочу сразу ориентироваться на то, что ещё до того, как дело дойдёт до разработки командирского планшета, то есть даже для самого полноценного разбора протокола WOT мне понадобятся помощники и тестировщики, далёкие от мира программирования. Им нужен будет простой инструмент с понятным интерфейсом, выдающий легко читаемые данные.

Так что предвидя скептические ухмылки, я засел за Lazarus и набросал в нём специализированный win32-отладчик, основной функцией которого является поставить два INT3-брекпоинта в нужных местах и по их срабатыванию вытаскивать данные по адресу и длине буфера, лежащим на стеке по известным смещениям. Ещё он умеет вести txt.gz лог с hexdump’ами пакетов и записывать все прошедшие пакеты так, что их потом можно заново «проиграть» через парсер. Вот что получилось. Так WOT клиент только начинает входить в ангар.

Статья в тему:  Какой самый быстрый танк в world of tanks

А вот так он себя ведёт уже находясь в ангаре.

Какие выводы можно сделать, даже не смотря на пояснения к пакетам, которые я поленился убрать для этих скриншотов? Сразу несколько.

Во-первых, видно, что все пакеты начинаются либо с 0x48, либо с 0x58, либо с 0x78; какой-нибудь закономерности на этот счёт я ещё не уловил, кроме того, что пакеты с уже известной функцией свой значащий байт не меняют.

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

Размеры всех пакетов выравнены по границам 8 байт, что ненавязчиво указывает нам на размер блока всё того же BlowFish; пока я до этого догадался, прошло немало времени в попытках обьяснить странную «контрольную сумму» в конце, да ещё и переменной длины. В конце концов, получив в этом паддинге вместо простого мусора слово «Flags» я, наконец, прозрел.

Ну и в лучших хакерских традициях, в конце каждого пакета находится сигнатура мёртвой говядины; кто бы мог подумать где мы её найдём 🙂

После получения Session ID от сервера приезжает пакет, содержащий номер игрока в неожиданно текстовом формате (792067). А вот пакет, который начинается на 0x78 0x00 на первом скриншоте — особо интересен. Сочетание сигнатуры 0x80 0x20 вкупе с тем, что перед каждым строковым литералом в нём стоит 0x55 и байт длины строки, а после каждого 0x71 находится возрастающий номер, должно насторожить опытных питонщиков — это же, чёрт побери, Python Pickle со своим запихиванием всего подряд в мемо! Вот он такой:

В следующей части, если она заинтересует уважаемых обитателей Хабра, я расскажу о том, как в протоколе WOT передаются файлы, размеры которых намного больше реалистичного размера UDP пакета и MTU. И о том, что эти файлы оказывается сжатыми zlib’ом а внутри у них всё тот же Python Pickle с разными неожиданными вещами.

Статья в тему:  Где можно взять займ без проверки кредитной истории world of tanks

Спасибо за внимание!

UPD. Свежие новости! По агентурным данным из самого сердца КВГ, мой лёгкий намёк на потенциал коммерческого использования командирского планшета поднял «небольшой бугурт» (дословно), в результате чего кровавые модераторы в полнейшей панике наконец заметили и слили в мусорник тему проекта на официальном форуме танков, а мне было доверительным шёпотом посоветовано замылить данные своего аккаунта на скриншотах.

Классы танков

В World of Tanks Blitz вас ждет более 400 боевых машин. Они разделены на восемь наций (СССР, Германия, Великобритания, США, Франция, Япония, Китай и Сборная Европы) и четыре основных класса. Также танки делятся на уровни — с первого по десятый.

Такое разнообразие позволяет каждому выбрать свою любимую машину. Даже в рамках одного класса и уровня техника кардинально отличается. Например, немецкий легкий танк Leopard оснащается орудием с барабанным механизмом заряжания, которое наносит большой урон за короткое время. Его французский «аналог» AMX ELC bis имеет обычную пушку с сильным разовым уроном. Но она вращается только в небольшом диапазоне. И таких нюансов очень много. Машины отличаются размерами, орудиями, скоростью, маневренностью, бронированием, обзором и т.д.

Новым игрокам важно разобраться в базовых отличиях между классами техники. Она подразделяется на 4 вида:

Легкие танки

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

Средние танки

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

Статья в тему:  Как положить деньги на world of tanks blitz через терминал

Тяжелые танки

Основанная задача тяжелой техники — прессинг. Благодаря толстой броне она способна противостоять плотному огню со стороны противника. Кроме толстой «шкуры» такие танки часто обладают и мощным вооружением. Однако за все это им приходится «платить» низкой подвижностью и скорострельностью.

ПТ-САУ

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

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

Важнейшие характеристики

Выбирая планшет для работы, интернет-серфинга или просмотра видео, стоит обратить внимание на ряд параметров:

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

Высокий показатель — высокая детализация. Обратная сторона четкости изображения — большое энергопотребление и малое время автономной работы.

TFT и IPS радуют естественной цветовой гаммой и минимальной нагрузкой на глаза. А преимущества OLED-панелей — яркие цвета и высокая контрастность, создающая ощущение глубины.

Емкость оперативной и физической памяти

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

Ее лучше измерять не в гигагерцах, а в количестве баллов в независимых бенчмарках, в том числе AnTuTu и GeekBench.

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

Поддержка беспроводных коммуникаций

Минимальный набор требований к современному планшету — Wi-Fi a/c, Bluetooth 4.2, GPS. Оптимум — 4G и 5G, Wi-Fi ax, Bluetooth 5.1, NFC, ANT+, GPS, ГЛОНАСС, BeiDou и Galileo.

Статья в тему:  Когда выйдет новая графика в world of tanks

Время автономной работы

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

Интерес к 5s

Время идет, но наш «танкист» все не выпускает из рук iPhone 5s, причем на чемпионате Blitz Twister Cup 2018 один из киберспортсменов выступал именно на этом устройстве. «Маловероятно, что это зависит от тех или иных особенностей нашего продукта, — говорит Артем Иванов, — хотя, конечно, не могу не отметить тот факт, что World of Tanks Blitz позволяет комфортно играть даже на старых устройствах».

Причин популярности iPhone 5s в СНГ, по словам Артема, может быть две. Во-первых, соотношение стоимости устройств Apple и среднего дохода на душу населения в СНГ не такое комфортное, как в США и некоторых европейских странах: если гражданину США в среднем требуется 6,3 рабочих дня для покупки iPhone XS, то в России эта цифра в 10 раз выше — 64,3 дня. Во-вторых, одна из особенностей устройств Apple — возможность их комфортного использования даже спустя много лет после покупки, что позволяет не задумываться о частой смене гаджета. Таким образом, старые устройства Apple чаще остаются в использовании у мобильных геймеров из СНГ, что подтверждается статистикой от сторонних компаний: по данным DeviceAtlas, Россия одна из немногих стран, где iPhone 5s входит в топ-10 самых распространенных телефонов Apple в первом квартале 2019 года (6-е место), популярнее он только в Финляндии (2-е место).

Внутриигровая вселенная [ править | править код ]

На данный момент в World of Tanks Blitz представлено 374 танка, разбитых на 4 класса: Лёгкие танки, Средние танки, Тяжёлые танки и ПТ-САУ (обычных САУ нет и не будет из-за того, что карты слишком малы для них, а их увеличение повлечёт большую длительность боя).

Модели всех танков были взяты из PC-версии, но они упрощены. В игре отсутствует прокачка радиостанции, упрощённое дерево прокачки модулей. Серверная часть игры работает на игровом движке BigWorld [uk] * , клиентская же часть работает на собственном движке компании Wargaming.net, Dava Framework. Вся внутриигровая информация доступна как на портале игры, так и в клиенте.

Статья в тему:  Как играть на кв 4 в world of tanks

В отличие от PC версии проекта, в мобильной индикатор опыта (×2, ×3 и ×5) обновляется 2 раза в день (8:00 и 20:00 по МСК)

В различных обновлениях некоторые танки могут подвергаться правкам. Это обусловленно тем, что определённый танк может выбиваться по характеристикам, быть лучше или хуже других танков своего уровня. Так, например, в обновлении 5.9 легкому танку 4 уровня А-20 на одном из орудий дали пробитие фугасными снарядами выше, чем бронебойными, а в обновлении 6.0 пробитие фугасными снарядами уже стало хуже.

Обновление 5.5 всерьёз затронуло механику игры на низкоуровневой технике, подвергнув I—V уровни ребалансу, а также удалению «ненужной» техники и модулей. По словам разработчиков, это было необходимо в первую очередь для новичков игры, ведь танки первого уровня были слишком слабы по характеристикам и весьма трудны в понимании механик игры. В связи с этим было принято решение удалить из игры танки первого уровня (МС-1, Т1 Cunnigcham, Leichttraktor, Vickers Medium Mk. l, Renault FT, Renault Otsu, а также Renault NC-31), а на их замену стали их потомки (ранее танки II-го уровня). Также была введена долгожданная ветка немецких тяжелых танков во главе с VK.72.01 K.

Обновление 5.9 принесло в игру новые боевые задачи, разделенные по уровням. Всего их 4. Новый уровень можно получить, исследовав определённый уровень танка в одной из ветви развития. Задачи могут быть самые разные, от убийства определённого типа техники, до победы в одном из типов боев. За выполненные задачи выдаются ключи. Эти ключи можно обменивать на сундуки с различными игровыми ценностями. Так же, за выполнение всех заданий в течение недели, игроку дается особый контейнер.

Версия 3.0. принесла игрокам Blitz новый игровой режим «Превосходство». Воспринят он был достаточно неоднозначно- нашлись, как сторонники, так и противники. Сторонники, как правило, говорят о том, что новый режим пусть и не безгрешен- но это новый режим, хоть какое-то разнообразие. Противники же говорят о том, что в этом режиме в концентрированном виде вскрылись все «болячки» нынешнего рандома: карты «заточенные» под стадность, неуправляемость союзников, которые, до смешного не понимают, что с базы после ее захвата, можно съехать или же что, можно добить «шотного» противника и принести большую в целом пользу команде в середине матча, нежели захват еще одной точки. И казалось бы, очередной «токсичный» вайн, но сами разработчики подтверждают это:

Статья в тему:  Как выйти из клана в world of tanks 9.17

«. Играть стало гораздо интереснее это мое личное имхо. Меньше влияние «соло тащеров». Командная игра. Пусть пока и нет хорошего понимания. но тактическая борьба за засветы на базах, смена виража, разъезды. » © Marcius_Coriolanus

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

Цыгане тоже хотели бы с Вами поделиться своей версией командирского режима, но для начала несколько «дисклеймеров»

  1. Наша идея — не истина в последней инстанции- предлагайте, дополняйте, критикуйте, хвалите. Любое мнение начиная от «какую-то дичь придумали неумытые» до «да, это было бы действительно классно»- приветствуется.
  2. Создавая этот проект мы прекрасно понимаем- что это сложно реализовать. Что фактически на выходе мы получаем некую «игру в игре». Если не получится использовать это в целом- будем рады, если какие-то идеи разработчики все-таки подхватят. Однако, просим воздержаться от замечаний «Это невозможно!» и напоминаем: «Если что-то и стоит делать, так только то, что принято считать невозможным.» (с) Оскар Уайлд.
  3. В некоторых пунктах презентации данного режима вы можете увидеть цифры статистики, на которые мы предполагаем опираться при создании такого режима. Убедительно просим воздержаться от раша по форуму с криками, а что делать тем кто недотягивает и «пАчиму такая несправедливость». Ответим сразу- такая несправедливость потому, что командирский режим подразумевает наличие на посту командира мало-мальски адекватного игрока, поэтому простите, но если у вас 20 000 и 39%- вы можете попробовать свои силы в роли бойца.
Статья в тему:  Сколько стоит донат в world of tanks

Теперь, когда со вступительным словом покончено, разрешите представить: «Командирский режим» made by Tabor.

Краткое описание режима

Это отдельный режим боя на подобии превосходства. Битва происходит 7 на 7 + по одному командиру с каждой стороны (В случае, добавление + 1 командир невозможно исходя из неких технических или программных ограничений- тогда режим можно реализовать по модели 6 на 6 + по одному командиру с каждой из сторон). Рядовые игроки-исполнители попадая в бой играют в стандартном интерфейсе боя, командиры НЕ УЧАВСТВУЮТ в бою и получают в свое распоряжение тактический планшет, на котором отображается мини-карта поделенная на квадраты, чат, иконки танков союзников и противника в случае засвета, возможность отдать приказ конкретному танкугруппе танков, возможность установки маркеров на карте (видимых только для союзников).

Команды формируются сервером автоматически исходя из выбранной игроком роли- командиру подбирается команда, бойцу подбирается команда+командир.

Цель- захват базы или уничтожение всех вражеских танков противника.

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

Командир.

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

Статья в тему:  Когда выйдет новая графика в world of tanks

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

Как мы видим командиры имеют жесткую систему рейтинга. Первое и основное ограничение, которое мы имеем при переходе с уровня на уровень- командир 5 лвл не МОЖЕТ командовать командами состоящими из техники 10 лвл. Наш любимый баланс +-1 в действии. Командир 1 лвл- танки 1-2 лвл, 2 лвл- 2-3 и т.д., согласно действующему балансировщику.

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

Командирский опыт зависит от:

  • Победапоражение
  • Количество уничтоженных танков противинки
  • Количество оставшихся в живых танков-союзников
  • И т.д.

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

Мы долго думали над тем, как удержать людей в режиме при достижении ими 10 уровня командования. Наиболее логичным для нас представляется еженедельный конкурс наподобии решающего взвода, где ВГ может одаривать особо отличившихся командиров голдой, либо по достижению 10 лвл часть командирского опыта начинает поступать в качестве «свободного», если же командир хочет перевести больше- тогда перевод за «голду» (привет монетизация проекта). Причем перевод в свободку за голду можно организовать на любом из уровней командирской прокачки, но вот именно бесплатное капание свободного опыта- только на 10 лвл (для того, чтобы исключить злоупотребление игроками прокачкой танков при использовании командирского режима). Командирам также можно предложить приобретение особых командирских камуфляжей на танки для обычных боев.

Командир имеет возможность на своем планшете:

Отдать приказ отдельному танку на поле боя. Движениеатакадефподдержкасвет. При этом у игрока-бойца в клиенте отображается его личный приказ с кратким обозначением и маркером на карте. Каждый последующий приказ- стирает предыдущий маркер и выставляет следующий. При этом, дабы избежать спама команд- можно сделать 3-5 секундную задержку для отдачи команды одному и тому же танку.

Статья в тему:  Как настроить nvidia для игр world of tanks

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

Итого: цель командира своими приказами, тактическим мышлением привести команду к победе.

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

Исполнительский опыт (не путать с бонусом опыта за командные действия) — отдельная строчка статистики, которая показывает количество опыта набранного игроком в новом режиме. Исполнительский опыт зависит в первую очередь от того насколько четко выполняет танк поставленные приказы. К примеру маркер: «Движение». Игроку необходимо доехать до этого маркера и в течение 1-2 секунд ему будет засчитано выполнение приказа. Аналогичным образом можно поступать и с приказами: Оборона, свет, атака.

Цель бойца- четко исполнять приказы и благодаря этому победить.

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

Рандом. Идеальной модели в условиях рандома добится невозможно. Надеемся, что те плюшки, которые будет получать командир будут стимулировать его на то, чтобы отдавать «правильные» приказы. При этом, мы кстати обсуждали возможность дать командиру видеть статистику бойцов на планшете- для того, чтобы не давать игроку с 46% побед задачи «протанковать бортом», а игрока с 70% держать на дефе моста на Протоке с мыслями все равно сольется. На усмотрение ВГ. Можно вести для каждого бойца некий рейтинг исполнителя, который будет доступен для просмотра командирам (тут будет отражаться то, насколько точно боец исполняет приказы, доезжает до обозначенных маркеров и т.д.)

Статья в тему:  Что подарить парню который любит world of tanks

Бойцы же при заходе в бой видят портфолио командира:

  • Аватарка
  • Уровень
  • Общее количество боев в данном режиме
  • Количество боев на текущем уровне
  • Процент побед.

Это даст бойцам возможность подумать- а стоит ли прислушиваться к советам командира или же нет.

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

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

Если же нет- соблюдайте правила форума

Генеральная концепция- Chitago | Графическое наполнение- asphotos_ru | Текст- 25cm_6oJlu (его бить за многобукв)

4. «Задротство» на последних уровнях

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

Дальше танки становятся тяжелее, дольше сводятся и дольше перезаряжаются. Маневренность падает, а одно неверное действие может отправить игрока в ангар.

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

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

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

Идея для Wargaming: быстрее вводите в игру танки XI и XII уровней, стреляют пусть 1-2 раза за игру, а снаряд пусть стоит как половина танка.

Так выглядит обычная игра на танке X уровня: ждем 30 секунд для поиска игроков, ждем 30 секунд до начала сражения, 30 секунд едем к месту перестрелки, две минуты на полном зуме выцеливаем лючок на башне врага, две минуты ждем в ангаре окончание сражения.

Статья в тему:  Как играют разработчики world of tanks

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

В World of Tanks: Generals представлено более 200 карт и три нации — США, Германия и СССР. Для надежной обороны штаба игрок может собрать уникальную колоду с удобным ему соотношением танков, артиллерии и специальных приказов. Баталии один на один с реальным противником сделают из начинающего генерала опытного вояку, а тренировочные миссии против бота предложат новичкам пройти настоящий курс боевой подготовки. Чтобы победить, генералам придется использовать различные тактические приемы, от молниеносных атак до тщательно спланированных наступлений.

«Мы рады представить геймерам карточные баталии World of Tanks Generals: релиз порадует глобальную аудиторию поклонников танковых сражений,— сказал Андрей Зименко, Publishing Product Director в Wargaming. — Тактическое разнообразие, глубина геймплея и множество карт делают игру достойным пополнением во вселенной Wargaming».

Широкая и гибкая система прокачки техники будет хорошо знакома поклонникам игр компании, а единый аккаунт Wargaming.net ID обеспечит доступ ко всем проектам Wargaming.

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

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

информация

что такое map inspector

Map Inspector это приложение на World of Tanks PC и Blitz версий. Map Inspector доступен онлайн и на мобильных платформах iOS/Android.

Map Inspector поможет разобраться с картами World of Tanks, понять рельев, точки засвета, позиции, из которых можно наносить урон. Приложжение показывает 3D интерактивные модели каждой карты игры, высчитывает в реальном времени области засвета и прострелы, отображает все важные игровые объекты, HD текстуры, позиции каждого дерева, куста и разрушаемого объекта и многое другое.

Map Inspector также может работать как командирский планшет. Можно рисовать тактики, делится ими с другими игроками, планировать и анализировать бой.

как использовать map inspector

Меню слева служит для выбора режима использования. Каждый режим работает как отдельный слой на карте. Танк.1 позволяет выбрать танк и оценить, как быстро он может перемещаться, светить и стрелять. Наброски используются для рисования и расшаривания тактик. Реплеи для проигрывания и анализа реплеев WoT.

Статья в тему:  Как выйти из клана в world of tanks 9.17

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

это бесплатно?

Основные функции могут быть использованы бесплатно. Приложение разрабатывается двумя игроками WoT для игроков WoT. Мы не получаем поддержки Wargaming ни в каком виде, и мы сами ищем и извлекаем информацию из всех версий игры. Это требует больших затрат усилий и времени, а также хостинг этого вебсайта и возможность скачивать HD контент и текстуры стоит нам денег, которые мы платим из своего кармана.

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

есть вопрос

Вы можете задать вопрос, посетив наш канал Discord.

уведомление

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

Разбор протокола World Of Tanks

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

Хорошо, что опыта игрового модостроительства у меня было немного — так, пару кастомных прицелов для Deer Hunter 2005 и «нелицензионный» недоклиент VATSIM/FSD с сопутствущим «взломом» протокола последнего. Ещё лучше, что ни разу не приходилось с головой погружаться в сколь-нибудь трудоёмкую и длительную отладку и дизассемблирование. То есть, с IDA и OllyDBG я поверхностно знаком, но не как с ежедневными рабочими инструментами.

В WOT играю с начала 2011 года. Не запоем, а, скорее, набегами — по 5-6 боёв вечером. Было время 2 года назад, наш клан состоял в Красном Альянсе, ходил на глобалку по ночам, выполнял какие-то тактические задачи на европейском ТВД , устраивал тренировки и спарринги, вовсю бурлили внутриигровые политические страсти, отпочковывались учебные кланы. Сейчас всего этого уже нет, и наш золотой ёжик превратился в табличку над «Домом Ветеранов».

Статья в тему:  Как играть на кв 4 в world of tanks

Итак, я уверен, что в обозримом будущем никаких планов по введению полноценного режима спектатора в WOT нет и не будет. Под полноценным режимом спектатора я понимаю множественные подключения игроков в сеанс боя изначально как невзаимодействующих на игру «привидений»-наблюдателей, а не на технике. Это тот самый режим, из-за отсутствия которого комментаторы на чемпионатах WOT вынуждены заходить в бой 15-м танком, убиваемым своими на базе. Это тот самый режим, из-за которого появились моды «командирского zoom» и «кинематографической камеры» — по сути, просто костыли. А нужен такой режим затем, чтобы командир роты занимался командованием, а не скакал впереди на лихом танке по-чапаевски, чтобы он видел ситуацию на карте в целом непрерывно, а не отвлекался на неё в пылу нападения из засады. В идеале, командиру даже не нужны красоты трёхмерного мира — достаточно одной большой карты на весь монитор с игровой ситуацией в реальном времени — HP, повреждениями модулей, членов экипажа, направлениями стволов и прицелов союзной техники, засвеченных в каждый момент вражеских юнитов и прочей вспомогательной информации.

WOT предоставляет широкие возможности модостроительства, но такая идея выходит за рамки классического «заменить пару swf-файлов на свои». Потребуется перехват и разбор самого игрового протокола для того, чтобы иметь возможность передать на командирский планшет своё видение игровой ситуации.

Обход шифрования 0x0A-й дорогой

Первые робкие попытки пролезть в протокол танков я предпринял ещё в 2011 году. Начинать это, как и везде в подобных задачах, стоит с хорошего сниффера (кстати, в случае с VATSIM/FSD на этом можно и остановиться — внезапно оказалось, что протокол там текстовый), и я, вооружившись Microsoft Network Monitor’ом, ринулся в бой. За отчётные 3 года в схеме входа ничего кардинально не поменялось, кроме количества игровых кластеров. Сервис авторизации у каждого кластера живёт на одном IP, к нему уходит один пакет с логином-паролем, и от него приходит один пакет — как минимум, с идентификатором конкретного игрового сервера из этого же кластера, на который клиенту надо переключиться, и с чьим IP происходит весь дальнейший обмен. Выглядит это всё приблизительно так

Статья в тему:  Какой самый быстрый танк в world of tanks

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

Итак, если трафик проходит потоковое шифрование, логично предположить, что где-то в глубинах программы есть функция наподобие SendToServer(), в которой есть вызов вроде EncryptBuffer() и в которой, в конечном счёте, выполнение доходит до конкретного sendto(). Наша задача, для начала — найти, где это происходит. Загружаем танки в OllyDbg и перед нажатием на кнопку «Войти» ставим логирующий брейкпоинт на sendto().

Через несколько десятков срабатываний, уже в ангаре, вызовы sendto() становятся более монотонными, в том плане, что адрес буфера для отправки данных не меняется:

Чтобы узнать, где шифруется этот буфер, я сначала пошёл по неправильному пути — начал изучать графы вызовов в IDA и отслеживать вручную возвраты из функций. Где-то на 15-й такой функции мне это надоело, я полностью заблудился в коде и поставил брейк на запись по адресу буфера.

Брейк сработал внутри вот такой чудесной функции по адресу 0x00BAF76F, чудесность которой состоит в том, что в неё передаются 3 параметра — два адреса буфера и ещё один — их одинаковая длина. Тот самый EncryptBuffer(ptr_src,ptr_dest,len), который нам нужен. Что там лежит в незашифрованном виде, мы пока смотреть не будем, об этом позже.

Статья в тему:  Где можно взять займ без проверки кредитной истории world of tanks

Это что касается отправки данных. Как быть с приёмом? Немного сложнее, но, в целом, так же, поэтому не буду утомлять вас большими и страшными скриншотами отладчика. Схема такая — ставим брейк на recvfrom(), смотрим адрес буфера, куда складывается принятый зашифрованный пакет. Ставим брейкпоинт на чтение с адреса буфера и тут нам в очередной раз повезло — брейк срабатывает на вызове функции по адресу 0x00BAFB79, которая занимается расшифровкой блоков по 8 байт и находится, в свою очередь, в теле функции по адресу 0x00BAFB30. А уже эта функция почти такая же чудесная, как и та, что мы нашли выше: она принимает 4 параметра — два адреса буфера, их длину и какой-то флаг.

Назовём её DecryptBuffer(ptr_src,ptr_dest,len,flag). Адреса буферов, как видно, совпадают. Что полностью логично, так как при потоковом шифровании стоит ожидать одинаковой длины блоков исходного и шифротекста.

Осталась одна тонкость. Если функцию EncryptBuffer() достаточно перехватывать непосредственно перед её вызовом (т.е. ставим INT3-брейкпоинт вместо CALL) вытаскивая память по адресу ptr_src длиной len, то в момент вызова DecryptBuffer() оба указателя покажут на один и тот же блок, который ещё пока зашифрован. Поэтому перехватывать эту функцию надо перед самым возвратом, который у неё происходит командой RETN 10 по адресу 0x00BAFBA8. В этот момент на стэке лежат те же параметры, за исключением того, что ptr_src равен нулю (это нововведение версии 0.8.11, в предыдущей указатели как-то оставались равны) и адрес возврата. И ptr_dest, конечно, показывает на расшифрованный буфер. Теперь, когда мы знаем, где в клиенте WOT сообщения ещё не зашифрованы и где уже расшифрованы, нужно их оттуда автоматически вытаскивать для дальнейшего анализа.

Что же там внутри?

Здесь матёрые гуру реверс-инжиниринга, в духе «There’s an emacs command to do that» подумают: «ага, ну теперь можно написать на питонеэзотерическом языке вот такой скриптплагин для олькииды, который будет делать с этими данными всё что хочешь и даже за пивом сбегает». Но мы пойдём другим путём. Я хочу сразу ориентироваться на то, что ещё до того, как дело дойдёт до разработки командирского планшета, то есть даже для самого полноценного разбора протокола WOT мне понадобятся помощники и тестировщики, далёкие от мира программирования. Им нужен будет простой инструмент с понятным интерфейсом, выдающий легко читаемые данные.

Статья в тему:  Как положить деньги на world of tanks blitz через терминал

Так что предвидя скептические ухмылки, я засел за Lazarus и набросал в нём специализированный win32-отладчик, основной функцией которого является поставить два INT3-брекпоинта в нужных местах и по их срабатыванию вытаскивать данные по адресу и длине буфера, лежащим на стеке по известным смещениям. Ещё он умеет вести txt.gz лог с hexdump’ами пакетов и записывать все прошедшие пакеты так, что их потом можно заново «проиграть» через парсер. Вот что получилось. Так WOT клиент только начинает входить в ангар.

А вот так он себя ведёт уже находясь в ангаре.

Какие выводы можно сделать, даже не смотря на пояснения к пакетам, которые я поленился убрать для этих скриншотов? Сразу несколько.

Во-первых, видно, что все пакеты начинаются либо с 0x48, либо с 0x58, либо с 0x78; какой-нибудь закономерности на этот счёт я ещё не уловил, кроме того, что пакеты с уже известной функцией свой значащий байт не меняют.

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

Размеры всех пакетов выравнены по границам 8 байт, что ненавязчиво указывает нам на размер блока всё того же BlowFish; пока я до этого догадался, прошло немало времени в попытках обьяснить странную «контрольную сумму» в конце, да ещё и переменной длины. В конце концов, получив в этом паддинге вместо простого мусора слово «Flags» я, наконец, прозрел.

Статья в тему:  Сколько стоит донат в world of tanks

Ну и в лучших хакерских традициях, в конце каждого пакета находится сигнатура мёртвой говядины; кто бы мог подумать где мы её найдём 🙂

После получения Session ID от сервера приезжает пакет, содержащий номер игрока в неожиданно текстовом формате (792067). А вот пакет, который начинается на 0x78 0x00 на первом скриншоте — особо интересен. Сочетание сигнатуры 0x80 0x20 вкупе с тем, что перед каждым строковым литералом в нём стоит 0x55 и байт длины строки, а после каждого 0x71 находится возрастающий номер, должно насторожить опытных питонщиков — это же, чёрт побери, Python Pickle со своим запихиванием всего подряд в мемо! Вот он такой:

В следующей части, если она заинтересует уважаемых обитателей Хабра, я расскажу о том, как в протоколе WOT передаются файлы, размеры которых намного больше реалистичного размера UDP пакета и MTU. И о том, что эти файлы оказывается сжатыми zlib’ом а внутри у них всё тот же Python Pickle с разными неожиданными вещами.

Спасибо за внимание!

UPD. Свежие новости! По агентурным данным из самого сердца КВГ, мой лёгкий намёк на потенциал коммерческого использования командирского планшета поднял «небольшой бугурт» (дословно), в результате чего кровавые модераторы в полнейшей панике наконец заметили и слили в мусорник тему проекта на официальном форуме танков, а мне было доверительным шёпотом посоветовано замылить данные своего аккаунта на скриншотах.

Заключение

Компания Samsung остается одним из лидеров в области мобильной электроники. Вполне возможно, что именно она положит начало второму «планшетному буму». Ее топовые девайсы линейки Tab S оптимально подходят для творческой работы. Они предлагают вам огромные AMOLED-экраны, удобные стилусы с функциями дистанционного управления и опциональные съемные клавиатуры. В модельном ряду производителя есть и среднебюджетные устройства серии Tab A, предназначенные для просмотра видео и интернет-серфинга. Среди их преимуществ: долгая автономная работа, ускоренная подзарядка, возможность создания профилей для каждого члена семьи, наличие детского режима и совместимость с домашними док-станциями.

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector