Показать сообщение отдельно
Старый 24.10.2011, 21:16   #1
Новичок
 
Регистрация: 14.10.2011
Сообщений: 14
Сказал Спасибо: 5
Имеет 0 спасибок в 0 сообщенях
andrewcik пока неопределено
По умолчанию Формирование AuthLogin для GS

Подскажите чего делаю не так? Пример формирования взят отсюда - http://www.la2kings.ru/la2bot/packet...questAuthLogin
Код:
RequestAuthLogin
Формат:
XX XX           // Длина
08              // Тип
XX XX ... 00 00 // Login (Unicode строка)
XX XX XX XX     // SessionKey2_SecondPart
XX XX XX XX     // SessionKey2_FistPart
XX XX XX XX     // SessionKey1_FistPart
XX XX XX XX     // SessionKey1_SecondPart
01 00 00 00

Др.названия: AuthLogin
итак:
5701C7C5 - PlayOk2_2
EF80ABB - PlayOk2_1
72A03470 - LoginOk1_1
D6C018C0 - LoginOk1_2
admin - логин
получился пакет без крипта:
Код:
0x0000| 27 00 08 61 64 6D 69 6E 00 00 00 00 00 00 00 00 
0x0010| 00 00 00 C5 C7 01 57 BB 0A F8 0E 70 34 A0 72 C0 
0x0020| 18 C0 D6 01 00 00 00
закриптованный:
Код:
0x0000| 27 00 27 42 E9 47 A5 6B 3A 87 2F 2B EC 4E A1 6C 
0x0010| 54 87 2F EE EE 88 F7 80 E5 75 D9 55 A8 DA 73 DE 
0x0020| 8C 5F 39 FC ED 4E A1
криптую кодом указанным ниже, отправляя в него полученный XOR ключ:
Код:
unit CryptXOR;

interface

type
  TxorCrypt = object
  public
    GKeyS,GKeyR:array[0..15] of Byte;
    isInit: Boolean;
    keyLen: integer;
    procedure InitKey(const XorKey; Interlude: Boolean = False);
    procedure DecryptGP(var Data; const Size: Word);
    procedure EncryptGP(var Data; const Size: Word);
  end;

implementation

procedure TxorCrypt.DecryptGP(var Data; const Size: Word);
var
  k:integer;
  pck:array[0..0] of Byte absolute Data;
begin
  if not isInit then Exit;
  for k:=size-1 downto 1 do
    pck[k]:=pck[k] xor GKeyR[k and keyLen] xor pck[k-1];
  if size<>0 then pck[0]:=pck[0] xor GKeyR[0];
  Inc(PCardinal(@GKeyR[keyLen-7])^,size);
end;

procedure TxorCrypt.EncryptGP(var Data; const Size: Word);
var
  i:integer;
  pck:array[0..0] of Byte absolute Data;
begin
  if not isInit then Exit;
  if size<>0 then pck[0]:=pck[0] xor GKeyS[0];
  for i:=1 to size-1 do
    pck[i]:=pck[i] xor GKeyS[i and keyLen] xor pck[i-1];
  Inc(PCardinal(@GKeyS[keyLen-7])^,size);
end;

procedure TxorCrypt.InitKey(const XorKey; Interlude: Boolean = False);
const
  KeyConst: array[0..3] of Byte = ($A1,$6C,$54,$87);
  KeyConstInterlude: array[0..7] of Byte = ($C8,$27,$93,$01,$A1,$6C,$31,$97);
begin
  if Interlude then begin
    keyLen:=15;
    Move(XorKey,GKeyS,8);
    Move(KeyConstInterlude,GKeyS[8],8);
  end else begin
    keyLen:=7;
    Move(XorKey,GKeyS,4);
    Move(KeyConst,GKeyS[4],4);
  end;
  Move(GKeyS,GKeyR,16);
  isInit:=True;
end;

end.
выполняю функцию InitKey со значением False. ксор ключ - 2F2BEC4E33449AC7 из этого пакета:
Код:
0x0000| 19 00 2E 01 2F 2B EC 4E 33 44 9A C7 01 00 00 00 
0x0010| 01 00 00 00 01 00 00 00 00
версия протокола с621
__________________
если чёта не так написал, то извиняйте, не программер я , а так самоучка чуть-чуть

Последний раз редактировалось andrewcik, 24.10.2011 в 22:04.
andrewcik вне форума   Ответить с цитированием