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