Общее понятие о пакетах
В этой статье речь пойдет о технических аспектах применяемых разработчиками эмулятора сетевой игры Aion, а именно, – о самом процессе ловли и распознавании пакетов. Так что же такое пакет? – спросите Вы. Пакет условно можно представить в виде набора каких-либо данных относящихся к определенной группе. Для примера, представим, что Вы перешли своим персонажем с первого уровня на второй. При этом, чтобы отобразить на Вашем экране такие характеристики, как – Ваш новый уровень, заработанный опыт, обновленные увеличенные значения полосы жизни (HP) и маны (MP), обновленные статы и друге параметры, – серверу нужно послать на Ваш игровой клиент общий пакет, который и будет содержать всю совокупность необходимых параметров. Этот пакет, к примеру, можно назвать как CharUpdate, так как он содержит информацию об обновлении характеристик игрового персонажа при переходе с одного уровня на другой, а также, возможно, и в других случаях. Заметьте, что параметры при смене уровня вызываются в одном пакете, но с таким же успехом они могут и вызываться по отдельности, когда возникает подобная необходимость, например, при обновлении полосы жизни (HP) в бою с кем-либо (в этом случае при каждом ударе посылается пакет, который обновляет текущее значение HP для Вашего чара и отдельный пакет, обновляющих HP моба). Таким образом мы разобрали, что каждый пакет содержит логическую связь включаемых в него параметров. Кроме того, следует упомянуть, что пакеты могут идти в двух направлениях: от сервера к клиенту и от клиента на сервер. Когда клиент пытается запросить какую либо информацию у сервера, – он отправляет клиентский пакет, на что сервер отвечает ему серверным пакетом. Иногда, на один клиентский пакет, сервер отвечает группой пакетов различного типа. А иногда бывает, что один клиентский пакет порождает поток серверных пакетов, которые прекратятся после того, как клиент даст на это команду другим отдельным пакетом.
Структура пакетов
Из чего же состоит пакет? В каждом пакете TCP/IP есть заголовок и передаваемая информация. Мы не будем разбирать здесь структуру TCP/IP, так как это Вы можете сделать самостоятельно, поискав в гугле. Мы же рассмотрим саму информацию, которые несет в себе каждый TCP/IP пакет. Что же это за информация? – А это есть ни что иное, как зашифрованный «игровой» пакет. Пакеты для логин и гейм сервера зашифрованы по разному алгоритму шифрования. Предварительно хочу Вас обрадовать, что расшифровывать и зашифровывать ничего не придется. После расшифровки структура игрового пакета выглядит следующим образом:
- Первый байт – это так называемый опкод, по которому определяется тип пакета (например, баф, апдейт персонажа, прибавка MP, использование скила и т.д.).
- Второй и третий байт – это контрольная сумма, – ее трогать и распозновать не надо 
- Остальные байты несут параметры и характеристики самого пакета (в зависимости от типа пакета). Они как раз и требуют распознавания, для того чтобы знать, какие параметры или действия мы хотим отправить и какие ожидаем получить.
Инструменты, которые нам понадобятся:
1) Первым делом нужно скачать и распаковать специально разработанный снифер PacketSamurai, который и будет отлавливать и автоматически расшифровывать нам пакеты между клиентом и сервером игры Aion. Доступен он вот по этой ссылке:
http://depositfiles.com/files/20trnelj6
2) Затем скачайте и установите игровой клиент Aion. На момент написания статьи, – китайским клиентом на китайских серверах можно играть первые 5 часов каждым новым аккаунтом бесплатно, а на европейском сервере времени дают не достаточно, поэтому пока советую качать и устанавливать именно китайский клиент.
3) Если на компьютере не установлена Java (а именно нужен JRE), то скачать и установить его последнюю версию можно отсюда:
http://java.sun.com/javase/downloads/index.jsp
Внимание! Счастливые обладатели 64-х операционных систем должны установить 32-ух битную версию JRE, в противном случае снифер у Вас просто не запустится!
4) Распакуйте архив PacketSamurai.zip в какую-нибудь папку, затем откройте эту папку и перед запуском самого снифера, установите WinPcap_4_0_2.exe который лежит в той же папке (со снифером). Чтобы запустить сам снифер, запустите файл start.bat, в результате чего у Вас отобразится два окна (консоль запуска и сама программа снифера). Если Вы закроете одно из них, то второе окно закроется автоматически, т.к. они взаимосвязаны.
Запуск игры под снифером. Интерфейс.
1) Первым делом, зарегистрируйте себе аккаунт на китайском или европейском сервере. Т.к. в данной статье предпочтение отдается именно китайскому клиенту, то для регистрации аккаунта на китайском сервере Вы можете воспользоваться вот этим небольшим руководством: http://aionemu.ru/forum/index.php?showtopic=116
2) Откройте папку со снифером и запустите файл start.bat. В результате появится консоль и запуститься само приложение (можете свернуть их чтобы не мешались).
3) Запустите игру, создайте персонажа (если у вас его еще нет) и войдите в игровой мир. Нажмите затем ALT+TAB (чтобы свернуть окно) и перейдите в окно снифера, ко вкладке Viewer. Ниже представлен скриншот снифера, на котором с левой стороны создаются поля со списком отловленных снифером пакетов. Например, самый первый в этом списке у нас пакет от сервера с названием SM_KEY, в котором передается ключ инициализации клиенту для дальнейшего обмена пакетами. Заметьте, что вместо названия пакетов, Вы можете увидеть пустые поля. Это значит – что пакет не распознан и не прописан в файл конфигурации самого снифера. После того, как Вы распознаете какой-либо нераспознанный пакет, Вы можете самостоятельно выписать его в Ваш снифер, чтобы потом наглядно видеть его и не путать с другими еще не распознанными пакетами. Кроме поля Name, с левой стороны также присутствуют такие поля как S/C, Opcode, Time и Length. Первое поле S/C говорит нам о типе пакета: C – это пакет от клиента на сервер, а S – от сервера на клиент. Следующий параметр Opcode есть не что иное как первый байт в пакете, определяющий его тип (если Вы внимательно читали то, думаю, помните). Далее идет время, в которое данный пакет был передан (начиная с момента передачи первого пакета). Далее идет поле Length которое говорит нам о длине пакета в байтах. С правой стороны, в верхней части отображается информация о параметрах подключения и чуть ниже идет состав пакета (на белом фоне). Первый байт – это опкод, который говорит нам о типе переданного пакета. Затем идут 2 байта контрольной суммы, которые мы не учитываем, а далее следуют параметры данного пакета.
Read more…