В данной статья я постараюсь помочь новичкам разобраться в инструментарии, необходимом для изучения пакетного уровня RF Online, а также привести соответствующие примеры. В качестве полигона выберем русский официальный сервер RF Online:
. Итак, начнем:
Необходимый инструментарий
WPF (_http://saur.x33.ru/wpf.rar)
WinHEX (_http://depositfiles.com/files/1042308)
Proxifier (_http://depositfiles.com/files/1042314) – можно использовать Miniproxer, который идет в комплекте с WPF (свежая версия: _http://saur.x33.ru/MiniProxer.rar), но лично у меня он схватывает трафик раза с 3его и крашит при этом ланчер, поэтому буду объяснять на примере Proxifier.
TCPView (_http://download.sysinternals.com/Files/TcpView.zip)
---
4in1 (_http://www.rapidshare.ru/406162 или _http://ifolder.ru/3393762) - полный боекомплект специально для тех, у кого не качается по вышеуказанным ссылкам
Подготовка и настройка
Распаковываем/устанавливаем вышеописанный инструментарий и не забываем его лечить предложенными таблетками. Для начала необходимо узнать IP адрес и порт игрового сервера. Для этого мы воспользуемся утилитой TCPView. Запускаем клиент RF Online, логинимся и выбираем сервер. Сворачиваем окно RF Online и запускаем TCPView. Сразу после запуска необходимо снять галку Options -> Resolve Addresses.
_http://img489.**************/img489/452/57544161yy0.jpg
RF_Online.bin => Remote Address: 81.176.70.167:27780. Таким образом мы выяснили IP адрес игрового сервера (81.176.70.167) и его порт (27780). Клиент и TCPView можно закрыть.
WPF представляет собой комплекс из 3 независимых модулей: патчер для L2Walker, верификационный сервер для L2Walker, а также PPC (WP Packet Converter). Соответственно, использовать мы будем только PPC. WPF PPC представляет собой SOCKS 5 прокси-сервер. Таким образом необходимо перенаправить трафик от RF_Online.bin на него (RF_Online.bin <-> WPF PPC <-> Game server). Для этого воспользуемся Proxifier'ом. Запускаем Proxifier и открываем Options -> Proxy settings -> Add . В качестве адреса указываем 127.0.0.1, а в качестве порта – 1777, протокол – SOCKS 5.
_http://img78.**************/img78/8084/16060151al8.jpg
Далее открываем Options -> Proxification Rules. Выбираем Process only the following + manually proxified, снимаем галку с Loopback и жмем Add. Rule name: RFOnline, Application: RF_Online.bin, IP Ranges: 81.176.70.167, Port range: 27780.
_http://img207.**************/img207/5686/50007909lt6.jpg
Настройка Proxifier'а закончена – его можно свернуть.
Теперь перейдем к WPF. Для начала можно остановить сервер верификации L2Walker’а: Verify Server -> Stop VS. Далее открываем вкладку Proxy P-C и включаем S5 Proxy 1 на 1777 порту, нажав на солнышко. Открываем P-C панель и жмем кнопку Добавить. Name: RFOnline.ru, Host/IP: 81.176.70.167, Port: 27780. Жмем OK.
_http://img441.**************/img441/4010/34956528hv0.jpg
_http://img472.**************/img472/8084/40572529rp1.jpg
Настройка завершена! Теперь трафик от RF_Online.bin, предназначенный для 81.176.70.167:27780, перенаправляется на WPF посредством Proxifier'а.
Непосредственное изучение пакетного уровня
Самое время запустить клиент RF Online (желательно в режиме окна). Логинимся, выбираем сервер и входим в игровой мир за своего персонажа. Сразу хочу отметить, что пакетный уровень RF Online отличается от пакетного уровня Lineage 2 прежде всего тем, что только часть пакетов передается в зашифрованном виде (причем достаточно хитро по сравнению с тем же шифрованием в Lineage 2). Таким образом, на данном этапе для большинства людей возможно изучение только незашифрованных пакетов. А те, кто владеют навыками дизассемблирования возможно преуспеют в изучении алгоритма шифрования пакетов в RF Online. Особый интерес представляют, несомненно, пакеты, которые передаются от клиента серверу. Изучать пакетный уровень мы будем на примере пакета, который передается серверу от клиента в незашифрованном виде, содержащий сообщение чата. Для начала немного опишу назначение вкладов WPF PPC: Server/Scripts – позволяет привязать к определенному серверу выполнение того или иного скрипта (до 3х штук). Links Online – отображает текущие активные соединения и информацию о них, а также позволяет отправлять произвольные пакеты (Send Raw Packet). Auto Logger – позволяет производить учет пакетов, которые передаются от клиента серверу и наоборот. ScriptTester – предназначен для отладки скриптов.
Перейдем от слов к делу! Открываем вкладку Auto Logger, выбираем соединенение RFOnline.ru и нажимаем Start log. Далее переключаемся на окно RF Online и пробуем написать что-нибудь в общий чат. Потом опять переключаемся на PPC и нажимаем Stop log.
_http://img402.**************/img402/9734/34746219dl0.jpg
Теперь вы видим, что Auto Logger отловил пакеты, переданные и полученные за время его работы, и отобразил их в левой части окна. S>C означает, что пакет был передан сервером клиенту, а C>S – наоборот. Соответсвенно, нас интересуют пакеты C>S. Ищем пакет, которому соответствует переданное нами сообщение в чат. Он будет иметь примерно следующий вид:
Код:
[6585] C>s 0ms. 12:01:21
-------------------------------------------------------------------------------
TType: undef Server: undef ParseType: 2 (auto) EnCode: undef (auto)
------- 0 1 2 3 4 5 6 7 - 8 9 A B C D E F -------------------
TType не определен(описание)
000000 23 00 02 02 1D 5B D2 F0 | E8 E0 F0 E8 E9 5D 4D 61 #....[Триарий]Ma
000010 73 74 65 72 6D 69 6E 64 | 20 3A 20 EF F0 E8 E2 E5 stermind.:.приве
000020 F2 21 00 т!.
Щелкаем по нему правой кнопкой, чтобы его скопировать в буфер обмена. Пакет представляется в виде ряда чисел в 16тиричной системе (слева). Справа представлен его символьный эквивалент в ANSI-ASCII (_http://pyldin.narod.ru/asc_tab.gif). Давайте разберем его структуру:
23 00 02 02 1D 5B D2 F0 E8 E0 F0 E8 E9 5D 4D 61 73 74 65 72 6D 69 6E 64 20 3A 20 EF F0 E8 E2 E5 F2 21 00
Первые 2 байта (
23 00) соответствуют длине пакета в 16тиричной системе – 23. С помощью обычного калькулятора Windows в инженерном режиме можно перевести это число в 10тичную систему, более понятную нам. Переводим калькулятор в режим HEX (16тиричная), вводим 23 и переводим калькулятор в режим DEC (10тичная). Получаем 35. Т.е. число 23 в 16тиричной системе счисления равно 35 в 10тичной. Теперь давайте посчитаем число байтов в пакете: их ровно 35.
Следующие 2 байта (
02 02) соответствуют типу пакета. Это пакет типа сообщение чата переданное от клиента серверу в общий чат.
Следующий байт (
1D) – это длина сообщения в 16тиричной системе. За сообщения принимается: “[Триарий]Mastermind : привет!” (ANSI-ASCII) или “
5B D2 F0 E8 E0 F0 E8 E9 5D 4D 61 73 74 65 72 6D 69 6E 64 20 3A 20 EF F0 E8 E2 E5 F2 21” (в 16тиричной системе, ASCII Hex).
Следующие 1D байт или 29 в 10тичной системе счисления соответствуют сообщению.
Ну и последний байт (
00) указывает на конец пакета. Теперь попробуем изменить этот пакет, чтобы потом его отправить и изучить поведение сервера на него, а именно убрать титул (“[Триарий]”), изменить ник на “GM”, а также изменить само сообщение. Нагляднее всего это можно сделать с помощью WinHEX'а. Создаем новый файл произвольной длины (File -> New). Окно будет разбито условно на 2 части: слева будут числа в 16тиричной системе (ASCII Hex), а справа их символьные эквиваленты (ANSI-ASCII). В буфере обмена у нас все еще должен находиться наш пакет. Ставим указатель на первый байт (00) и жмем CTRL+V. В появившемся окне выбираем ASCII Hex, при этом должен вставиться наш пакет.
_http://img74.**************/img74/3130/11wn3.jpg
Далее мы должны отредактировать сообщение по намеченной схеме. Проще всего это сделать в правой части. После того как мы отредактировали сообщение, изменилась его длина (5ый байт – 1D) и, соответственно, длина пакета (1ый байт – 23). Напоминаю, что длина нужна в 16тиричной системе. Выделяем пакет целиком (не забываем про конец пакета – 00), при этом в правом нижнем углу появиться значение длины выделенной области в 16тиричной системе (в нашем случае длины пакета – 1D). Проделываем аналогичные операции для определения длины сообщения – 17. Прописываем полученные значения в нужные места.
_http://img444.**************/img444/1672/12ig5.jpg
Снова выделяем пакет целиком и жмем CTRL+SHIFT+C (копируем в буфер обмена пакет в 16тиричной системе). Теперь самое время его отправить серверу и посмотреть его реакцию. Возвращаемся к WPF PPC, вкладка Link Online -> Send Raw Packet. Выбираем соединение – RFOnline.ru, вставляем наш пакет и жмем кнопку Серверу. Результат, как говориться, на лицо.
В принципе этот баг особой ценности не несет, скорее Just for fun, однако при различных разводах может быть очень кстати. Ради примера еще один пакет на отправку сообщения уже в чат гильдии:
33 00 02 63 FF FF FF FF 29 5B D2 F0 E8 E0 F0 E8 E9 5D 4D 61 73 74 65 72 6D 69 6E 64 20 3A 20 EF EE F7 E5 EC F3 20 ED E5 20 EE E1 F9 E0 E5 EC F1 FF 3F 00
По сути все то же самое, только изменился тип пакета (
02 63) - пакет типа сообщение чата переданное от клиента серверу в чат гильдии и появился непонятный довесок в виде 4 байт –
FF FF FF FF, который, как я понял, никакого функционала не несет, но без него переданное сообщение в чате не появляется. Очень хочется надеяться, что если вы осилили данную статью, то теперь вы вполне способны самостоятельно разобрать оставшиеся пакеты сообщений чата (группа, личные сообщения, карта и т.п.) и не только, ведь главное – это стремление. Стремитесь и у вас все обязательно получиться!
(с) Mastermind
Последняя версия статьи доступна тут: allcheats.ru