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

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

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

Цитата:
Сообщение от xkor Посмотреть сообщение
странно что ключ неверный
L2PacketHack вычислил правильный ключ, пакеты расшифровывает верно.
Только мне не понятен алгоритм получения им этого ключа, которым он расшифровывает 1й зашифрованный пакет от сервера.

Вот пакет с ключем KeyInit, он не шифруется
0001 03 B1 93 B6 01 00 00 00 01 00 00 00

03 B1 93 B6 - это первая часть ключа, вторая A1 6C 54 87 - это константа
в итоге получается такой ключ: 03 B1 93 B6 A1 6C 54 87

Но L2PacketHack первый пакет от сервера расшифровывал этим ключом:
04 FE 08 00 A1 6C 54 87

Вот я и пытаюсь понять как он из получил 04 FE 08 00 этот ключ
Полагаю что работает смена XOR ключа, опция в настройках включена.
Остальные ключи получаются добавлением длины пакета к текущему ключу.
А вот как и по какому алгоритму получается ключ для первого зашифрованного пакета?
Т.е. этот 04 FE 08 00

Добавлено через 1 минуту
С паскалем у меня проблемы, пишу на С++
Поэтому из исходников паскаля и не могу разобраться с алгоритмом

Последний раз редактировалось roma_, 04.09.2009 в 03:41. Причина: Добавлено сообщение
roma_ вне форума   Ответить с цитированием
Старый 04.09.2009, 04:16   #12
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, 11:45   #13
Рыцарь
 
Аватар для 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, 15:33   #14
Новичок
 
Регистрация: 03.09.2009
Сообщений: 5
Сказал Спасибо: 2
Имеет 0 спасибок в 0 сообщенях
roma_ пока неопределено
По умолчанию

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

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



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

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


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

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

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