guplen, ты описал ксор шифрацию гейм сервера, на логин сервере первый пакет ксором дешифруется так:
delphi Код:
procedure LoginXORDecrypt(var xpck: TFixPck);
var
i,k: Integer;
begin
i:=xpck.size-8; // узнаем номер первого байта ключа (186-8=178)
k:=PInteger(@xpck.ch[i])^; // записываем ключ в 4хбайтовую переменнуюwhile i>=6dobegin// пока позиция больше или равна 6
PInteger(@xpck.ch[i])^:=PInteger(@xpck.ch[i])^ xor k; // ксорим очередные 4 байта на ключ
k:=k-PInteger(@xpck.ch[i])^; // вычитаем из ключа то что получилось
i:=i-4; // перемещаемся к предыдущим 4м байтамend;
end; // усё
короче тут не по одному байту ксорим а по 4, хотя в яве наверно ксорят по одному ибо там сложности с приведением типов...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
Тогда такой вопрос, возможно даже глупый:
Есть последовательность из 4 байтов, которые являются ключом. И чтобы мне эту последовательность записать в переменную типа int, надо эти 4 байта ключа перевести в число? Или как?
guplen, для его дешифрации нужен секретная часть ключа которую сервер не присылает. Я когда это делал то брал сохраненный лог пакетов между клиентом и сервером и зная логин и пароль пытался добиться такого же пакета.
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;
и еще, Yegor, ты на каком серве прошёл авторизацию? не подкинешь свои сорцы? буду благодарен