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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 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 вне форума   Ответить с цитированием
Старый 26.10.2011, 13:56   #2
Новичок
 
Регистрация: 14.10.2011
Сообщений: 14
Сказал Спасибо: 5
Имеет 0 спасибок в 0 сообщенях
andrewcik пока неопределено
По умолчанию

досихпор неразобрался. помогите кто знает!
кстати логин записывать в пакет задом наперёд (т.е. не admin, a nimda)?
__________________
если чёта не так написал, то извиняйте, не программер я , а так самоучка чуть-чуть
andrewcik вне форума   Ответить с цитированием
Старый 26.10.2011, 14:02   #3
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

Цитата:
логин записывать в пакет задом наперёд
нормально он записывается.
пх к клиенту подключи и посмотри что клиент шлет. скорей всего есть еще 4 константных дворда после ключиков.

к примеру фрея
delphi Код:
Procedure CallRequestAuthLogin(LoginName:string;SessionKey1_1,SessionKey1_2,SessionKey2_1,SessionKey2_2:Integer);stdcall; begin   with Parser do   if mode = 0 then   begin     ClearOut;     WB($2B);     WS(LoginName);     WD(SessionKey2_2);     WD(SessionKey2_1);     WD(SessionKey1_1);     WD(SessionKey1_2);     WD(8);     WD(672);     WD(0);     WD(0);     SendBuf;   end; end;
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
За это сообщение alexteam нажился спасибкой от:
Ответ

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



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

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


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

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

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