Доброго всем времени суток!
Начал было писать программку эмулирующую вход на сервер, но столкнулся с проблемой. Авторизацию на логин сервере прохожу вполне успежно, получаю ключи СессионИД и т.д. Загвозка заключается вот, в чем, не могу пройти логин на гейм сервере.
Часть кода взял из л2пакетхака. Пробую следующие:
PHP код:
const
Login='testtest';
var
XorOut, XorIn: TCodingClass;
Data:string;
....
XorIn:=L2Xor.Create;
XorOut:=L2Xor.Create;
XorIn.InitKey(Key,True);
XorOut.InitKey(Key,True);
....
Data:='08'; // RequestAuthLogin
Data:=Data+StringToHex(Login,'00')+'0000'; //Добавляем имя акка
Data:=Data+IntToHex(SessionKey2_2,8); //SessionKey2_2
Data:=Data+IntToHex(SessionKey2_1,8); //SessionKey2_1
Data:=Data+IntToHex(SessionKey1_2,8); //SessionKey1_2
Data:=Data+IntToHex(SessionKey1_1,8); //SessionKey1_1
Data:=Data+'01000000'; // Хм, что не знаю, но в пакете не изменно.
Data:=HexToStr(Data);
XorOut.EncryptGP(Data[1],Length(Data));
Сервер (и ява и птс) пишут что неверный сессион ид.
Подскажите где трабла, в чем ошибка?
И еще, я так понял, что при приеме/отправке любого пакета, ключ шифрования меняется, соответсвенно 2 вопроса:
а) Как меняется (+ или - к ключу от длинны пакета, учитываются ли те 2 байта что указывают на длунну самого пакета)
б) Учитывается ли 1 исходящий пакет ProtocolVervion и 1 входящий KeyInit при установке ключа.
Если можно немного коментов про смену ключа во время работы. Заранее благодарю.
Последний раз редактировалось Asmoday, 16.06.2009 в 09:41.
Причина: Поэксперементировал, помогло :)
а вот это скорее всего и есть ошибка, ибо байты при этом разворачиваются, то есть если например SessionKey1_1 = 9, то в пакет он запишется как 00000009, а должен как 09000000
__________________
Я здесь практически не появляюсь!, Skype - ikskor
Последний раз редактировалось xkor, 16.06.2009 в 17:36.
Причина: Добавлено сообщение
Сразу прошу прощение за навязчивость но попрошу описать алгоритм смены XOR ключа, точнее алгоритм получения начального xor ключа.
Если вдруг кто нить решится то БОЛЬШАЯ просьба описать в виде операций, на примере.
Исходники смотрел но разобраться в паскале не смог учил си
Добавлено через 10 минут
уточнение - клиент С4
Последний раз редактировалось roma_, 03.09.2009 в 22:31.
Причина: Добавлено сообщение
часть ключа - статическая (4 байта), а часть - приходит от сервера с пакетом 2Eh (тоже 4 байта)
склеиваем и получаем ключ котором следует ксорить/дексорить данные идущие после иниткея.
по ссылке которую выше давал xkor смотреть
L2Xor.InitKey и концовку TencDec.ProcessRecivedPacket
__________________
L2Ext - project closed.
За это сообщение alexteam нажился 2 спасибками от:
а часть - приходит от сервера с пакетом 2Eh (тоже 4 байта)
2Eh это начиная с камаэля где то, а в С4 этот пакет был с ИД - 0
roma_, странно что ключ неверный, он отличается от стандартно полученного, CorrectXor насколько я помню получает ключ (текущий а не начальный) анализируя толи 4й толи 3й пакет (поскольку там всегда нули в том месте которое шифруется динамической частью ключа, то можно вычислить текущий ключ)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
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.
Причина: Добавлено сообщение