Jump to content
Korean Random
Dragon armor

Мод "Эмулятор сервера World of Tanks".

Recommended Posts

@Dragon armor Каким алгоритмом (режимом алгоритма CBC/ECB) расшифровать пакеты после авторизации? при авторизации 'session' длиной 32 байта является сессионным ключом, верно?

Share this post


Link to post

Short link
Share on other sites

@MemoryCore Уточни вопрос. После авторизации - значит при подключении на baseapp? Там blowfish используется. Алгоритм шифрования не менялся с BigWorld 2.01, в исходниках можно посмотреть реализацию. Если ты про шифрование данных авторизации - там RSA.

7 часов назад, MemoryCore сказал:

при авторизации 'session' длиной 32 байта является сессионным ключом, верно?

32 бита наверное. Ты про первый нешифрованный пакет после авторизации от клиента к серверу? Насчёт терминологии не знаю, это число нужно для того, чтобы идентифицировать пользователя. Дальше оно не используется.

31.10.2020 в 02:38, DrWeb7_1 сказал:

А кто тогда определяет дерево исследования? И клиент, и сервер?

В клиенте визуальное отображение, в xml файлах связи между техникой, модулями, порядком открытия (т.е. при исследовании модуля/техники что должно стать доступным).

 

31.10.2020 в 02:38, DrWeb7_1 сказал:

Внутри клиента игры оно представлено XML-файлом, насколько я помню. На сервере – понятия не имею.

Да, в клиенте xml. На сервере данные те же. Но сервер отправляет клиенту то, что исследовано, а что нет. Сейчас же даже первый уровень техники не открыт, потому что сервер не отправляет клиенту информацию об этом. Вот такой скрин есть у меня из старой версии эмуля.

shot_019.thumb.jpg.b62008e5b646c8cf0441f8a3c796c261.jpg

Хотя вся техника доступна.

shot_020.thumb.jpg.50c76b4b25ef72e004e3a317cd30dba4.jpg

Share this post


Link to post

Short link
Share on other sites
24 минуты назад, Dragon armor сказал:

На сервере данные те же.

То есть, можно на сервере построить дерево исследования, например, от версии 0.8.11 в сервере 0.9.22, создать соответствующую ему клиентскую структуру и оно будет работать? О_о

Похоже, снова срабатывает твой аргумент в пользу именно этой версии — неважно, какая версия клиента, всё равно всё определяется сервером?

Edited by DrWeb7_1
Перепутал слова.

Share this post


Link to post

Short link
Share on other sites
Только что, DrWeb7_1 сказал:

То есть, можно на сервере построить дерево исследования, например, от версии 0.8.11 в клиенте 0.9.22, создать соответствующую ему клиентскую структуру и оно будет работать? О_о

Можно проверить же. Попробуй в старом клиенет поменять и посмотреть, изменится ли визуально.

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

<_150mm_Rohr_L29_5>	shared	  <maxAmmo>	30	</maxAmmo>
  <unlocks>
    <vehicle>	G97_Waffentrager_IV	  <cost>	163500	</cost>
    </vehicle>
  </unlocks>

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

6 минут назад, DrWeb7_1 сказал:

Похоже, снова срабатывает твой аргумент в пользу именно этой версии — неважно, какая версия клиента, всё равно всё определяется сервером?

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

Share this post


Link to post

Short link
Share on other sites

@DragoN Я занимаюсь исключительно реверсингом протокола.
1. Клиент отправляет на сервер JSON который накрывается RSA-2048. в JSON есть поле session размер которого 32 байта * 8 = 256 бит

Session:     "b03e3025d4bca9df96cb11860855f5a3"

После отправки пакета с авторизацией на сервер (нам возвращается Invalid Login в чистом виде - если данные не валид или зашифрованный пакет)
 Я смотрел под отладчиком - зашифрованный пакет расшифровывается но я перепробовал все реализации Blowfish [JTS-tanks / и просто разные методы дешифровки blowfish] на данные на выходе так-же остались зашифрованными.

@Dragon armorРазобрался с дешифровкой пакетов, от сервера прилетает Json с accountID / NickName и token2. Формат token2 -> 30387392:8461659054643771568:204598897782153838542585458392281532956 - каким образом клиент получает информацию о игроке? это тоже сервер отдает или web api?

Share this post


Link to post

Short link
Share on other sites
2 часа назад, MemoryCore сказал:

в JSON есть поле session размер которого 32 байта * 8 = 256 бит

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

 

2 часа назад, MemoryCore сказал:

каким образом клиент получает информацию о игроке

В энтити Login получает db_id. Вслед за этим создаётся энтити Account, в которой содержится никнейм. Смотри соответствующие def файлы.

Также заметь, что не занимался тестированием того, что произойдёт, если в "name" отправить один никнейм, а в Login другой. Какой именно примет клиент и будет ли разница - не знаю.

Share this post


Link to post

Short link
Share on other sites

@Dragon armor скорее всего Session является (хэшем SHA-1 HWID железа)  ибо он не меняется (только если другое железо)
 У меня есть еще вопрос касательно дешифрования пакетов (некоторые пакеты не дешифруются после дешифровки blowfish - есть ли там какие-то сжатие zlib возможно, и я так понимаю там до сих пор осталась структура py pickle?)

Edited by MemoryCore

Share this post


Link to post

Short link
Share on other sites
1 час назад, MemoryCore сказал:

скорее всего Session является (хэшем SHA-1 HWID железа)  ибо он не меняется (только если другое железо)

Нет, там md5.

        m = hashlib.md5()
        m.update(params['session'])
        params['session'] = m.hexdigest()

 

1 час назад, MemoryCore сказал:

некоторые пакеты не дешифруются после дешифровки blowfish - есть ли там какие-то сжатие zlib возможно, и я так понимаю там до сих пор осталась структура py pickle?)

Там постоянно cPickle, во многих zlib. Ты пакеты на отдельные сообщения разбираешь?

Share this post


Link to post

Short link
Share on other sites

@Dragon armor Очень интересно потому-что у меня длина session равна (40) а у md5 (32) - впрочем это не так важно.

Я думаю над написанием MITM клиента поэтому и спросил про расшифровку (Да, я разбираю пакеты на отдельные сообщения, надеюсь они не отправляются частями?).
у них zlib сжатие после шифрования или до шифрования?

P.s сейчас юзаю сплайсинг для чтения буффера шифрования / дешифрования.

Share this post


Link to post

Short link
Share on other sites
21 минуту назад, MemoryCore сказал:

у них zlib сжатие после шифрования или до шифрования?

У них zlib зависит от типа отдельного сообщения. Одно может быть сжато, другое cPickle, а третье - строка (json например). И всё в одном пакете. Смотреть надо в скриптах игровых, как интересующее сообщение создаётся.

23 минуты назад, MemoryCore сказал:

надеюсь они не отправляются частями?

И такое может быть. С флагами пакета разобрался? В исходниках BigWorld о них есть достаточно информации.

 

Share this post


Link to post

Short link
Share on other sites
5 минут назад, Dragon armor сказал:

Одно может быть сжато, другое cPickle, а третье - строка (json например). И всё в одном пакете.

Ну и бардак. Или так задумано ввиду объёма передаваемых данных?

Edited by DrWeb7_1

Share this post


Link to post

Short link
Share on other sites
4 минуты назад, Dragon armor сказал:

У них zlib зависит от типа отдельного сообщения. Одно может быть сжато, другое cPickle, а третье - строка (json например). И всё в одном пакете. Смотреть надо в скриптах игровых, как интересующее сообщение создаётся.

И такое может быть. С флагами пакета разобрался? В исходниках BigWorld о них есть достаточно информации.

 

@DragoNспасибо огромное за ответы на интересующие вопросы. Теперь понял в какую сторону нужно двигаться по протоколу.

2 минуты назад, DrWeb7_1 сказал:

Ну и бардак. Или так задумано ввиду объёма передаваемых данных?

Бардак жесткий, намного удобнее было бы использовать protobuf

Share this post


Link to post

Short link
Share on other sites
3 минуты назад, DrWeb7_1 сказал:

так задумано ввиду объёма передаваемых данных

Разные программисты делали разные части проекта. Может так.

3 минуты назад, MemoryCore сказал:

намного удобнее было бы использовать protobuf

У них питон основной язык. Используют то, что есть в языке.

Share this post


Link to post

Short link
Share on other sites
04.11.2020 в 14:59, MemoryCore сказал:

Формат token2

Этот вид токена применяется Wargaming.net Game Center, если производить авторизацию через него или при использовании "Быстрого входа" через Wargaming.net OpenID в клиенте игры. Ниже соответствующая запись python.log из клиента 1.10.1.1, хотя она же справедлива и для 0.9.22.0.1.

Цитата

2020-11-04 01:51:03.082: NOTICE: [NOTE] (scripts/client/connection_mgr.py, 242): User authentication method: token2

 

Share this post


Link to post

Short link
Share on other sites

Переход с 0.9 на последний патч проблематичным будет? Или можно просто танки из последних версий переносить на старый клиент? Можно ли будет устроить битву Левиафана с Вафлей Е110 против Неуязвимого (у него там только 500мм брони и 25000 хп)?

Share this post


Link to post

Short link
Share on other sites
4 минуты назад, Vanya115 сказал:

Можно ли будет устроить битву Левиафана с Вафлей Е110 против Неуязвимого (у него там только 500мм брони и 25000 хп)?

Нельзя. У этих танков разное представление на уровне физического движка.

Share this post


Link to post

Short link
Share on other sites
40 минут назад, Plotnik5252ru сказал:

Тоесть танки из режимов нельзя перенести или сделать?

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

Share this post


Link to post

Short link
Share on other sites
6 минут назад, Vanya115 сказал:

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

Твой вопрос из предыдущего поста был про перенос на 0.9.х. Такое не прокатит.

Share this post


Link to post

Short link
Share on other sites
10 минут назад, Vanya115 сказал:

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

Ну смотри есть обычная вафля в клиенте. И то можно просто сделать или перенести на неё этот стиль или шкурку? А с остальным идей даже нет.

А характеристики там хп и тд, можно менять на сервере.

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...