Вернуться   D3Scene.Ru Софт портал игр | Хаки | Проги | Статьи > Онлайн MMO игры > Aion
Присоединяйся к нам

Aion Это виртуальный мир, где вы, как и тысячи других игроков, создаете своего героя и отправляетесь на поиски приключений в компании верных друзей или в составе целого легиона. Игра взявшая лучшее из WOW и L2



Ответ
 
Опции темы Опции просмотра
Старый 10.12.2009, 19:03   #1
Бан
 
Аватар для WelaskisS
 
Регистрация: 03.12.2009
Адрес: Казахстан
Сообщений: 206
Репутация: 152
Отправить сообщение для WelaskisS с помощью ICQ
Автор По умолчанию

Aion и пакеты


Общее понятие о пакетах

В этой статье речь пойдет о технических аспектах применяемых разработчиками эмулятора сетевой игры Aion, а именно, – о самом процессе ловли и распознавании пакетов. Так что же такое пакет? – спросите Вы. Пакет условно можно представить в виде набора каких-либо данных относящихся к определенной группе. Для примера, представим, что Вы перешли своим персонажем с первого уровня на второй. При этом, чтобы отобразить на Вашем экране такие характеристики, как – Ваш новый уровень, заработанный опыт, обновленные увеличенные значения полосы жизни (HP) и маны (MP), обновленные статы и друге параметры, – серверу нужно послать на Ваш игровой клиент общий пакет, который и будет содержать всю совокупность необходимых параметров. Этот пакет, к примеру, можно назвать как CharUpdate, так как он содержит информацию об обновлении характеристик игрового персонажа при переходе с одного уровня на другой, а также, возможно, и в других случаях. Заметьте, что параметры при смене уровня вызываются в одном пакете, но с таким же успехом они могут и вызываться по отдельности, когда возникает подобная необходимость, например, при обновлении полосы жизни (HP) в бою с кем-либо (в этом случае при каждом ударе посылается пакет, который обновляет текущее значение HP для Вашего чара и отдельный пакет, обновляющих HP моба). Таким образом мы разобрали, что каждый пакет содержит логическую связь включаемых в него параметров. Кроме того, следует упомянуть, что пакеты могут идти в двух направлениях: от сервера к клиенту и от клиента на сервер. Когда клиент пытается запросить какую либо информацию у сервера, – он отправляет клиентский пакет, на что сервер отвечает ему серверным пакетом. Иногда, на один клиентский пакет, сервер отвечает группой пакетов различного типа. А иногда бывает, что один клиентский пакет порождает поток серверных пакетов, которые прекратятся после того, как клиент даст на это команду другим отдельным пакетом.

Структура пакетов

Из чего же состоит пакет? В каждом пакете TCP/IP есть заголовок и передаваемая информация. Мы не будем разбирать здесь структуру TCP/IP, так как это Вы можете сделать самостоятельно, поискав в гугле. Мы же рассмотрим саму информацию, которые несет в себе каждый TCP/IP пакет. Что же это за информация? – А это есть ни что иное, как зашифрованный «игровой» пакет. Пакеты для логин и гейм сервера зашифрованы по разному алгоритму шифрования. Предварительно хочу Вас обрадовать, что расшифровывать и зашифровывать ничего не придется. После расшифровки структура игрового пакета выглядит следующим образом:

- Первый байт – это так называемый опкод, по которому определяется тип пакета (например, баф, апдейт персонажа, прибавка MP, использование скила и т.д.).
- Второй и третий байт – это контрольная сумма, – ее трогать и распозновать не надо
- Остальные байты несут параметры и характеристики самого пакета (в зависимости от типа пакета). Они как раз и требуют распознавания, для того чтобы знать, какие параметры или действия мы хотим отправить и какие ожидаем получить.
Инструменты, которые нам понадобятся:

1) Первым делом нужно скачать и распаковать специально разработанный снифер PacketSamurai, который и будет отлавливать и автоматически расшифровывать нам пакеты между клиентом и сервером игры Aion. Доступен он вот по этой ссылке:
[Ссылки скрыты от гостей.]

2) Затем скачайте и установите игровой клиент Aion. (...)

3) Если на компьютере не установлена Java (а именно нужен JRE), то скачать и установить его последнюю версию можно отсюда:
[Ссылки скрыты от гостей.]
Внимание! Счастливые обладатели 64-х операционных систем должны установить 32-ух битную версию JRE, в противном случае снифер у Вас просто не запустится!

4) Распакуйте архив PacketSamurai.zip в какую-нибудь папку, затем откройте эту папку и перед запуском самого снифера, установите WinPcap_4_0_2.exe который лежит в той же папке (со снифером). Чтобы запустить сам снифер, запустите файл start.bat, в результате чего у Вас отобразится два окна (консоль запуска и сама программа снифера). Если Вы закроете одно из них, то второе окно закроется автоматически, т.к. они взаимосвязаны.

Запуск игры под снифером. Интерфейс.

1) Первым делом, зарегистрируйте себе аккаунт на китайском или европейском сервере. (...) (на руоффе будем тестить прим. altry1st)

2) Откройте папку со снифером и запустите файл start.bat. В результате появится консоль и запуститься само приложение (можете свернуть их чтобы не мешались).

3) Запустите игру, создайте персонажа (если у вас его еще нет) и войдите в игровой мир. Нажмите затем ALT+TAB (чтобы свернуть окно) и перейдите в окно снифера, ко вкладке Viewer. Ниже представлен скриншот снифера, на котором с левой стороны создаются поля со списком отловленных снифером пакетов. Например, самый первый в этом списке у нас пакет от сервера с названием SM_KEY, в котором передается ключ инициализации клиенту для дальнейшего обмена пакетами. Заметьте, что вместо названия пакетов, Вы можете увидеть пустые поля. Это значит – что пакет не распознан и не прописан в файл конфигурации самого снифера. После того, как Вы распознаете какой-либо нераспознанный пакет, Вы можете самостоятельно выписать его в Ваш снифер, чтобы потом наглядно видеть его и не путать с другими еще не распознанными пакетами. Кроме поля Name, с левой стороны также присутствуют такие поля как S/C, Opcode, Time и Length. Первое поле S/C говорит нам о типе пакета: C – это пакет от клиента на сервер, а S – от сервера на клиент. Следующий параметр Opcode есть не что иное как первый байт в пакете, определяющий его тип (если Вы внимательно читали то, думаю, помните). Далее идет время, в которое данный пакет был передан (начиная с момента передачи первого пакета). Далее идет поле Length которое говорит нам о длине пакета в байтах. С правой стороны, в верхней части отображается информация о параметрах подключения и чуть ниже идет состав пакета (на белом фоне). Первый байт – это опкод, который говорит нам о типе переданного пакета. Затем идут 2 байта контрольной суммы, которые мы не учитываем, а далее следуют параметры данного пакета.

Параметры могут быть следующих типов:
Тип С: – один байт (целое число)
Тип H: – два байта (целое число)
Тип D: – четыре байта (целое число)
Тип F: – четыре байта (число с точкой)
Тип S: – строка в Unicode (1 символ занимает 2 байта)
Тип B: – набор байтов (размер может быть любым)



С первого взгляда довольно трудно разделить байты в нераспознанном пакете по их типам, т.к. мы не знаем какое значение несет тот или иной байт. Так как же узнать это? Для начала предлагаю посмотреть те пакеты, которые уже распознаны, в них наглядно отображается, какие байты за что отвечают. Затем плавно переходите к нераспознанным пакетам. Некоторые типы пакетов передаются довольно часто, к таким можно отнести: пакет передвижения игрока, нпс или моба из одной точки в другую; пакеты с информацией о том или ином нпс, в который описывается их внешний вид и т.п. параметры; пакет на «эмоцию», отправляемую перед каждым новым движением из одной точки в другую, каким-либо нпс и прочее. Чтобы понять смысл в пакетах, в некоторых случая приходится входить в игру, что то менять, смотреть как изменился тот или иной пакет, затем повторно входить, опять менять на что-то другое и т.д. Затем сравнивать полученные результаты и делать выводы о назначении тех или иных исследуемых параметров. По мере продвижения, Вы уже будите «узнавать» значения в нераспознанных пакетах и процесс пойдет более высокими темпами, главное набраться немного опыта

Немного информации по часто встречающимся значениям и параметрам в пакетах:

Координаты:
Как правило идут подряд 2-3 координаты, каждая по 4 байта. Каждая координата обычно заканчивается байтом 42, 43 или 44

Пример:
1D 65 8A 44(х) D4 83 78 44(у) 78 8E FE 42(z)
(чтобы получить значение координат, нужно воспользоваться утилитой ByteConverter)

ObjectId (уникальный номер у каждого объекта в игре):
Состоит из 4 байт, оканчивающие на байте 40 всегда.
Пример.
65 64 C5 40
(чтобы получить значение, нужно перевести его в калькуляторе).

Время:

Время в игре определяется значением, прошедшее с 1 января 1970 года в секундах. В виде пакета это выглядит примерно так:
B0 42 54 4A
Обращайте внимание на первые 2 байта, если это B0 42 – то скорее всего вы нашли время.

Строки:
Каждая буква представлена в виде 2ух байт, как правило первый байт это символ, а за ним байт – нуль.
Пример
49 00 4E 00 I.N.
4F 00 4C 00 49 00 41 00 00 00 00 00 01 00 00 00 O.L.I.A………
Здесь зашифровано слово INOLIA (обратите внимание что каждая буква это набор 2ух байт)

Цвета:
Цвет представлен в игре по системе RBG – хх хх хх.
Пример цвета в байтах: F5 E1 DC 00. Первые три байта это сам цвет и последний заканчивается нулем как правило всегда.

PlayOk2 и ObjectId
Это ключ сессии и Ид объекта (персонажа) в игре (уникальный, играет ту же роль что и npcId)
Каждый из этих параметров представлен в виде 4 байт.
ObjectId – F6 15 01 00
PlayOk2 – EC A0 07 00
Чтобы узнать текущие данные для того персонажа, за которого вы играете, посмотрите в пакет SM_CHARACTER_LIST (там они определены).

Map ID:
ИД области на который вы находитесь. Пока выявлены 2 такие
90 7F 84 0C – раса элиос, значение = 210010000
10 16 1D 0D – раса Asmodial, значение = 220010000
Если будут попадаться похожие байты, то скорее всего это оно и есть.

Пример разбора пакета с опкодом 4F (из личных записей):

Данные пакеты шлются сервером на клиент по каждому объекту в определенном радиусе.
В пакете сообщаются координаты переместившегося объекта. В ответ на это, клиент отображает это перемещение. Это подтверждает один случай = когда терялось связь с сервером, объекты в мире стали неподвижны, а чар бегал. В ответ на перемещение чара отправляются те же самые пакеты. Видимо для чара установлены теже правила что и для НПС, т.е. – при когда мы отправляем его в какую-то точку, то сервер нам посылает пакеты 4F о его перемещении. А вот какой чару при входе в мир присваевается ID, это вопрос Если его знать, то не трудно найти нужный пакет 4F для чара.
Пакеты с порядковыми ID в мире имеют тип D (4 байта), оканчивающие на 40

Пакет 4F с L = 30:
4F 5D EC A0 1E 70 40 B6 34 F7 43 41 0A 7E 44 8A O]…[Ссылки скрыты от гостей.].~D.
15 E5 42 3F E4 29 32 F9 43 07 25 7E 44 5A 60 E3 ..B?.)2.C.%~DZ`.
42 B
Параметры:
1 – D(); – ID объекта в игровом мире
2 – F(); – координата Х – 494.
3 – F(); – координата У – 1016.
4 – F(); – координата Z – 114.
5 – С(); – ориентация
6 – C(); – тип
7 – F(); – координата Х – 498.
8 – F(); – координата У – 1016.
9 – F(); – координата Z – 113.

Пакет 4F с L = 18:
4F 5D EC A0 1E 70 40 46 32 F9 43 E2 24 7E 44 2A O]…p@F2.C.$~D*
60 E3 42 0B 00 `.B..
Параметры:
1 – D(); – ID объекта в игровом мире
2 – F(); – координата Х – 498.
3 – F(); – координата У – 1016.
4 – F(); – координата Z – 113.
5 – С(); – ориентация
6 – С(); – тип

Общие рекомендации


1) Тот пакет который вы пытаетесь распознать, – снифте его больше и результат каждого дампа байтов сохраняйте в блокноте например, а потом сравнивайте, что вы изменили в игре и что изменилось в байтах.

2) Чаще переводите байты в числа через калькулятор в десятеричный вид, а затем попробуйте определить что это за число.
  Ответить с цитированием Наверх
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Powered by vBulletin
Copyright © 2017 vBulletin Solutions, Inc.
Перевод: zCarot | Дизайн: G-A | Верстка: OldEr
Текущее время: 04:55. Часовой пояс GMT +4.