Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.02;
Скачать: CL | DM;

Вниз

Протокол обмена между клиентом и сервером   Найти похожие ветки 

 
False_Delirium ©   (2005-05-20 15:13) [80]

http://uo.menatwork.com.ua/files/injection/uoinj.rar

Всё это должно делаться насколько я помню.


 
Gek1   (2005-05-20 15:16) [81]

Вот пример сжатого блока:

14:10:32 Unknown Name, Server -> Client (Compressed), len: 5
0000: 81 68 E4 FE 80

14:10:32 Unknown Name, Server -> Client (Compressed), len: 564
0000: 46 41 87 D1 AB CE 48 00 00 00 00 00 00 00 00 00 00 00 00 01
0001: A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D0 00 00 00
0002: 00 00 00 00 00 00 00 00 00 00 00 00 D0 00 00 00 00 00 00 00
0003: 00 00 00 00 00 00 00 00 D0 00 00 00 00 00 00 00 00 00 00 00
0004: 00 00 00 00 D0 5B D0 11 BE 6F 00 00 00 00 00 00 00 5E F1 7F
0005: 1B 78 7E 78 E6 F3 0C 00 00 00 00 03 40 FA 32 0F 1F 11 A0 00
0006: 00 00 00 00 00 8F E8 ED 9A D9 C8 70 79 1C 3E 40 00 00 00 00
0007: 34 8A 72 1C 1C DD 20 F1 00 00 00 00 00 00 E1 F4 76 CC D5 E6
0008: D9 C8 70 73 74 E3 07 A0 00 00 00 06 80 68 8C F1 E3 8B 85 AB
0009: C5 E0 00 00 00 00 00 67 3C 46 AC 1D 80 00 00 00 00 00 03 40
000A: EA BD 0E 0F 17 68 31 A0 00 00 00 00 00 17 2F 2E D9 AD 48 F4
000B: CD E4 00 00 00 00 00 34 A1 19 D1 C3 07 8C 6C 1E 80 00 00 00
000C: 00 00 67 3C 46 AC 1D 80 00 00 00 00 00 03 40 EE EE 81 E5 AB
000D: C6 08 00 00 00 00 00 01 9C F1 1A B0 76 00 00 00 00 00 00 0D
000E: 65 CD 58 74 87 D2 D9 C8 7D 3C 80 00 00 00 00 19 CF 11 AB 07
000F: 60 00 00 00 00 00 00 D0 E0 95 F9 76 B1 F3 0C 00 00 00 00 00
0010: 00 CE 78 8D 58 3B 00 00 00 00 00 00 06 80 62 9C 87 07 37 48
0011: 3C 40 00 00 00 00 00 38 7D 1D B3 35 79 B6 71 AB A4 6A C3 32
0012: 07 88 7C 7C 80 00 00 1A AD 72 83 C7 90 00 00 00 00 00 00 04
0013: 67 48 3C 6D 47 F1 CD 0F A7 18 DF 20 00 00 00 01 A0 79 5E 87
0014: 07 8B B4 18 D0 00 00 00 00 00 0C E7 88 D5 83 B0 00 00 00 00
0015: 00 00 68 CE CE 4D 8D 8D E9 C7 CF 98 6E 03 B5 B9 CF 3C 40 00
0016: 00 00 33 9E 23 56 0E C0 00 00 00 00 00 01 A0 97 F5 C6 C6 B5
0017: 78 00 00 00 00 00 00 0C E7 88 D5 83 B0 00 00 00 00 00 00 68
0018: AB DD 36 16 81 E5 AB 04 00 00 00 00 00 03 39 E2 35 60 EC 00
0019: 00 00 00 00 00 1A AF C3 F0 8A F2 00 00 00 00 00 00 02 3F A3
001A: B6 6B 52 3D 33 79 00 00 00 00 00 0D 71 95 F9 76 B1 F3 0C 00
001B: 00 00 00 00 00 63 43 F1 C6 FF 1E 39 2D 63 71 E2 00 00 00 00
001C: 06 80 00 D0


И после распаковки и разборки - результат:

14:10:32 Unknown Name, Server -> Client: 0xA9, len: 1380
0000: A9 05 64 01 4D 69 72 61 6C 65 78 00 00 00 00 00 00 00 00 00
0001: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0002: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0003: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0004: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0005: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0006: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0007: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0008: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0009: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000A: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000B: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000C: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000D: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000E: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000F: 00 00 00 00 11 00 59 65 77 00 00 00 00 00 00 00 00 00 00 00
0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 54 6F 77
0011: 6E 20 43 65 6E 74 65 72 00 00 00 00 00 00 00 00 00 00 00 00
0012: 00 00 00 00 00 00 00 00 01 4D 69 6E 6F 63 00 00 00 00 00 00
0013: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0014: 45 61 73 74 20 42 72 69 64 67 65 00 00 00 00 00 00 00 00 00
0015: 00 00 00 00 00 00 00 00 00 00 00 02 42 72 69 74 61 69 6E 00
0016: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0017: 00 00 00 43 61 73 74 6C 65 20 42 72 69 74 61 6E 69 61 00 00
0018: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 4D 6F 6F 6E 67
0019: 6C 6F 77 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
001A: 00 00 00 00 00 00 44 6F 63 6B 73 00 00 00 00 00 00 00 00 00
001B: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04 54 72
001C: 69 6E 73 69 63 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
001D: 00 00 00 00 00 00 00 00 00 57 65 73 74 20 47 61 74 65 00 00
001E: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
001F: 05 4D 61 67 69 6E 63 69 61 00 00 00 00 00 00 00 00 00 00 00
0020: 00 00 00 00 00 00 00 00 00 00 00 00 44 6F 63 6B 73 00 00 00
0021: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0022: 00 00 00 06 4A 68 65 6C 6F 6D 00 00 00 00 00 00 00 00 00 00
0023: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 44 6F 63 6B 73
0024: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0025: 00 00 00 00 00 00 07 53 6B 61 72 61 20 42 72 61 65 00 00 00
0026: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 44 6F
0027: 63 6B 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0028: 00 00 00 00 00 00 00 00 00 08 56 65 73 70 65 72 00 00 00 00
0029: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
002A: 00 44 6F 63 6B 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00
002B: 00 00 00 00 00 00 00 00 00 00 00 00 09 42 72 69 74 61 69 6E
002C: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
002D: 00 00 00 00 43 61 73 74 6C 65 20 42 6C 61 63 6B 74 68 6F 72
002E: 6E 65 00 00 00 00 00 00 00 00 00 00 00 00 00 0A 57 69 6E 64
002F: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0030: 00 00 00 00 00 00 00 4D 61 69 6E 20 45 6E 74 72 61 6E 63 65
0031: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0B 54
0032: 72 69 6E 73 69 63 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0033: 00 00 00 00 00 00 00 00 00 00 44 6F 63 6B 73 00 00 00 00 00
0034: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0035: 00 0C 42 75 63 63 61 6E 65 65 72 27 73 20 44 65 6E 00 00 00
0036: 00 00 00 00 00 00 00 00 00 00 00 00 00 44 6F 63 6B 73 00 00
0037: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0038: 00 00 00 00 0D 4F 63 63 6C 6F 00 00 00 00 00 00 00 00 00 00
0039: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 44 6F 63 6B
003A: 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
003B: 00 00 00 00 00 00 00 0E 4E 75 6A 68 65 6C 6D 00 00 00 00 00
003C: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 44
003D: 6F 63 6B 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
003E: 00 00 00 00 00 00 00 00 00 00 0F 43 6F 76 65 00 00 00 00 00
003F: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0040: 00 00 45 61 73 74 20 47 61 74 65 00 00 00 00 00 00 00 00 00
0041: 00 00 00 00 00 00 00 00 00 00 00 00 00 10 56 65 73 70 65 72
0042: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0043: 00 00 00 00 00 49 72 6F 6E 77 6F 6F 64 20 49 6E 6E 00 00 00
0044: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00


Как видно:
Пакет сервером сжался... ТСП протокол порезал его на 2 куска и отправил.
Я принял... проанализировал и получил готовый пакет.
(В данном случае готовый один пакет, но частенько могуть быть несколько готовых пакетов)
Поэтому в коде и фигурирует:
"Проверка N целых пакетов"


 
Gek1   (2005-05-20 15:18) [82]


> False_Delirium ©   (20.05.05 15:13) [80]

В инжекте теже проблемы, но он похоже согласился с тем, что иногда будут глюки.


 
Eraser ©   (2005-05-20 15:18) [83]

Gek1   (20.05.05 15:16) [81]
Пакет сервером сжался... ТСП протокол порезал его на 2 куска и отправил.


Да причём тут вообще TCP?
Добрый совет: купи и главное прочитай хорошую книгу по TCP/IP.


 
Gek1   (2005-05-20 15:21) [84]

А теперь вопрос:
Где может передаваться длина или стоп последовательность в [81]?

Стоит тронуть там один байтик, и результат будет нарушен и неверен.
Вот поэтому я решил, что в сжатом блоке данных информации о их длинне нету. Может у вас получится обнаружить эту информацию.


 
Digitman ©   (2005-05-20 15:24) [85]


> ТСП протокол порезал


ТСП протокол вообще ничего не "режет"


 
Gek1   (2005-05-20 15:27) [86]


> Digitman ©   (20.05.05 15:24) [85]

Пошел я внимательно еще раз читать книжку.

А что по поводу [84]?


 
Eraser ©   (2005-05-20 15:29) [87]

Gek1   (20.05.05 15:21) [84]

На первый взгляд в том листинге, который ты привёл не видно этой стоп последовательности.

Советую пообращать внимание на самые первые 2 или 4 байта сообщения. Это возможно размер блока. Тут проверять надо... у меня к сожалению на это времени нету.


 
Digitman ©   (2005-05-20 15:32) [88]


> А что по поводу [84]?


а по поводу [84] - изучать протокол за тебя никто не намерен. это твои проблемы.


 
Sha ©   (2005-05-21 21:32) [89]

> Gek1   (20.05.05 15:27) [86]
> А что по поводу [84]?

Все необходимые данные у тебя имеются.

Во-первых, надо обязательно внести исправление, указанное Digitman [9].

Во-вторых, переделай DecompressNew в boolean функцию,
возвращающую true, если ей удалось выделить и разжать
из накопленных данных команду/ответ сервера.
Ее надо немного подправить, так чтобы она разжимала
данных не больше длины команды сервера. Это легко сделать,
т.к. после получения первого разжатого байта для команды
фиксированной длины ты можешь определить ее длину
по ее типу, а для команды переменной длины, ты можешь
определить ее длину по следующим двум байтам.

Далее, если DecompressNew вернула true, ты отрабатываешь
разжатую команду сервера и повторяешь вызов DecompressNew
(с новым смещением во входном буфере) и обработку ответа сервера.

Когда DecompressNew вернет false, сдвигаешь данные в входном буфере и ждешь новых данных.

Успехов.


 
Defunct ©   (2005-05-31 01:56) [90]

всю ветку было лень читать. и тем более вникать.

Eraser ©   (20.05.05 15:18) [83]
Digitman ©   (20.05.05 15:24) [85]

TCP "режет" и "разбивает" большой кусок данных на пакеты.
Но в этом случае с вами согласен, именно в случае [81] ничего не резалось, иначе первый пакет был бы максимального объема, а второй - что осталось.

Gek1   (20.05.05 15:16) [81]
Очевидно. Сервер отправляет шапку зашифрованного сообщения коротким пакетом, а дальше данные.


 
Sha ©   (2005-05-31 15:48) [91]

> Defunct ©   (31.05.05 01:56) [90]
> Очевидно. Сервер отправляет шапку зашифрованного сообщения коротким пакетом, а дальше данные.

Ты, конечно, понимаешь, что на это полагаться нельзя.


 
Defunct ©   (2005-06-01 21:36) [92]

> Sha
Конечно, я же этот протокол не "курил". Просто по логике должно было бы быть так.


 
Gek1   (2005-06-04 13:43) [93]

Sha ©   (21.05.05 21:32) [89]
Этот метод бы подошел, если бы Сервер каждый информационный пакет данных сжимал и отправлял бы. Но сервер перед отправкой сжимает все информационные пакеты и отправляет одним целым сжатым пакетом.

Defunct ©   (31.05.05 01:56) [90]
в Случае [81] сервер собирался отправлять пакет 0xA9. Он его сжал и отправил целиком. Хотя мне до сих пор интересно почему сжатый пакет порезался на именно такие 2 кусочка.

Sha ©   (31.05.05 15:48) [91]
Шапок там не наблюдал. Та всевремя только один информационные пакеты. Причем если была бы шапка, а я пытался ее разбирать как инфорационный пакет, то это дело неработало бы и 5-ти минут.
А так это работает сутками. И иногда (замечено на плохих коннектах) мой алгоритм дает збой.

После долгих анализов обычного клиента заметил такую вешь:
Если игровым персонажем подбежать к домику, в котором много айтимов, то получается следующее:
Сервер начинает собирать всю информацию об айтимах в "пучки" пакетов. Каждый пучок, состоящий в среднем из 100-200 информативных пакетов сервер сжимает и отправляет. Но на клиентской стороне начинают происходит какието задержи в зборе пакетов. Такое ощущение что там в OnRead стоит сразу sleep(1000), а потом только читается принятый буфер и обрабатывается.
Я так решил, потому, что айтимы появлялись через некую задержку, после принятия их от сервера. Будто он с помощью sleep ждал на всякий случай еще каких то даных.


 
Sha ©   (2005-06-05 11:32) [94]

> Gek1   (04.06.05 13:43) [93]
> Этот метод бы подошел, если бы Сервер каждый информационный
> пакет данных сжимал и отправлял бы. Но сервер перед отправкой
> сжимает все информационные пакеты и отправляет одним целым
> сжатым пакетом.

Для приведенного тобой перехвата мой метод прекрасно работает.
Приведи перехваченные данные для случая, когда он, по-твоему, работать не должен.


 
Gek1   (2005-06-06 14:57) [95]

Sha ©   (05.06.05 11:32) [94]

Вот смотри пример:
Сервер хочет нам отправить 2 информационных пакета (по 2 байта):
0х3301 и 0х3300.

Так как сервер в момент отправки все пакеты соединяет, то получится так:
0х33013300

Далее Сервер сожмет эту цепочку данных алгоритмом Хаффмана и получатся такие 3 байтика:
0х4FE99A

Далее прием:
Вариант 1:
Получили 0х4FE99A. Распаковали моим способом и там получились 2 пакета: 0х3301 и 0х3300.
(Способ [89] отработает как вариант 2. см. ниже)

Вариант 2:
Данные по дороге к нам порезались и пришли первые 2 байта (0х4FE9). Но мы на клиенте еще не знаем сколько всего должно быть. Расжимаем и получаем 0х3301. Видим что информационный пакет целый и обрабатываем его. Дальше нам приходит еще один байтик: 0х9A
Расжимая его получаем 0х75. Дальше о последствиях понятно.

Если мой алгоритм дает збои только с этими редкими проблемами, то вариант [89] - не заработает никогда.

Этот пример думаю хорошо показывает какие збои могут возникнуть, когда фрагментируються сжатые данные между клиентом и сервером.
Таких вариантов очень много. Предусмотреть все - невозможно. Проблемы возникают в следствии фрагментации сжатых данных.
Кто может подсказать как с этим бороться?


 
Sha ©   (2005-06-06 15:18) [96]

> Gek1   (06.06.05 14:57) [95]
> Вот смотри пример:
> Сервер хочет нам отправить 2 информационных пакета
> (по 2 байта):
> 0х3301 и 0х3300.

> Так как сервер в момент отправки все пакеты соединяет, то
> получится так:
> 0х33013300

Ты реально ловил такие пакеты, или просто предполагаешь,
что они могут такими приходить?


 
Digitman ©   (2005-06-06 15:20) [97]


> Gek1   (06.06.05 14:57) [95]


ты никак не можешь понять, что для успешной работы Хаффман-декомпрессора нужно на принимающей стороне поиметь сначала целое дерево, сформированное Хаффман-компрессором передающей стороны !

и уж имея целое дерево можно постепенно декомпрессировать поступающие фрагменты собственно сжатых данных..


 
Sha ©   (2005-06-06 15:20) [98]

В смысле рельно может придти 0х4FE99A


 
Gek1   (2005-06-06 15:22) [99]

Это реальный лог ... я веду лог всего что отправляю и что принимаю. Причем эти 2 пакета могут ходить по отдельности и могут вместе. Я привел пример, когда они вместе.

Смотри описание этого пакета:
0x33 Packet
Last Modified on Thursday, 19-Nov-1998
Pause/Resume Client (2 bytes)
· BYTE cmd
· BYTE pause/resume (0=pause, 1=resume)


 
Gek1   (2005-06-06 15:24) [100]

Digitman ©   (06.06.05 15:20) [97]
а как проверить на целостность дерева?

Sha ©   (06.06.05 15:20) [98]
Да может прийти 3 варианта:
0х4FE9 а потом 0х9A
0х4F а потом 0хE99A
или просто 0х4FE99A


 
Digitman ©   (2005-06-06 15:46) [101]


> Gek1   (06.06.05 15:24) [100]
> а как проверить на целостность дерева?


а я почем знаю ?

протокол-то исследуешь ты, а не я ..

наеврно сам хаффман передает где-то в своем заголовке эту инфу ..

ну ты сам подумай (забудь на секунду про своего хаффмана) - можно ли, к примеру, декодировать поток принимаемых шифрованных данных, предваряемых ключем шифрования (т.е. ключ передается где-то ПЕРЕД собственно данными), если размер ключа заранее неизвестен ?

можно ли без отмычки и без лома открыть дверь, если ты получил лишь некую часть ключа и даже не знаешь как выглядит целый ключ ?


 
Gek1   (2005-06-07 21:54) [102]

Digitman ©   (06.06.05 15:46) [101]
Дерево - константа. Причем как со стороны сервера так и со стороны клиента. См. [38].


> ну ты сам подумай (забудь на секунду про своего хаффмана)
> - можно ли, к примеру, декодировать поток принимаемых шифрованных
> данных, предваряемых ключем шифрования (т.е. ключ передается
> где-то ПЕРЕД собственно данными), если размер ключа заранее
> неизвестен ?
>
> можно ли без отмычки и без лома открыть дверь, если ты получил
> лишь некую часть ключа и даже не знаешь как выглядит целый
> ключ ?

Конечно не совсем так. Отмычка как раз у нас есть (дерево хаффмана). Но мне понятно что ты имеешь виду и этот метод я как раз и пытаюсь полностью определить. И похоже уже получается.

В любом случае спасибо всем ВАМ за помошь мне.


 
Sha ©   (2005-06-08 09:33) [103]

Интересно было бы посмотреть на то, что получится.



Страницы: 1 2 3 вся ветка

Текущий архив: 2005.10.02;
Скачать: CL | DM;

Наверх




Память: 0.68 MB
Время: 0.035 c
2-1124965240
Laymer
2005-08-25 14:20
2005.10.02
Компоненты


1-1126107297
Виктор_В.С
2005-09-07 19:34
2005.10.02
Очистить String от символов конец строки


14-1126605476
Alex-ruweb
2005-09-13 13:57
2005.10.02
Важная информация для веб-мастеров и владельцев сайтов


1-1126339930
Alpine
2005-09-10 12:12
2005.10.02
Как получить доступ к окну ?


1-1126701910
Jolik
2005-09-14 16:45
2005.10.02
Как узнать дополнительные сведения о файле?