Насколько мне удалось понять протокол UO устроен следующим образом:
1) Приветствие - Клиент отправляет не зашифрованный пакет 0xEF (New Client Version). Проверенно на 7.0.х клиентах, для старых могу предположить что вместо него идет 0xBD (Client Version), но проверить нет возможности. Кто знает когда был введен пакет 0xEF и может ли кто подтвердить приветствие старых клиентов???
2) Полученные версии клиента служат основой для генерации ключей шифрования, что используются совместно с сидом (IP адресом клиента) для XOR шифрования всех последующих пакетов отправляемых клиентом. При этом пакеты от сервера не шифруются. При этом вроде как для клиентов до 1.25.36 есть эти ключи работают не много по другому.
3) После перенаправления клиента с логин-сервера на гейм-сервер пакетом 0x8C (Play Server Accept), начинает использоваться шифрование, в качестве сида которого используется, как я понял - последние 4 байта сего пакета (Auth ID)... Дальше начинается муть.... В зависимости от версии клиента используются алгоритмы шифрования:
а) < 2.0.0 - Blowfish (клиент->сервер)
б) 2.0.0x to 2.0.3 - Blowfish + Twofish (клиент->сервер)
в) > 2.0.4 - Twofish (клиент->сервер) ||| MD5 (сервер->клиент)
В тоже время в нетах всплыло что-то про сжатие Huffman, которое применяется то ли для старых клиентов то ли перед шифрованием....
Кто в теме, может просветить о деталях сего процесса. Так же хотелось бы уточнить, что именно шифруется - содержимое пакета без ID и размера в случае если у пакета не постоянный размер? Или шифруется весь поток блоками какого-то размера?
И еще меняется ли размер данных при использовании этих алгоритмов?