xkor, пардон.
тогда смотреть
L2Xor.InitKey и начало TencDec.ProcessRecivedPacket
Цитата:
Эта процедура формирует начальный XOR ключ?
я в паскале ничего не понимаю
|
L2Xor.InitKey его формирует.
InitKey вызывается из ProcessRecivedPacket после прихода 00h/2Eh
ну.. стоит оговориться что это в идеальном случае..
в твоем я так понимаю используеться CorrectXor
delphi Код:
procedure TencDec.CorrectXor;
var
Offset: Word;
TempPacket : Tpacket;
begin
//Обход смены XOR ключа.
case pckCount of //В зависимости от номера пакета
3: CorrectXorData := Packet; //3й по счету пакет в "сеансе связи" мы запоминаем
4: begin //и используем тут
TempPacket := Packet;
xorS.DecryptGP(TempPacket.Data, TempPacket.Size-2);
Offset := $13 or ((TempPacket.size-7) div 295) shl 8;//получаем ключ ориентируясь на 4й и запомненный 3й пакет предварительно "продекриптив" 4й пакет. и попутно привев его к изначальному (?) виду.
PInteger(@TempPacket.Data[0])^:=PInteger(@TempPacket.Data[0])^ xor Offset xor PInteger(@(xorS.GKeyS[0]))^;
xorS.InitKey(TempPacket.Data[0],isInterlude); //собственно в TempPacket.Data[0] лежит наш ключик.
xorC.InitKey(TempPacket.Data[0],isInterlude);
//чтобы всем было хорошо и в кеях у нас лежали "правильные" ключики, "учитываем" 4й пакет %)
if (not Settings.isNoDecrypt) then xorC.DecryptGP(CorrectXorData.Data, CorrectXorData.Size-2);
if (not Settings.isNoDecrypt) then xorC.EncryptGP(CorrectXorData.Data, CorrectXorData.Size-2);
InitXOR:=True;
end;
end;
end;