PDA

Просмотр полной версии : Дешифровка трафика с гейм сервера


Marfey
11.11.2010, 05:35
Доброе время суток. Подскажи в чем мб проблема дешифрую трафик с гейм сервера потом сверяю как расшифровывает l2phx и есть разница.
8байт норм расшифровывается потом 8 байт неправильно потом опять 8 норм и т д

вот процедуры расшифровки

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

procedure TCryptXOR.InitKey(const keyInit; const Size: Cardinal);
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 Size=16 then begin
keyLen:=15;
Move(keyInit,GKeyS,8);
Move(KeyConstInterlude,GKeyS[8],8);
end else begin
keyLen:=7;
Move(keyInit,GKeyS,4);
Move(KeyConst,GKeyS[4],4);
end;
Move(GKeyS,GKeyR,16);
isInit:=True;
end;


вот так инициализирую ключ

procedure KeyPacket(buff: array of byte; Len: integer);
begin
Move(buff[4],key,16);
fCryptSrv:=TCryptXOR.Create;
fCryptSrv.InitKey(key,16);
end


Вот так расшифровываю

fCryptSrv.Decrypt(buff[2],len-2);


Добавлено через 11 часов 16 минут
Вопрос снимается сам разобрался

LAV45
12.11.2010, 02:49
KeyConst: array[0..3] of Byte = ($A1,$6C,$54,$87);
KeyConstInterlude: array[0..7] of Byte = ($C8,$27,$93,$01,$A1,$6C,$31,$97);

Для декодирования используется часть динамического ключа которая приходит от сервера и часть статического ключа.
Статический ключ находится в клиенте и похоже он у тебя явно не ($C8,$27,$93,$01,$A1,$6C,$31,$97)

точно не помню в какой DLL но когда открывал HEX редактором то видел прямым текстом там лежал StaticKey (может и ошибаюсь, сильно не бейте).

Marfey
12.11.2010, 05:39
KeyConst: array[0..3] of Byte = ($A1,$6C,$54,$87);
KeyConstInterlude: array[0..7] of Byte = ($C8,$27,$93,$01,$A1,$6C,$31,$97);

Для декодирования используется часть динамического ключа которая приходит от сервера и часть статического ключа.
Статический ключ находится в клиенте и похоже он у тебя явно не ($C8,$27,$93,$01,$A1,$6C,$31,$97)

точно не помню в какой DLL но когда открывал HEX редактором то видел прямым текстом там лежал StaticKey (может и ошибаюсь, сильно не бейте).

Спасибо что хоть кто-то ответил))) Но я уже писал выше что


Добавлено через 11 часов 16 минут
Вопрос снимается сам разобрался


В коде было все правильно
Была проблема во тут


procedure KeyPacket(buff: array of byte; Len: integer);
begin
Move(buff[4],key,16);
fCryptSrv:=TCryptXOR.Create;
fCryptSrv.InitKey(key,16);
end


в глобальных переменных я переменную key обозначил как string а нужно было как word

xkor
12.11.2010, 17:39
а нужно было как wordоОоОоОоО