Цитата(StaticZ @ 17.7.2014, 3:12)
Итак проблема решена, главным виновником оказались 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 введен относительно не давно там он чемто заменяется наверно. Возиться с старыми клиентами мне было в лом.
Теперь еще осталось разобраться с таблицей пакетов, то что идет от клиента можно вытащить из самого клиента, но пакеты что может принимать клиент хотелось бы поточнее...
Доброго времени суток
Может кто подсказать алгоритм нахождение этого seed?
С->S: 4 bytes (no encrypt) - это не пакет, а просто seed для Twofish алгоритма.