# Игровой протокол

Одна и та же схема шифрования (с незначительными отличиями) использовалась как до, так и после C4, поэтому она практически не изменилась.

Все пакеты игрового сервера/клиента шифруются по схеме, основанной на XOR.

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

Во время операций шифрования последние 4 байта (DWORD) динамической ключевой части увеличиваются на количество байтов, обработанных каждой операцией.

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

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

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

1. Запись пакетных данных
2. Зашифруйте полезную нагрузку с помощью XOR с помощью обеих частей ключа
3. Обновите изменяемую часть ключа
4. Отправить пакет

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

1. Запись пакетных данных
2. Запутать код(ы) операции)
3. Зашифруйте полезную нагрузку с помощью XOR с помощью обеих частей ключа
4. Обновите изменяемую часть ключа
5. Пакеты отправки пакетов игрового сервера/клиента не заполняются.