Показать сообщение отдельно
Старый 27.02.2008, 14:26   #2
Местный
 
Регистрация: 13.12.2007
Сообщений: 126
Сказал Спасибо: 10
Имеет 39 спасибок в 32 сообщенях
Zergatul
По умолчанию Все сначала...

Вообщем решыл сделать некое подобие бота для интерлюда. Из алгоритмов шыфрования я знаю только обычное ксорирование, никогда не работал с чем-то другим. При конекте к логин серверу как я понял мне пришол пакет Init длиной $AB (знач используется ревизия протокола c621). Обясните плиз что мне извлекать из него, как шыфровать следующие пакеты. И ище если можна обьясните плиз с чексумой.
Где-то было написано : в пакетах сервера авторизации, в конце добавляется контрольная сумма и дополняется нулями так, чтобы размер пакета был кратен 8-ми байтам.
Где-то здесь на форуме xkor давал пример:
Код:
procedure AddChecksum(var data:array of char; position: Word);
var
  i:Word;
begin
  for i := 0 to (position div 4)-1 do
    PCardinal(@data[position])^:=PCardinal(@data[position])^ xor PCardinal(@data[i*4])^;
end;
и написал как использовать его:
Код:
pck:=HexToString('26 00 02 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00');
AddChecksum(pck[3],Length(pck)-8-2);
В итоге результат - 26 00 '02 00 00 00' '00 00 00 00' '00 01 00 00' '00 00 00 00' '02 01 00 00' '00 00 00 00'
Тоесть процедура проходится по скроке и каким-то образом считает что-то, что вовсе не похоже на сумму :)
Здесь у меня вопрос: AddChecksum надо использовать уже после дополнения пакета нулями, или раньше ? (Вопрос возможно глупый, но с примера я так и не понял этого. Возможно pck, это уже пакет, дополненый 8 нулевыми байтами - если это так, тогда мне все понятно).
Zergatul вне форума   Ответить с цитированием