PDA

Просмотр полной версии : AzureL2


kargo
30.03.2009, 19:42
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 ?

Когда я пробовал это на сервере без защиты и т.д. тогда, я получил правильные части Ключа (но только части), теперь я не знаю то, что я делаю неправильно, или эта процедура не хороша?

ratvier
31.03.2009, 11:01
Clean pck atfer BF
Here u say about game server packet, but BlowFish encryption uses only in communication with login server. O_o

So, as I understand is it c5 server? Do u try use l2phx option "Обход смены XOR ключа"?

kargo
31.03.2009, 17:34
So, as I understand is it c5 server? Do u try use l2phx option "Обход смены XOR ключа"?

Yes i'm using this option, but it's not normal server, they have good protection thats why i'm talking about changing xor or sth like this. I tested it on normal c5 server and it works fine, but not on Azure.

ratvier
31.03.2009, 19:21
kargo, see at this subforum:
http://coderx.ru/forumdisplay.php?f=31
Here discuss similar problems.