RequestAuthLogin на Lindvior - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II

Lineage II
Дискуссии на тему создания, настройки и обслуживания серверов Lineage 2. При поддержке: Премиум услуги по рекламе

Ответ
Опции темы
Непрочитано 14.01.2014, 04:10   #1
Аватар для Anderson
Пользователь

Автор темы (Топик Стартер) RequestAuthLogin на Lindvior

Здравствуйте!

Я пишу оффгейм-бота для l2, на данный момент уже есть неплохой функционал (карта, таргеты, скилы, инвентарь, скрипты на фарм, общение с NPC). Пока что играл с чистым Interlude.

Вопрос касается пакета логин-сервера RequestAuthLogin в хрониках Lindvior и Valiance. На интерлюде он состоял из ID сессии (ну или ответа гг), шифрованного публичным ключём куска с логином и паролем (128 байт), чексумы и некой восьмёрки. Но на Lindvior этот пакет весит не 176 + 2 байт, а 320 + 2 байт, а анализ расшифрованного пакета наводит на мысль, что RSA-блок тепер имеет размер 256 байт. Пакет фактически совпадает по структуре со старым, кроме размера этого блока с логином и паролем. Это кажется логичным, т.к. увеличена длина логина и пароля в этих хроника - в качестве логина теперь мэйл, который явно не поместится в привычные 14 байт.

Не подскажете, где взять структуру пакета? Перерыл множество ява-сборок, везде старая структура (176+2), новой (320+2) нет нигде. Методом тыка (128 б логин + 128 б пароль, 128 б логин + 124 б пароль + 4 б отп) не получилось. Остальная часть вроде норм, раньше серв дропал конект, а теперь (п осле уведичентя блока RSA вдвое) говорит, что "неправильный пароль", т.е. прииходит AuthLoginFail (или LoginFail, или как его там) с соответствующим кодом ошибки.

Как формируется этот пакет?

Буду очень благодарен за любую помощь.

Спасибо,
Андрей

Последний раз редактировалось Anderson; 14.01.2014 в 04:23. Причина: Опечатки.
Anderson вне форума Ответить с цитированием
Непрочитано 14.01.2014, 07:42   #2
Изгнанные

По умолчанию Re: RequestAuthLogin на Lindvior

Если ничего не путаю, там возможны два варианта формата (от чего зависят не понял, то ли от engine.dll, то ли от чего-то из l2.ini), у меня используется старый:

Код:
var decrypt1 = rsa.processBlock(this.raw, 0x00, 0x80);
var decrypt2 = rsa.processBlock(this.raw, 0x80, 0x80);

var username = Encoding.ASCII.GetString(decrypt1, 0x03, 0x0D);
var password = Encoding.ASCII.GetString(decrypt2, 0x11, 0x10);
Здесь есть небольшое упущение - логин может быть длиннее 0x0D. Попробовал ввести логин максимальной длины в клиенте, получилось так, что username доходит до конца первого блока и продолжается до начала пароля (с третьего байта) во втором блоке. Сейчас исправлю.
В итоге получилось вот так:

Код:
var decrypt1 = rsa.processBlock(this.raw, 0x00, 0x80);
var decrypt2 = rsa.processBlock(this.raw, 0x80, 0x80);

var username = Encoding.ASCII.GetString(decrypt1, 0x03, 0x32) + Encoding.ASCII.GetString(decrypt2, 0x03, 0x0E);
var password = Encoding.ASCII.GetString(decrypt2, 0x11, 0x10);
Ну и там выбросить нули нужно

Последний раз редактировалось qweqwe1; 14.01.2014 в 08:28.
qweqwe1 вне форума Ответить с цитированием
Непрочитано 14.01.2014, 12:42   #3
Аватар для Anderson
Пользователь

Автор темы (Топик Стартер) Re: RequestAuthLogin на Lindvior

Цитата:
Сообщение от oSg Посмотреть сообщение
Если ничего не путаю, там возможны два варианта формата (от чего зависят не понял, то ли от engine.dll, то ли от чего-то из l2.ini), у меня используется старый:

Код:
var decrypt1 = rsa.processBlock(this.raw, 0x00, 0x80);
var decrypt2 = rsa.processBlock(this.raw, 0x80, 0x80);

var username = Encoding.ASCII.GetString(decrypt1, 0x03, 0x0D);
var password = Encoding.ASCII.GetString(decrypt2, 0x11, 0x10);
Здесь есть небольшое упущение - логин может быть длиннее 0x0D. Попробовал ввести логин максимальной длины в клиенте, получилось так, что username доходит до конца первого блока и продолжается до начала пароля (с третьего байта) во втором блоке. Сейчас исправлю.
В итоге получилось вот так:

Код:
var decrypt1 = rsa.processBlock(this.raw, 0x00, 0x80);
var decrypt2 = rsa.processBlock(this.raw, 0x80, 0x80);

var username = Encoding.ASCII.GetString(decrypt1, 0x03, 0x32) + Encoding.ASCII.GetString(decrypt2, 0x03, 0x0E);
var password = Encoding.ASCII.GetString(decrypt2, 0x11, 0x10);
Ну и там выбросить нули нужно
То есть просто логин и пароль заполняются с 3-го байта нуль-терминированными строками один сразу за другим, я верно понял?
Сейчас за 20 минут буду на работе, попробую

Добавлено через 2 часа 10 минут
oSg: спасибо за совет, но, увы, не получается залогинится. Пакет правильно формирую, а сервер всё равно не пускает - мол, неверный пароль. Не могли бы вы скинуть мне какой-то исходник с имплементацией этого пакета? Может, я что-то другое упускаю.

Добавлено через 2 часа 22 минуты
Прошу прощения, невнимательно прочёл ваш пост.
Прочитав ваш код, попробовал этот способ. Допустим, есть такие данные:

Login: aaaabbbbccccdddd
Password: 1111222233334444

Получается так:

Код:
1 блок: <3 байта отспупа> <16 байтов логина> <109 байтов до конца первого блока>
2 блок: <17 нолей> <16 байтов пароля> <95 байтов до конца второго блока>
Но так не работает :<

Добавлено через 2 часа 47 минут
Вот как формируется пакет:


Последний раз редактировалось Anderson; 14.01.2014 в 15:30. Причина: Добавлено сообщение
Anderson вне форума Ответить с цитированием
Непрочитано 14.01.2014, 15:32   #4
Изгнанные

По умолчанию Re: RequestAuthLogin на Lindvior

Каким образом после декрипта получились блоки по 0x80 байт ?
http://rghost.ru/51644971.view
qweqwe1 вне форума Ответить с цитированием
Непрочитано 14.01.2014, 16:15   #5
Аватар для Anderson
Пользователь

Автор темы (Топик Стартер) Re: RequestAuthLogin на Lindvior

oSg, спасибо за ответ!
Дело в том, что мне этот пакет нужно сформировать, а не расшифровать, поэтому не все моменты понятные. Заполняю так, как на моей картинке (только теперь еще и добавил длину на то место, где у вас "4" (ASCII - 53).
Вот только не понимаю, почему клиент формирует длину 53 байта.

Насчет длины:
Насчет длины в 128 байт:
Свернуть ↑Развернуть ↓


Добавлено через 23 минуты
oSg, был бы вам очень признателен, если б вы могли скинуть мне еще один расшифрованный дамп, но с 30-значным логином и 10-значным паролем.

Последний раз редактировалось Anderson; 14.01.2014 в 16:39. Причина: Добавлено сообщение
Anderson вне форума Ответить с цитированием
Непрочитано 14.01.2014, 16:39   #6
Изгнанные

По умолчанию Re: RequestAuthLogin на Lindvior

del/////////

Последний раз редактировалось qweqwe1; 11.02.2015 в 18:52.
qweqwe1 вне форума Ответить с цитированием
Непрочитано 14.01.2014, 17:21   #7
Аватар для Anderson
Пользователь

Автор темы (Топик Стартер) Re: RequestAuthLogin на Lindvior

Цитата:
Сообщение от oSg Посмотреть сообщение
Прошу прощения, неправильно понял сначала
Попробуйте два блока по 53 байта:

1 блок: 52 0 0 <50 символов логина>
2 блок: 52 0 0 <оставшиеся 13 символов логина> <16 символов пароля> <21 ноль>

если логин закончился раньше - заполняйте нулями
по поводу остатка - без понятия, что после этих двух блоков идет

30 логин, 10 пароль
http://rghost.ru/51647197.view
Сработало!

Всё-таки нужно обязательно ставить первым байтом в обоих пакетах "52", иначе не работает

Так выглядит мой рабочий пакет*:

Легенда:
  • желтый - тип пакета
  • красный - логин**
  • голубой - пароль**
  • оранжевый - GG auth response
  • фиолетовый - мистическая восьмёрка
  • зеленый - тут будет чексума

* Забыл отметить дополнительные 13 байт логина, если он очень длинный.
** Логин и пароль на этом изображении не зашифрованы RSA.

Сейчас кидает ерор меседж 20 (подозреваю, что это - "аккаунт используется", т.к. друг скинул логин и пас и играет сейчас )
Огромное вам спасибо, тыкнул бы вам еще один плюс в карму, но слишком маленький ещё

Огромное вам спасибо!

Добавлено через 7 минут
Рано обрадовался, 20 - это "System Error", теперь опять не пускает )) роюсь далее.

Последний раз редактировалось Anderson; 14.01.2014 в 17:29. Причина: Добавлено сообщение
Anderson вне форума Ответить с цитированием
Непрочитано 14.01.2014, 17:53   #8
Изгнанные

По умолчанию Re: RequestAuthLogin на Lindvior

del/////////

Последний раз редактировалось qweqwe1; 11.02.2015 в 18:52.
qweqwe1 вне форума Ответить с цитированием
Непрочитано 14.01.2014, 17:56   #9
Аватар для Anderson
Пользователь

Автор темы (Топик Стартер) Re: RequestAuthLogin на Lindvior

Цитата:
Сообщение от oSg Посмотреть сообщение
Хм, разница в два байта откуда-то взялась
Код:
BA 83 D5 53 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 08 00 00 00 00 00 00 99 B3 88 E0 64
17 C8 CD 33 9A F5 9E 26 9D C1 3A 00 00 00 00 E7
DC C2 41 00 00 00 00 00 00 00 00 00 00
Это дамп после шифрованных блоков
До 08 правильно, потом различия
А, забыл сказать, что я длину не дописал на картинке.
Кстати, всё так же не работает. Логин и пароль те, что надо, но сервер не хавает.
Кстати, может подскажете, что там еще есть в пакете, чего я не указал в описании?

Добавлено через 6 часов 29 минут
Собсно, на Линдвиор (яву) получилось залогинится, на офф (и Линдвиор на dragonwind.ru) не пускает - "неверный пароль". 99%, что проблемма в RSA-блоке.

Добавлено через 21 час 27 минут

Проблема решена.

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

Оказалось, что те саммые 52 байта данных в каждом из этих блоков выравниваются не по левой стороне, а по правой, т.к. блок, начинающийся с той самой четверки, обозначающей длину последующей секции в 52 байта, начинается не с первого байта, а с 75-го.

Самое интересное - то, что на яве работают оба варианта, а на офе - только этот. Наверное, разница в RSA-отступах нулями, но голова уже трещит, не хочу и думать больше об этом. RSA у меня ванильной имплементации, так что виноваты NCSoft со своими "пакращеннями".

Такое количество матов и теплых слов в адреса матерей корейцев, как вчера, я за последний год вряд ли употребил.

Последний раз редактировалось Anderson; 15.01.2014 в 15:32. Причина: Добавлено сообщение
Anderson вне форума Ответить с цитированием
Ответ

Метки
320, 322, lindvior, requestauthlogin


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Совместимость Rguard И Lindvior Krasavella Lineage II 32 27.10.2014 15:29
Engine.dll Lindvior Mifesto Lineage II 8 30.09.2013 17:21
Lindvior Items ChipWarl Lineage II 9 06.07.2013 16:43
Некоторые ddf для Lindvior (l2.ru PTS) Hint Игровой клиент 12 30.05.2013 17:09
Я один незнал про Lindvior? Genokk22 Курилка / Yak floor 11 03.11.2012 06:00


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 03:08. Часовой пояс GMT +3.

Вверх