|
Шифрование клиента |
|
|
StaticZ |
4.6.2014, 3:33
|

        
Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009 Группа: Пользователи Наличность: 0 Из: РФ, Москва
Пользователь №: 11.948

|
Насколько мне удалось понять протокол 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 и размера в случае если у пакета не постоянный размер? Или шифруется весь поток блоками какого-то размера?
И еще меняется ли размер данных при использовании этих алгоритмов?
Сообщение отредактировал StaticZ - 4.6.2014, 3:35
--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.Game isn't a dream, it is the reality, reality which is coming while we dream...
|
|
|
|
|
  |
Ответов
StaticZ |
21.6.2014, 20:56
|

        
Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009 Группа: Пользователи Наличность: 0 Из: РФ, Москва
Пользователь №: 11.948

|
Цитата(Warstone @ 21.6.2014, 19:26)  Ты не можешь сделать зеркальный алгоритм? Печально. Да сказал же - вопрос времени, заново открывать америку глупо, если кто-то ее уже открыл )) Тем более проблема скорее всего не в алгоритмах шифрования а либо в их применении либо в получении потока данных. Честно говоря с тех пор как создал эту тему даже не садился за это - завяз в других задачах. Как разберусь засяду - это посути следующий майлстоун у меня )
--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.Game isn't a dream, it is the reality, reality which is coming while we dream...
|
|
|
|
StaticZ |
17.7.2014, 3:12
|

        
Разработчик проекта "Квинтэссенция"
Сообщений: 2.155
Регистрация: 15.6.2009 Группа: Пользователи Наличность: 0 Из: РФ, Москва
Пользователь №: 11.948

|
Итак проблема решена, главным виновником оказались 4 байта, что клиент впихивал перед пакетом 0х91 и из-за чего у парсера пакетов сносило крышу, ну и по совместительству они же и были сидом, а не ип... Ну а для порядка хотелось бы прояснить ситуацию на будущее. И так: - C->S: 0xEF (no encrypt) - своеобразное приветствие клиента, отсылаемый им Seed (IP address) и есть seed Xor шифрования для логин сервера.
- C->S: 0x80 (xor) - данные авторизации
- S->C: 0xA8 (no encrypt) - список серверов (в случае правильного логина конечно)
- С->S: 0xA0 (xor) - выбор сервера
- S->C: 0x8C (no encrypt) - разрешение на вход и данные сервера (в реальности логин сервер и игровой сервер разные машины для обеспечения большей производительности и пропускной способности, на эмуляторах конечно такие эпичные задачи не ставятся).
- С->S: 4 bytes (no encrypt) - это не пакет, а просто seed для Twofish алгоритма.
- С->S: 0х91 (twofish) - авторизация на игровом сервере
- S->C: 0xB9, 0xA9 (md5+huffman) - список поддерживаемых сервером фич и список персонажей лист..
- С->S: 0х5D (twofish) - выбор персонажа и список поддерживаемых клиентом фич
- S->C: 0xBD (md5+huffman) - запрос версии клиента
- C->S: 0xBD (twofish) - ответ с версией клиента
- S->C: 0x1B (md5+huffman) - разрешение на вход с данными об игроке
- .......... Ну а дальше понеслась...
Все что от клиента шифруется twofish, а то что от сервера сначала жмется Хаффманом, а потом шифруется md5 (разновидность XOR), собственно если поток перехватываем на стороне клиента то действуем наоборот - сначала дешефруем, а потом распаковываем. Данные проверенны на клиенте 7.0.18.0, скорее всего верны и для более старых, но поскольку пакет 0xEF введен относительно не давно там он чемто заменяется наверно. Возиться с старыми клиентами мне было в лом. Теперь еще осталось разобраться с таблицей пакетов, то что идет от клиента можно вытащить из самого клиента, но пакеты что может принимать клиент хотелось бы поточнее... Сообщение отредактировал StaticZ - 17.7.2014, 3:15
--------------------
RP сервер UO: Quintessence, а также ПО: EssenceUCS, EssenceUDK, CentrEd+, Fiddler+ и др.Game isn't a dream, it is the reality, reality which is coming while we dream...
|
|
|
|
Сообщений в этой теме
StaticZ Шифрование клиента 4.6.2014, 3:33 Juzzver Не в теме, но быть может будет полезным провести а... 4.6.2014, 12:35 StaticZ
Не в теме, но быть может будет полезным провести ... 4.6.2014, 13:11  Frog ЗЫ Еще в догонку вопрос - как из таблицы пакетов в... 4.6.2014, 14:32 Warstone Статикз, провести анализ работы UOExt религия не п... 5.6.2014, 0:46 StaticZ
Статикз, провести анализ работы UOExt религия не ... 5.6.2014, 1:35  Warstone Кстати я так и не понял как ты из клиента вытащил ... 14.6.2014, 22:00 RL_ka список версий всех существующих клиентов, за исклю... 14.6.2014, 12:18 StaticZ
Пакеты-изменения:
6.0.1.07 - пакет 08, пакет 25, ... 16.6.2014, 5:29 Warstone Ну и еще можно добавить что VerInfo клиента дает и... 14.6.2014, 22:33 StaticZ
Ну и еще можно добавить что VerInfo клиента дает ... 16.6.2014, 5:12 Warstone А ты какую версию перехватываешь?.. И не проще-ли ... 19.6.2014, 0:31 Nickname
И не проще-ли найти ML ранку (RunUO RE 1.4) она е... 19.6.2014, 0:40 StaticZ
А ты какую версию перехватываешь?.. И не проще-ли... 19.6.2014, 14:09   yazZ3va
Итак проблема решена, главным виновником оказалис... 31.10.2015, 0:58 Warstone И я опять тебя спрошу, а не проще-ли было спросить... 17.7.2014, 11:19 StaticZ И я опять тебя спрошу, а не проще-ли было спросить... 17.7.2014, 14:20 Warstone И первый мой коммент...Да... Так как кому надо - з... 18.7.2014, 21:03 BoBrO не могли бы вы скинуть пример пакета "0х5D... 22.7.2014, 10:20 StaticZ
не могли бы вы скинуть пример пакета "0х5D... 27.7.2014, 13:52 Frog
не могли бы вы скинуть пример пакета "0х5D... 30.7.2014, 0:22 Warstone Гайд Вятта накрылся. А я его не сохранил (( 29.7.2014, 23:47 AdmiR
Гайд Вятта накрылся. А я его не сохранил ((
А гд... 9.10.2014, 2:28 Mirage Вот так и теряется в вечности нужное :( 9.10.2014, 8:23 Warstone Пакет гайд Вятта http://ruosi.org/packetguide/inde... 31.10.2015, 7:33 yazZ3va Не знаю куда я смотрел, но первые 4 байта это game... 31.10.2015, 12:22
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|