Доброго всем времени суток!
Начал было писать программку эмулирующую вход на сервер, но столкнулся с проблемой. Авторизацию на логин сервере прохожу вполне успежно, получаю ключи СессионИД и т.д. Загвозка заключается вот, в чем, не могу пройти логин на гейм сервере.
Часть кода взял из л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 при установке ключа.
Если можно немного коментов про смену ключа во время работы. Заранее благодарю.