Hello guys, i just tried run l2px on azurel2, everything works well, but.. decrypt packets is wrong, i mean first char of evry packets is fine, but the rest not.
I think (i'm not sure) that azure have modified decrypt/encrypt system, if i'm not wrong its modified XOR key, i tried find it for 4 days, but i didn't. I dont know asm, if i know i'll debugg theirs dll's. Can anybody tell me, what can it be ? My theory about XOR is possible ? Thx for any answers
P.S -
http://www.azuregaming.net/
Russian - Translated by Translator :P
Этот текст был переведен online переводчиком и я надеюсь он правильно
Привет парни, я только пробовал управляемый l2px на azurel2, все работает хорошо, но .. расшифровывают пакеты, неправильно, я подразумеваю, что первая случайная работа evry пакетов прекрасна, но остальные нет.
Я думаю (я не уверен), что голубой изменили, расшифровывают/зашифруют систему, если я не неправилен ее измененный ключ XOR, я пробовал, находят это в течение 4 дней, но я не сделал. Я не знаю asm, если я знаю, что я буду debugg их dll's. Любой может сказать мне, каково это может быть? Моя теория о XOR возможна? Thx для любых ответов
P.S - http: // www.azuregaming.net/
Добавлено через 4 часа 28 минут
Anyone know how to obtain XOR key from known Pck ?
For eg.
Любой знает, как получить ключ XOR от известного Pck?
Например
Clean pck atfer BF :
Чистите pck после BlowFish
Код:
E8 55 F5 85 38 7B 82 5F 8F D6 2F A3 FB FD 5C
I got pck after XOR :
Pck после XOR со стандартным ключом
Код:
38 C3 ED 75 1C 2F AD 5A 00 27 B4 89 F9 6A F5
It should be :
Это должно быть
Код:
38 3A 00 29 00 3A 00 29 00 00 00 00 00 00 00
And now, how to find this XOR Key?
For the first time i was trying sth like this :
И теперь, как находить этот Ключ XOR?
Впервые я пробовал кое-что как это:
Код:
if not FirstPckWas then begin //Enter World
txt := '';
for i:=0 to SizeC do txt := txt + inttohex(ord(PakiecikC[i]), 2)+' ';
l2form.Memo9.Lines.Add('PakiecikC, size :'+inttostr(SizeC)+' = '+txt);
AfterCharSel := false;
for z := 0 to 15 do Pakiecik[z] := Thread[id].xorC.GKeyS[z];
for z := 0 to 15 do Thread[id].xorC.GKeyS[z] := $00;
for z := 0 to 15 do begin
v := 15-z;
for y:=0 to 255 do begin
for x:=0 to 15 do begin
i := 15 -x;
if v > x then Thread[id].xorC.GKeyS[i] := KeyC[i];
end;
for x:=0 to SizeC do PckTmpC[x] := PakiecikC[x];
Thread[id].xorC.GKeyS[v] := y;
Thread[id].xorC.GKeyR[v] := y;
EnterCriticalSection(_cs);
Thread[id].xorC.DecryptGP(PckTmpC, SizeC);
LeaveCriticalSection(_cs);
(* if v = 15 then
if ord(PckTmpC[16]) = $00 then begin
KeyC[15] := y;
break;
end; *)
if v = 14 then
if ord(PckTmpC[14]) = $00 then begin
KeyC[14] := y;
break;
end;
if v = 13 then
if ord(PckTmpC[13]) = $00 then begin
KeyC[13] := y;
break;
end;
if v = 12 then
if ord(PckTmpC[12]) = $00 then begin
KeyC[12] := y;
break;
end;
if v = 11 then
if ord(PckTmpC[11]) = $00 then begin
KeyC[11] := y;
break;
end;
if v = 10 then
if ord(PckTmpC[10]) = $00 then begin
KeyC[10] := y;
break;
end;
if v = 9 then
if ord(PckTmpC[9]) = $00 then begin
KeyC[9] := y;
break;
end;
if v = 8 then
if ord(PckTmpC[8]) = $00 then begin
KeyC[8] := y;
break;
end;
if v = 7 then
if ord(PckTmpC[7]) = $29 then begin
KeyC[7] := y;
break;
end;
if v = 6 then
if ord(PckTmpC[6]) = $00 then begin
KeyC[6] := y;
break;
end;
if v = 5 then
if ord(PckTmpC[5]) = $3A then begin
KeyC[5] := y;
break;
end;
if v = 4 then
if ord(PckTmpC[4]) = $00 then begin
KeyC[4] := y;
break;
end;
if v = 3 then
if ord(PckTmpC[3]) = $29 then begin
KeyC[3] := y;
break;
end;
if v = 2 then
if ord(PckTmpC[2]) = $00 then begin
KeyC[2] := y;
break;
end;
if v = 1 then
if ord(PckTmpC[1]) = $3A then begin
KeyC[1] := y;
break;
end;
if v = 0 then
if ord(PckTmpC[0]) = $38 then begin
KeyC[0] := y;
l2form.memo9.lines.add('Klucz[0] = ' + inttohex(Thread[id].xorC.GKeyS[v],2));
txt := '';
for i:=0 to SizeC do txt := txt + inttohex(ord(PckTmpC[i]), 2)+' ';
l2form.Memo9.Lines.Add('PakiecikC 0 - 15 ['+inttostr(v)+'][ '+inttostr(y)+' ] : '+txt);
txt := '';
for i:=0 to 15 do txt := txt + inttohex(KeyC[i], 2) + ' ';
l2form.Memo9.Lines.Add('Klucz XoR : '+txt);
txt := '';
for i:=0 to 15 do txt := txt + inttohex(Thread[id].xorC.GKeyS[i], 2) + ' ';
l2form.Memo9.Lines.Add('Serious Klucz XoR : '+txt);
break;
end;
end;
end;
for z := 0 to 15 do begin
Thread[id].xorC.GKeyS[z] := Pakiecik[z];
Thread[id].xorC.GKeyR[z] := Pakiecik[z];
end;
for z := 0 to 15 do Thread[id].xorC.GKeyS[z] := $00;
for z := 0 to 15 do begin
for y:=0 to 255 do begin
v := 255-y;
for x:=0 to SizeC do PckTmpC[x] := PakiecikC[x];
Thread[id].xorC.GKeyS[z] := v;
Thread[id].xorC.GKeyR[z] := v;
EnterCriticalSection(_cs);
Thread[id].xorC.DecryptGP(PckTmpC, SizeC);
LeaveCriticalSection(_cs);
if z = 15 then
if ord(PckTmpC[15]) = $00 then break;
if z = 14 then
if ord(PckTmpC[14]) = $00 then break;
if z = 13 then
if ord(PckTmpC[13]) = $00 then break;
if z = 12 then
if ord(PckTmpC[12]) = $00 then break;
if z = 11 then
if ord(PckTmpC[11]) = $00 then break;
if z = 10 then
if ord(PckTmpC[10]) = $00 then break;
if z = 9 then
if ord(PckTmpC[9]) = $00 then break;
if z = 8 then
if ord(PckTmpC[8]) = $00 then break;
if z = 7 then
if ord(PckTmpC[7]) = $29 then break;
if z = 6 then
if ord(PckTmpC[6]) = $00 then break;
if z = 5 then
if ord(PckTmpC[5]) = $3A then break;
if z = 4 then
if ord(PckTmpC[4]) = $00 then break;
if z = 3 then
if ord(PckTmpC[3]) = $29 then break;
if z = 2 then
if ord(PckTmpC[2]) = $00 then break;
if z = 1 then
if ord(PckTmpC[1]) = $3A then break;
if z = 0 then
if ord(PckTmpC[0]) = $38 then begin
txt := '';
for i:=0 to SizeC do txt := txt + inttohex(ord(PckTmpC[i]), 2)+' ';
l2form.Memo9.Lines.Add('PakiecikC 15 - 0 ['+inttostr(v)+'][ '+inttostr(y)+' ] : '+txt);
txt := '';
for i:=0 to 15 do txt := txt + inttohex(Thread[id].xorC.GKeyS[i], 2) + ' ';
l2form.Memo9.Lines.Add('Klucz XoR : '+txt);
end;
end;
end;
for z := 0 to 15 do begin
Thread[id].xorC.GKeyS[z] := Pakiecik[z];
Thread[id].xorC.GKeyR[z] := Pakiecik[z];
end;
FirstPckWas := true;
WasWrite := false;
end;
When i tried it on server without protection etc. then i got correct parts of Key ( but just parts ), now i dont know what i'm doing wrong, or this procedure is not good ?
Когда я пробовал это на сервере без защиты и т.д. тогда, я получил правильные части Ключа (но только части), теперь я не знаю то, что я делаю неправильно, или эта процедура не хороша?