чтоб не заморачиватся с разгадкой генерации начального ключа, была мысль использовать какойнить пакет,в частном случае, известно, что 3 пакет от клиента это выбор чара 0D=CharacterSelected:d(CharSlot)  0D 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ...., после которого следовало вычислить ключ и изменить оный.
в скрипте имхо так:
if FromClient and PckCount=3 then
begin
   // key:=танцы с бубном получения ключа
  InitKeyS(key)
end;
чтоб это работало, нужно :
добавить функцию для скриптов возвращ. номер пакета PckCount.
и программе добавить новую процедуру InitKey2 котороя инициализирует все 8 байт.
	delphi Код:
	procedure TXorCoding.InitKey2(const XorKey; Interlude: Boolean = False);
const
  KeyConst: array[0..3] of Byte = ($A1,$6C,$54,$87);
  KeyIntrl: array[0..7] of Byte = ($C8,$27,$93,$01,$A1,$6C,$31,$97);
var key2:array[0..15] of Byte;
begin
  if Interlude then begin
    keyLen:=15;
    Move(XorKey,key2,8);
    Move(KeyIntrl,key2[8],8);
  end else begin
    keyLen:=7;
//    Move(XorKey,key2,4);
// тут меняю ключ 8 байт
    Move(XorKey,key2,8);
//    Move(KeyConst,key2[4],4);
  end;
  Move(key2,GKeyS,16);
  Move(key2,GKeyR,16);
end;
 
зы: еще идейка, чтоб при загрузке нерасшифрованных (сохраненных как есть) пакетов из текстового файла они проходили через процедуру расшифровки/шифровки заново, т.е. удобно подбирать(или тестировать длл невхор) алгоритм, смотря в логах что получилось, т.к. большую часть времени нет возможности запускать линейку.
зы: в общем как всегда желания не совпадают с возможностями  

зыы: в системном программирования я "не взуб ногой" больше прикладник.