Jump to content
Sign in to follow this  
Vetalll

IL клиент шлет битые строки на геймсервер

Recommended Posts

Я пишу свой Интерлюд сервер с нуля. Не спрашивайте зайчем - чисто для фана и для практики архитектуры, много-поточности, корутин и тд и тп.

В момент когда клиент подключается к гейм серверу есть 2 основых пакета:

08 - RequestAuthLogin
0B - CharacterCreate 

Первый пакет шлет аккаунт а второй имя создаваемого перса. Так вот проблема в том что клиент шлет только 3 символа правильно. 
Если аккаунт или имя длинее 3х символов то все ломается.

Вот расшифрованный пакет CharacterCreate с именем нового чара TheName:
[67, 0, 11, 84, 0, 104, 0, 101, 0, 78, 63, 31, -54, 69, 45, 16, -6, -37, 0, 0, 0, 0, 0, 0, 0, 0, 63, 126, -54, 40, 45, 117, -6, -37, 0, 0, 0, 0, 0, 0, 0, 0, 63, 126, -54, 40, 45, 117, -6, -37, 0, 0, 0, 0, 0, 0, 0, 0, 63, 126, -54, 40, 45, 117, -6, -37, 0, 4, 83, 0, 86, 86, 83, 1, 9, 2, 9, 1, 81, 84, 81, 9, 85, 86, 9, 3, 4, 7, 5, 85, 4, 6, 85, 4, 6, 9, 4, 81, 1, 8, +65,436 more]

Вопрос в начале пакета
67 - Длина пакета
0,11 - Оп код

84,0 - 'T'
104,0 - 'h'
101,0 - 'e'
78 - 'N'.   (1  байт вместо 2) !!!!!!!

63, 31, -54 и так далее уже какойто мусор

Я подглядываю в фришные исхдники для всяких частей по типу структуры пакета и шифрации. Шифрование должно работать ОК (В теории, так как я брал с aCis исходников)
Запустить Акис сервер пока нет возможности.. На выходных уже буду пробовать.. 

Share this post


Link to post
Share on other sites

Там после ц4 смещение было на 4 байта точнее не подскажу не помню.

Вот это место тебе нужно

8M3NcLl.png

Share this post


Link to post
Share on other sites
Quote

Там после ц4 смещение было на 4 байта точнее не подскажу не помню.

Да. Это в Логин Сервере - тут у меня все ок.
А вот в Гейм сервере. В aCis. сборке он называется AuthLogin.  Подправлю название пакета в топике
Посмотрите пример с CharacterCreate в топике выше.

проблемы в чтении имени в этом пакете в чтении никнейма более 3х символов

public final class CharacterCreate extends L2GameClientPacket
{

   @Override
   protected void readImpl()
   {
      _name = readS();
      _race = readD();
      _sex = (byte) readD();
      _classId = readD();
      _int = readD();
      _str = readD();
      _con = readD();
      _men = readD();
      _dex = readD();
      _wit = readD();
      _hairStyle = (byte) readD();
      _hairColor = (byte) readD();
      _face = (byte) readD();
   }
}   

Ну и в AuthLogin в чтении аккаунта длинее 3х символов

Собсвтено я думаю тут 2 проблемы
- Корявый патч или папка систем (У меня Win 10 x 64)
- Не правильно инициализирую шифрование в CryptPacket / CryprInit

Edited by Vetalll

Share this post


Link to post
Share on other sites

Имя персонажа не шифруется при создании же

Share this post


Link to post
Share on other sites

Все проблему решил.. Я был прав на счет пункта 2
Имя персонажа шифруется XOR ключем.  Все пакеты ГеймСервера шифруются XOR ключем.
XOR ключ оказывается не простой.. а 16 байтовый массив где первые 8 байт рандом, а вторые 8 байт это статик значения.   (Вот тут и была моя проблема.. я юзал просто рандом на все 16 байт)

Тему можно закрыть или вообще удалить.. Спасибо что хоть попытались  помочь.

  • Upvote 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...