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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 13.01.2011, 01:38   #1
Новичок
 
Регистрация: 12.01.2011
Сообщений: 16
Сказал Спасибо: 2
Имеет 0 спасибок в 0 сообщенях
Brave пока неопределено
По умолчанию Снова про Init как проверить правельность результата?

Я новичок на этом форуме, поэтому хочется всех поприветствовать!
Надеюсь найти здесь ответы на возникающие сложности, поиском пользоваться умею, но к сожалению не решил свои проблемы.


Для экспериментов с пакетами, установил java логин-сервер от L2Base для Interlude на локалке.

Пишу на Delphi 7.(I love Pascal )
(На работе программирую на редкостной гадости под названием Х++)

Привожу код моего консольного приложения:
(Куски брал с похожих тем)
delphi Код:
type   PFixPck = ^TFixPck;   TFixPck = packed record case Integer of     0:(ch:    array[Word] of Char);     1:(bt:    array[Word] of Byte);     2:(size:  Word;        id:    Byte;        dbt:   array[0..65532] of Byte);    end; var   ws: TWSAData;   Sock:TSocket;   Addr_in: sockaddr_in;   size: integer;   DataB:TFixPck;   i:integer; procedure LoginXORDecrypt(var xpck: TFixPck); var   i,k: Integer; begin   i:=xpck.size-8;   k:=PInteger(@xpck.ch[i])^;   while i>=6 do begin     PInteger(@xpck.ch[i])^:=PInteger(@xpck.ch[i])^ xor k;     k:=k-PInteger(@xpck.ch[i])^;     i:=i-4;   end; end; function GetSocketData(Socket: TSocket; var Data; const Size: Word): Boolean; var   Position: Word;   Len: Integer;   DataB: array[0..$5000] of byte absolute Data; begin   Result:=False;   Position:=0;   while Position<Size do   begin     Len:=recv(Socket,DataB[Position],1,0);     if Len<=0 then Exit;     Inc(Position, Len);   end;   Result:=True; end; begin   if WSAStartup($202,ws)<>0 then     begin       Writeln('Error1!');       exit;    end;    Sock:=WinSock.socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);    if Sock= INVALID_SOCKET then                             begin                               Writeln('Oshibka sozdania soketa!');                               exit;                             end;   FillChar(Addr_in, SizeOf(sockaddr_in), 0);   Addr_in.sin_family:= AF_INET;   Addr_in.sin_addr.s_addr := inet_addr('127.0.0.1');   Addr_in.sin_port := HToNS(2106);   if connect(Sock, Addr_in, SizeOf(Addr_in))=0 then   begin    WriteLn('Connect!!! =)');    DataB.size:=186;    write(inttostr(DataB.size));    GetSocketData(Sock,DataB.dbt,186);    for i:=0 to 186 do    begin     Write(IntToHex(ord(DataB.ch[i]),2));write(' ')    end;    LoginXORDecrypt(DataB);    WriteLn('=');    for i:=0 to 186 do    begin     Write(IntToHex(ord(DataB.ch[i]),2));write(' ')    end;   end   else   begin    WriteLn('No connect!!!');   end;   { TODO -oUser -cConsole Main : Insert code here } end.
Доп.Вопрос: Какой тег подкрашивает Delphi код?

Вкратце:
1.Создаю сокет
2.Подключаюсь
3.Читаю буфер
4.Вывожу результат
5.XOR (РазКСОРиваю)
6.Вывожу результат.

Вот что получается:
Код:
RAW представление:
BA 00 00 BA 00 0D CA D7 70 99 75 78 3D F5 C6 F5 D2 4D 40 BC D8 84 98 37 8A 98
7F 0D 8D 99 3C 83 1F 29 B8 EC DF 4C 39 85 C9 66 3B B1 E2 97 79 C5 34 5B 0A 4C 7
9 EC 17 0E 33 6E 98 FF EE AE 88 3A 97 3C 36 A1 63 B8 27 54 79 4E BE 67 AC C8 18
71 25 24 00 4A 10 B5 7E 70 1D 85 D5 CA 93 A2 F7 53 78 4B CF AD 80 1B 87 4E 9C C0
 66 4B AF C7 CF 08 A1 FE F3 C0 96 21 7D 42 50 D5 9B 2D DB CD 51 04 CD B8 96 C0 5
2 3D 5C 07 97 2A 58 E6 29 7F 6D E8 10 D8 7D 18 75 77 6D F8 B8 A1 2D 90 99 35 00
36 13 E1 DC 83 F4 67 8D EE 5A E3 07 87 54 E3 81 DF 23 E0 AD 6E 0C B0 F3 00 1F AD
 F6 
=========LoginXORDecrypt=============
BA 00//размер 
00 //тип пакета(Init)
BA 00 0D 21// ID сессии
F0 AD 0D CF//Ревизия протокола
//Далее не осилил, так как ненашел нормального описания см. ниже.
AA F0 B0 86 91 0A 36 38 6D A1 EC 71 3B 09 1F 4B
70 77 4F 44 97 B2 ED 61 6E 19 D6 F2 CB 17 F7 BC 73 0E C3 7F 01 6C 87 03 46 96 09 8F 02 26 C4 E0 F9 7D 82 7A 9A 4A 8B EB 12 DB 05 B5 F1 E2 F9 56 69 89 2C 18 BB CA 70 EA 45 15 30 CB 39 8E D8 BA 64 E4 6B CC F6 07 51 4A 94 FC A4 A1 8B F2 83 A9 43 30 7A 20 37 D7 21 86 7E 59 73 06 67 E5 E9 
54 D6 97 5A C3 44 E0 53 42 C4 3B EB 64 21 7F 3A B5 F1 26 
37 C0 FF 05 6F 68 C0 32 E8 BE 97 3F 55 2D 5A 8B AA 2C B7
80 BF 59 95 B2 04 76 6C 0E 40 86 3A 
88 BC 2C B1 2F 50 00 
00 00 00 F3 
00 1F AD F6
Описания пакета Init которые мне удалось найти:
[i]1.http://fursoffers.narod.ru/Packets.htm#Init

Сразу появляется вопрос:
По алгоритму XOR который я взял с форума, XOR ключ находиться не в последних 4 байтах а в пред последних 4 байтах.(Номер первого байта ключа (186-8=178)) Как правильно его брать?

2.http://www.la2kings.ru/la2bot/packets.html#Init
Это описание вообще не понятное. поэтому прошу объяснить, что есть что в пакете.
Не могли бы вы мне пояснить от чего зависит место расположения XOR ключа в пакете Init от сервера?

Как проверить, правильно ли я расксорил пакет?

Возможно я вообще все не так делаю =))

Последний раз редактировалось Brave, 13.01.2011 в 01:47.
Brave вне форума   Ответить с цитированием
Старый 13.01.2011, 01:45   #2
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

http://l2ext.com/files/l2EmuSrc.rar

Добавлено через 2 минуты
Цитата:
Какой тег подкрашивает Delphi код?
[ HIGHLIGHT="delphi" ] лишние пробелы - убрать. [ /HIGHLIGHT ]
__________________
L2Ext - project closed.

Последний раз редактировалось alexteam, 13.01.2011 в 01:45. Причина: Добавлено сообщение
alexteam вне форума   Ответить с цитированием
За это сообщение alexteam нажился 3 спасибками от:
Старый 13.01.2011, 01:59   #3
Новичок
 
Регистрация: 12.01.2011
Сообщений: 16
Сказал Спасибо: 2
Имеет 0 спасибок в 0 сообщенях
Brave пока неопределено
По умолчанию

Скачал, скомпилировал, удачно подключился, есть чем проверять свои наработки, очень рад ) Это просто супер!!!
Вопрос: А это только для Interlude? Если нет, то огласите пожалуйста весь список поддерживаемых хроник.
P.S. "Очередная хрень =)" -> Очень полезная хрень для новичков.
Brave вне форума   Ответить с цитированием
Старый 13.01.2011, 02:07   #4
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

работает для ГФ+
ил, возможно.
единственное что там надо править - это размер блока в пакете с списком серверов. (кажется 21 для ГФ и 23 для грации, или наоборот. непомню.)
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
Старый 14.01.2011, 02:18   #5
Новичок
 
Регистрация: 12.01.2011
Сообщений: 16
Сказал Спасибо: 2
Имеет 0 спасибок в 0 сообщенях
Brave пока неопределено
По умолчанию

Вот на вопрос про пакет Init для разных хроник я не получил ответа.
Какая структура для каких хроник? Как сделать коннектор универсальным, чтобы он по пакету Init узнавал что за хроники? Конечно есть другой выход-выставлять хроники опционально.

axlexteam, еще раз спасибо за исходники, очень продвинулся.

Как из клиента выдрать статический BlowFish ключ?

Последний раз редактировалось Brave, 14.01.2011 в 02:44.
Brave вне форума   Ответить с цитированием
Старый 14.01.2011, 03:16   #6
Местный
 
Регистрация: 27.01.2009
Сообщений: 154
Сказал Спасибо: 23
Имеет 26 спасибок в 19 сообщенях
guplen пока неопределено
По умолчанию

Цитата:
Сообщение от Brave Посмотреть сообщение
Как из клиента выдрать статический BlowFish ключ?
Зачем его выдирать из клиента, если он известен и написан на том сайте, который ты написал в 1 сообщении.

Цитата:
По умолчанию статический ключ -
6B 60 CB 5B 82 CE 90 B1 CC 2B 6C 55 6C 6C 6C 6C.
guplen вне форума   Ответить с цитированием
Старый 14.01.2011, 15:41   #7
Новичок
 
Регистрация: 12.01.2011
Сообщений: 16
Сказал Спасибо: 2
Имеет 0 спасибок в 0 сообщенях
Brave пока неопределено
По умолчанию

Собственно разобрав пример который мне прислал уважаемых alexteam я составил алгоритм действий, который опишу ниже для того чтобы знатоки
откорректировали недочёты, если они есть, и тема была полезна для других пользователей.
Собствено алгоритм:
Сразу хочется сказать что размер пакета отрезаеться при его получении и добаляеться при его отправке
то есть пакет состоит из структуры:
packet=record
size:word//размер пакета
Data:array [0..size]of byte;//собственно данные с которыми мы проводим операции.
end;

1. Создаём соединение с логин сервером.
2. Принимаем пакет Init.
2.1 Расшифровываем Data при помощи ХОR ключа содержащегося в последних 4-х байтах
2.2 Расшифровываем Data статическим ключом BlowFish.
2.3 Запоминаем SessionID 4 байта. RSA ключ 128 байт. Новый BlowFish ключ 16 байт.
3.Отправляем пакет RequestGGAuth c SessionID, который взяли из пакета Init.Добавили ЧекСумму.Зашифровали BlowFish.
4.Приняли ответ GGAuth от сервера.
4.1 Расшифровали его BlowFish.
4.2 Запоминаем GGAuthResponse
Теперь у нас есть все данные чтобы авторизироваться на сервере.
5. Зашифровываем логин и пароль при помощи RSA.
5.1 Формируем пакет RequestAuthLogin:128 байт Зашифрованного логина и пароля.В 129 байт пишем 4 байта с GGAuthResponse.
В 149 байт ставим 8. Добавляем чек сумму 160 байт.
5.2 Зашифровываем пакет BlowFish из пакета Init.
6. Отправляем.
7.Принимаем, все ли правильно сделали. =)

Жду ответов. Так же хочется узнать об изменениях этого алгоритма в зависимости от хроник.

А еще чуть не забыл спросить. Что такое Ревизия?? Я это слово встречал на сборках серверов, а есть ли она у клиента?
Brave вне форума   Ответить с цитированием
Старый 15.01.2011, 23:10   #8
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Цитата:
Сообщение от Brave Посмотреть сообщение
2.1 Расшифровываем Data при помощи ХОR ключа содержащегося в последних 4-х байтах
2.2 Расшифровываем Data статическим ключом BlowFish.
по моему наоборот, сначала BlowFish'ем дешифруем а потом уже XOR

Добавлено через 12 минут
Цитата:
Сообщение от Brave Посмотреть сообщение
Что такое Ревизия??
это порядковый номер под который присвоен сорцам текущей версии при заливке в систему контроля версий
__________________
Я здесь практически не появляюсь!, Skype - ikskor

Последний раз редактировалось xkor, 15.01.2011 в 23:10. Причина: Добавлено сообщение
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился спасибкой от:
Старый 08.02.2011, 23:05   #9
Пользователь
 
Регистрация: 14.09.2010
Сообщений: 38
Сказал Спасибо: 5
Имеет 0 спасибок в 0 сообщенях
Кислый пока неопределено
По умолчанию

у меня примерно из этой же оперы вопрос:

init по версии 785a должен содержать 11 байт.
например:
Сервер, Length: 11 (0x0B)
-------------------------------------------------------
0x0000| 0B 00 00 9C 77 ED 03 5A 78 00 00
-------------------------------------------------------
вроде все верно. но вот что меня заинтересовало: в одном из серверов я увидел это:

Сервер, Length: 155 (0x9B)
*-------------------------------------------------------*
0x0000| 9B 00 00 FD 8A 22 00 5A 78 00 00 E5 FB 6D E3 DE
0x0010| D5 FC 45 42 B8 84 01 26 73 C3 FF BD 0B 32 FA B6
0x0020| F9 CA 0E 48 0F 94 7A CC C1 AF FE B5 76 5C B0 9D
0x0030| 6E 5A 73 EE 77 12 67 47 1C 78 D2 9B 22 D1 38 90
0x0040| 60 82 53 14 1C B2 04 D6 75 29 47 08 56 8C 81 63
0x0050| 14 93 B1 47 2C B8 F9 23 DB 09 8C 87 56 36 02 92
0x0060| BA 25 57 51 9E 33 8D 40 6E E0 3D A7 CA 9A 69 D6
0x0070| 07 AE 60 25 5C 47 C8 55 5A 07 83 E5 B8 0B 85 FF
0x0080| 62 66 07 B9 D4 E4 D3 65 DD 3C F4 00 00 00 00 00
0x0090| 00 00 00 00 00 00 00 00 00 00 00

155 байт. Третьи хроники.

Почему так ?

Добавлено через 20 минут
согласно вот этому:
Код:
procedure LS_init(buff: array of byte; Len: integer);
begin
ToLog('********* LS_init ************');
ToLog('');
  if Len<8 then exit;
  Move(buff[3],SessionID,4);
  if Len>=155 then begin
    SetLength(RSA_key,128);
    Move(buff[11],RSA_key[1],128);
    ToLog('RSA Key changed :');
  end;
  if Len>=171 then begin
    SetLength(bf_key,16);
    Move(buff[155],bf_key[1],16);
    bf.Init(bf_key);
    ToLog('BlowFish key changed');
  end;
  //sending AuthGG packet
  AuthGameGuard;
end;
в 785a возможно RSA шифрование логина и пароля.

Последний раз редактировалось Кислый, 08.02.2011 в 23:06. Причина: Добавлено сообщение
Кислый вне форума   Ответить с цитированием
Ответ

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



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

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


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

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

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