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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 04.09.2009, 01:10   #1
Новичок
 
Регистрация: 03.09.2009
Сообщений: 5
Сказал Спасибо: 2
Имеет 0 спасибок в 0 сообщенях
roma_ пока неопределено
По умолчанию

Еще раз спасибо alexteam за ответ.

Алгоритм примерно понял, помогите разобраться каким образом L2PacketHack получает НАЧАЛЬНЫЙ XOR ключ для дешифровки первого пакета?

пакет с ключем KeyInit
0001 03 B1 93 B6 01 00 00 00 01 00 00 00

следующий пакет (еще не дешифрован)
17 E8 E0 E0 02 12 AE F0 F4 43 4B 05 E7 EA 56 5A 5E....

этот же пакет но после дешифровки L2PacketHack
13 01 00 00 43 7C E8 D9 00 49 00 4E 43 61 E8 8B 00....

восстанавливаю XOR ключ, получаю:
04 FE 08 00 A1 6C 54 87 04

байты с 5 по 8 понятно, это константный ключ, а вот первые четыре совсем не совпадают с ключом из пакета KeyInit

как получился такой ключ?

Добавлено через 1 час 48 минут
Эта процедура формирует начальный XOR ключ?
я в паскале ничего не понимаю

procedure TencDec.CorrectXor;
var
// tmp: string;
Offset: Word;
TempPacket : Tpacket;
begin
//Обход смены XOR ключа.
case pckCount of
3: CorrectXorData := Packet;
4: begin
TempPacket := Packet;
// SetLength(tmp, TempPacket.Size);
// Move(TempPacket, tmp[1], TempPacket.Size);
xorS.DecryptGP(TempPacket.Data, TempPacket.Size-2);
Offset := $13 or ((TempPacket.size-7) div 295) shl 8;
PInteger(@TempPacket.Data[0])^:=PInteger(@TempPacket.Data[0])^ xor Offset xor PInteger(@(xorS.GKeyS[0]))^;
xorS.InitKey(TempPacket.Data[0],isInterlude);
xorC.InitKey(TempPacket.Data[0],isInterlude);
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;

Если да, то пожалуйста ответьте на вопросы:
1)
TempPacket.size это размер четвертого пакета? (в котором передаются данные о выбранном персонаже)?

2) откомментируйте чего происходит в этих строках

PInteger(@TempPacket.Data[0])^:=PInteger(@TempPacket.Data[0])^ xor Offset xor PInteger(@(xorS.GKeyS[0]))^;
xorS.InitKey(TempPacket.Data[0],isInterlude);
xorC.InitKey(TempPacket.Data[0],isInterlude);
if (not Settings.isNoDecrypt) then xorC.DecryptGP(CorrectXorData.Data, CorrectXorData.Size-2);
if (not Settings.isNoDecrypt) then xorC.EncryptGP(CorrectXorData.Data, CorrectXorData.Size-2);

Последний раз редактировалось roma_, 04.09.2009 в 01:10. Причина: Добавлено сообщение
roma_ вне форума   Ответить с цитированием
Старый 04.09.2009, 11:45   #2
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

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й по счету пакет в "сеансе связи" мы запоминаем 4begin //и используем тут       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;
__________________
L2Ext - project closed.

Последний раз редактировалось alexteam, 04.09.2009 в 11:58.
alexteam вне форума   Ответить с цитированием
За это сообщение alexteam нажился спасибкой от:
Старый 04.09.2009, 04:16   #3
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

вот весь алгоритм:
Offset := $13 or ((TempPacket.size-7) div 295) shl 8;
PInteger(@TempPacket.Data[0])^:=PInteger(@TempPacket.Data[0])^ xor Offset xor PInteger(@(xorS.GKeyS[0]))^;

это для пакета со списком чаров (первый зашифрованный пакет от сервера)
тут в Offset заносится количество чаров на аке во второй байт (вычисляется исходя из размера пакета), и id пакета ($13) в первый байт
тока перед всеми этими операция дешифруем неверным ключем
а дальше чтобы получить ключ настоящий ксорим первые 4 байта пакета на Offset и на первые 4 байта неверного ключа
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился спасибкой от:
Старый 04.09.2009, 15:33   #4
Новичок
 
Регистрация: 03.09.2009
Сообщений: 5
Сказал Спасибо: 2
Имеет 0 спасибок в 0 сообщенях
roma_ пока неопределено
По умолчанию

Спасибо за оказанную помощь, пошел проверять
roma_ вне форума   Ответить с цитированием
Ответ

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


Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

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

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


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

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

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