PDA

Просмотр полной версии : Вопрос по пакетам клиента.


Rifleman
03.01.2009, 07:32
Я только недавно решил побаловаться с пакетами. Почитал несколько статей о l2phx, попробовал поиграться с пакетами на серве, где играю. Использую l2phx 3.1.8 (более новые версии не захотели работать). Заметил, что пойманые пакеты от клиента как-то странно определяются прогой. Например, пакет на соц действие определяется как Ride. Но потом заметил, что после релогина персом, тп пакетов становится совершенно другим. И тот же самый пакет на соц действие определяется как "неизвестный" (Unknown). Приведу конкретный пример пакетов на использование Healing Potion:
FB 67 EC 77 22 4A 5B 2B 00
после релогина это же действие выглядит как:
21 5E 10 85 60 15 96 95 00

Попробовал отлавливать пакеты бота (Волкер) - всё прекрасно ловится и определяется, но бот только торговый и ничего не умеет делать. Хотелось бы разобраться с клиентом.
Как я понял из мануалов, тип пакета должен быть постоянным. Хотелось бы узнать, что это такое. Или надо использовать какую другую версию пх (3.1.9 и 3.2.0 не захотели работать), или это хитрая защита сервера от читеров, или же у меня какие-то настройки неправильно стоят. Если надо что-то ещё уточнить - пишите что.

Anton5
03.01.2009, 17:56
Мне что-то подсказывает что у тебя стоит неверная версия протокола.
Под окном с пакетами есть 4 кнопочки с выбором протокола.

NLObP
03.01.2009, 23:39
Использую l2phx 3.1.8 (более новые версии не захотели работать)

Попробуй взять последнюю версию здесь (http://l2phx.pp.ru/arhive/) и в неё положи inject.dll от 3.1.8

Как я понял из мануалов, тип пакета должен быть постоянным
У тебя сервак не Грация случаем? В ней ID пакетов меняются.

Под окном с пакетами есть 4 кнопочки с выбором протокола.

Эти кнопочки появились в более поздней версии, уже после 3.2.0

Rifleman
14.01.2009, 12:28
Попробуй взять последнюю версию здесь (http://l2phx.pp.ru/arhive/) и в неё положи inject.dll от 3.1.8


У тебя сервак не Грация случаем? В ней ID пакетов меняются.



Эти кнопочки появились в более поздней версии, уже после 3.2.0

Отвечу по порядку.
Попробовал загрузить версию 3.4.1.81 и в неё скинуть inject из 3.1.8. Не дало ровным счетом ничего. Пакеты всё равно меняются при перезаходе. Пробовал выбирать разные протоколы - от с4 до камаэля - так же ничего не даёт. Пробовал включать/отключать галочки Kamael-Hellbound-Gracia и Gracia (off server) - так же результат нулевой.
Далее. Сервак не Грация, а Интерлюдия.
В связи с этим, я делаю вывод, что на серве идёт свой алгоритм шифрования. И вот тут есть подозрение, что ключ меняется каждый раз при заходе персонажем и передаётся во время захода.
Но мне немного непонятен механизм работы "торгового" бота. Пакеты от бота очень даже хорошо дешифруются. Но заходит он в режиме ограниченных функций (13:13:25 PROTECTION : Now you has logged with limit functionality) - потому невозможны таргет, принятие пати и другие штучки. Значит, сервер определяет, где заходит клиент, а где бот.
Приведу пакет от бота и от клиента "Protocol Version":
Бот:
00 EA 02 00 00 09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02 55 56 00......бла-бла-бла....
версия 746
Клиент:
00 57 04 00 00 09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02 55 56 00........бла-бла-бла.....
версия 1111
Вопрос: Вот с помощью этих пакетов определяется где клиент, а где бот? И где в клиенте прописано, по какому протоколу он будет работать? Или же нужно рассмотреть ещё и пакеты серва?

P.S. Спасибо что ответили на мою тему, а не послали "фпоиск, нуб!" =)

NLObP
14.01.2009, 22:38
Если на сервере шифрация трафика, то пакетхак без дополнительных ухищрений (писать newxor.dll) не будет работать.

Rifleman
14.01.2009, 23:32
Прямой посыл в тему "Дешифрируем траффик"?
Пробовал её читать, но там сразу же в такие дебри авторы лезут... А вот нельзя ли подсказать, где можно почитать что-нибудь по основам этого дела? Ну и хотелось бы понять сам механизм работы изначального шифрования, если я правильно понимаю, что в обычном режиме есть некоторая стандартная шифрация пакетов, которая всем известна (ну или как минимум автору данной программы) и которая стоит на сервах, где админы - лентяи.

Rifleman
16.01.2009, 01:47
Стал анализировать пакеты. Вычислил, что ключ меняется именно при заходе на аккаунт. При смене перса с этого же акка пакеты не изменились. Далее, стал смотреть, какой тип пакета не меняется при перезаходах. Обратил внимание на пакетик "Tип: 0x00 (KeyInit: )" и стал играться с ним. Обнаружил связь этого пакета с пакетом для отправки сообщения в пати чат. Я отправлял слово Hello. Изначально, пакет должен выглядеть так: 38 48 00 65 00 6C 00 6C 00 6F 00 00 00 03 00 00 00
А при пакете с "ключом" 00 58 8B 99 7B 7C B3 F8 7F 80 8A 26 B5 64 79 03 6D 3A 69 8A 8B 8C 6D 8E 8F 90
он выглядит следующим образом:
23 AA 7B 19 08 C0 7F EC 00 6F 00 00 00 03 00 00 1B
Обратил внимание, что часть пакета дополнительной шифрации не подверглась, а часть изменилась, а именно, первые 8 байт. Далее 8 байт - без шифрации, а вот следующая восьмерка (Выяснил более длинным сообщением) - снова шифруется, причем, похоже, таким же методом.
Теперь я сопоставил 8 байт из пакета KeyInit, которые заботливо были выделены в программке ;) и зашифрованные 8 байт в пакете с сообщением. Составил такую табличку:
Исходник___38 48 00 65 _ 00 6C 00 6C
Ключ_______8B 99 7B 7C _ B3 F8 7F 80
Результат___23 AA 7B 19 _ 08 C0 7F EC
Методом академика Тыка получил, что если применять операцию XOr к последним 2м байтам в каждой такой четвёрке (Выделено жирным), то как раз и получим тот пакет, что и отсылается клиентом: (например) h6C XOr h80 = hEC.
Но вот сопоставить оставшиеся 2 байта никак не могу. Причем, что интересно, я выловил 5 (на большее пока терпения не хватило) разных ключиков и соответственно 5 разных пакетов на отправку одного и того же сообщения. Из варирования сообщением и последующим сопоставлением пакетов, составил табличку "умножения" для одного ключа. Т.е. зная ключ, я мог бы зашифровать любой пакет. Эта неизвестная операция(обозначу её *, не путать с умножением) производится к соответствующим 4 битам в байте: 38*1B = 5D, 35*1B = 50...казалось, уже можно было бы написать шифрующую функцию.... НО! Результат действия ключа на зашифрованный пакет меняется от ключа к ключу. Для одного ключа результат действия 38*8B = 23, а при другом ключе 38*EB = 58. Вот тут я и застрял. Где-то есть ещё один параметр, влияющий на результат, и я его не могу найти.
Может быть, написал немного коряво, просто задачка так глубоко засела в голову, что пишу это уже в 3 часа ночи :).

girinovskiy
16.01.2009, 13:08
народ плиз помогите!хочу скопировать вещь на shock-world ,но при покупки одной и той же вещи приходят разные адреса,что я делаю не так???

QaK
16.01.2009, 13:15
girinovskiy, бан.

dmitry501
16.01.2009, 13:57
Стал анализировать пакеты. Вычислил, что ключ меняется именно при заходе на аккаунт. При смене перса с этого же акка пакеты не изменились. Далее, стал смотреть, какой тип пакета не меняется при перезаходах. Обратил внимание на пакетик "Tип: 0x00 (KeyInit: )" и стал играться с ним. Обнаружил связь этого пакета с пакетом для отправки сообщения в пати чат. Я отправлял слово Hello. Изначально, пакет должен выглядеть так: 38 48 00 65 00 6C 00 6C 00 6F 00 00 00 03 00 00 00
А при пакете с "ключом" 00 58 8B 99 7B 7C B3 F8 7F 80 8A 26 B5 64 79 03 6D 3A 69 8A 8B 8C 6D 8E 8F 90
он выглядит следующим образом:
23 AA 7B 19 08 C0 7F EC 00 6F 00 00 00 03 00 00 1B
Обратил внимание, что часть пакета дополнительной шифрации не подверглась, а часть изменилась, а именно, первые 8 байт. Далее 8 байт - без шифрации, а вот следующая восьмерка (Выяснил более длинным сообщением) - снова шифруется, причем, похоже, таким же методом.
Теперь я сопоставил 8 байт из пакета KeyInit, которые заботливо были выделены в программке ;) и зашифрованные 8 байт в пакете с сообщением. Составил такую табличку:
Исходник___38 48 00 65 _ 00 6C 00 6C
Ключ_______8B 99 7B 7C _ B3 F8 7F 80
Результат___23 AA 7B 19 _ 08 C0 7F EC
Методом академика Тыка получил, что если применять операцию XOr к последним 2м байтам в каждой такой четвёрке (Выделено жирным), то как раз и получим тот пакет, что и отсылается клиентом: (например) h6C XOr h80 = hEC.
Но вот сопоставить оставшиеся 2 байта никак не могу. Причем, что интересно, я выловил 5 (на большее пока терпения не хватило) разных ключиков и соответственно 5 разных пакетов на отправку одного и того же сообщения. Из варирования сообщением и последующим сопоставлением пакетов, составил табличку "умножения" для одного ключа. Т.е. зная ключ, я мог бы зашифровать любой пакет. Эта неизвестная операция(обозначу её *, не путать с умножением) производится к соответствующим 4 битам в байте: 38*1B = 5D, 35*1B = 50...казалось, уже можно было бы написать шифрующую функцию.... НО! Результат действия ключа на зашифрованный пакет меняется от ключа к ключу. Для одного ключа результат действия 38*8B = 23, а при другом ключе 38*EB = 58. Вот тут я и застрял. Где-то есть ещё один параметр, влияющий на результат, и я его не могу найти.
Может быть, написал немного коряво, просто задачка так глубоко засела в голову, что пишу это уже в 3 часа ночи :).

оО тебя название пакета KeyInit ничего не напоминает? И вообще ты теорию щифрации ГС читал? Ты для чего велосипед изобретаешь?

Rifleman
17.01.2009, 15:43
В том то и дело, что читал.... и процедура захода ничем не похожа на стандартную. Там Одмины такого наворотили.... Вот и приходится самому всё постигать. Но тут уже упоминался этот серв. По понятным причинам не хочу палить его.