Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
 
 
Опции темы Опции просмотра
Старый 11.10.2011, 20:18   #1
Пользователь
 
Регистрация: 17.12.2010
Сообщений: 37
Сказал Спасибо: 13
Имеет 1 спасибку в 1 сообщении
glukmaker пока неопределено
По умолчанию Помогите с протоколом la2

Не могу разобраться в протоколе линейки.
Нашел описание. http://www.mmocom.ru/showthread.php?t=1760
Экспериментирую, но нифига не получается...

вобщем читаю:
Цитата:
Порядок авторизации на логин сервере

Во первых сразу замечу что существует две ревизии протокола использующиеся на данный момент(может и больше но мне о них не известно) - c621 и 785a.
Отличие их в том что в c621 используется дополнительное шифрование и авторизация GameGuard. Пакеты Init и RequestAuthLogin также отличаются.
Определить версию можно по размеру пакета Init, для ревизии 785a он составляет 11 байт, для c621 – 170.

1. Сразу после установки соединения сервер отправляет клиенту пакет Init
2. В ответ на него клиент отправляет пакет RequestGGAuth(в ревизии протокола 785a этот пакет не высылается)
3. Сервер отвечает на него пакетом GGAuth (в ревизии протокола 785a этот пакет не высылается)
4. Если сервер ответил, что авторизация прошла успешно, то клиент высылает пакет RequestAuthLogin, содержащий логин и пароль.
5. Проверка логина и пароля, в случае неудачи, сервер высылает пакет LoginFail содержащий причину неудачи, инатче высылается пакет LoginOk, содержащий session key #1.
6. Далее клиент запрашивает список серверов пакетом RequestServerList
7. В ответ на этот пакет сервер высылает клиенту ServerList, в нем содержиться список серверов и их IP адреса с номерами портов.
8. После выбора game-сервера, и нажатия на ОК, клиент отсылает пакет RequestServerLogin
9. Сервер авторизации выполняет проверки на максимальное количество игроков, доступность сервера и т.п., если все проверки пройдены, то высылает пакет PlayOk,содержащий session key #2, этот ключь генерируется из текущего времени системы в мс, номера сокета и еще всякой лабуды. После этого клиент отключается от логин сервера и подключается к гейм серверу.
Подключаюсь к серверу авторизации. Сервер мне выдает 11 байт:

Код:
0B 00 00 BC 19 4C 77 5A 78 00 00
в которых видно, что ревизия 785a
т.е. 2 и 3 пункты нам не нужны.
далее я формирую и отправляю пакет RequestAuthLogin с реальными данными.
Но сервер меня дисконектит...

Согласно вот этого (взято с вышеуказанного сайта):
Цитата:
RequestAuthLogin
Назначение: запрашивает авторизацию на логин сервере
Формат для ревизии 0x785a:

Код:

00
XX XX XX XX 00 // строка содержащая логин. Имеет длинну 14 байт и храниться в формате ASCII а не UNICODE !!!
XX XX XX XX 00 // строка содержащая пароль. Имеет длинну 16 байт и храниться в формате ASCII а не UNICODE !!!
08 // маркер конца секции логин/пароль
00 00 00 00 // не используется
00 00 00 00 // не используется
Делаю так :
Код:
...
type TRequestAuthLogin = packed record  
   s1:byte;
   login:packed array[1..14] of char;
   pass:packed array[1..16] of char;
   s2:byte;
   s3:cardinal;
   s4:cardinal;
   end;
...
var
  login:string='реальный логин';
  password:string='реальный пароль';

...
procedure ...   // процедура формирования  и отправки пакета RequestAuthLogin
var
 str:TRequestAuthLogin;
 i: integer;
begin
 str.s1:=0;
 str.s2:=8;
 str.s3:=0;
 str.s4:=0;
 for i:=1 to 14 do
  if i>length(login)
    then str.login[i]:=chr(0)
    else str.login[i]:=login[i];
 for i:=1 to 16 do
  if i>length(password)
    then str.pass[i]:=chr(0)
    else str.pass[i]:=password[i];
   .....  // Здесь отправляю сформированный пакет...
end;
...
Когда смотрю снифером, что отправляется на сервер при авторизации стандартным клиентом, то все равно не вижу там ничего похожего на свой логин и пароль в ASCII.

Что я неправильно делаю или что я неправильно понял в описании протокола?

Добавлено через 46 минут
Поискал еще информацию.
Понял что забыл передавать размер пакета вначале, ну и как оказалось нужно все шифровать в Blowfish

У кого есть исходники Blowfish на Delphi ?

Последний раз редактировалось glukmaker, 11.10.2011 в 20:18. Причина: Добавлено сообщение
glukmaker вне форума   Ответить с цитированием
 

  CoderX :: Forums > Основные форумы > Программинг



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

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


Часовой пояс GMT +4, время: 12:40.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!