Вернуться   CoderX :: Forums > Другие игры > Aion
Войти через OpenID

Aion Форум посвященный игре Aion

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 12.09.2009, 17:01   #1
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию Основные сведения

Итак опишу тут основные сведения о взаимодействии клиента и гейм сервера AION (логин сервер пока трогать не будем)

Формат пакетов у AION во многом похож на Lineage II что вполне логично учитывая что обе игры создала одна компания.

Обязательная часть каждого пакета составляет 5 байт:
  • первые 2 байта - размер (как и в Lineage II)
  • далее идет 1 байт определяющий тип пакета
  • а вот с 4го байта начинаются отличия от линейки, в AION 4й байт определяет некую схему от которой зависит какому типу пакета будет соответствовать предыдущий (3й) байт, причем этот 4й байт похоже что постоянен для версии клеинта/сервера (но разный для входящих и исходящих пакетов)
  • и последний 5й байт повидимому нужен только для проверки правильности дешифровки и при правильной дешифровке всегда равен не 3му байту, тоесть если 3й равен 0x01, то 5й будет 0xFE

О шифровании напишу чуть поже...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился 5 спасибками от:
Старый 12.09.2009, 17:03   #2
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

*зарезервировано для продолжения*
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 13.09.2009, 12:05   #3
Пользователь
 
Регистрация: 05.09.2008
Сообщений: 49
Сказал Спасибо: 3
Имеет 10 спасибок в 6 сообщенях
Jes пока неопределено
По умолчанию

всетаки заинтересовались!
опенсорс сервак http://aion-emu.com/
исходники http://my-svn.assembla.com/svn/aion-emu/

учим джаву

русская группа http://aionemu.ru/
тулза для отлова пакетов
старая версия http://code.assembla.com/PacketSamurai/
новая версия(больше не используется- но там есть форматы пакетов)
http://my-svn.assembla.com/svn/aion-emu/tools 498 ревижен
подбрасуйте ссылки...
Вложения
Тип файла: zip packets.zip (8.4 Кб, 177 просмотров)
__________________
я ничего не знаю!

Последний раз редактировалось Jes, 13.09.2009 в 13:08.
Jes вне форума   Ответить с цитированием
За это сообщение Jes нажился 2 спасибками от:
Старый 13.09.2009, 14:34   #4
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Jes, я эти ссылки хотел в разделе про сервак опубликовать...
кстати не знаешь почему в этих сорцах writeF на самом деле writeD?
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 17.09.2009, 23:42   #5
Пользователь
 
Регистрация: 03.11.2008
Сообщений: 60
Сказал Спасибо: 3
Имеет 107 спасибок в 21 сообщенях
GoldFinch пока неопределено
Сообщение

чтоб не пропадало, скину сюда инфу по xor-шифрованию в клиенте
Код:
[rce][aion] результаты реверсирования алгоритмов xor-шифрования клиента 1.5.*

Пакет S_KEY (id=0x48), приходящий клиенту от сервера,
содержит 32-разрядное значение для формирования начального ключа
  DWORD keySeed;
Из данных этого пакета формируются начальные ключи для шифрования и дешифровки пакетов.

Алгоритм формирования начального 64-разрядного ключа (синтаксис С):
  /* in: DWORD keySeed - 32-разрядное значение из пакета S_KEY
     out: __int64 key - 64-разрядное значение начального ключа для приема и отправки пакетов
  */
  __int64 key = ((keySeed - 0x3FF2CC87) ^ 0xCD92E451) + (0x87546CA1<<32);

Для шифрования пакета также используется дополнительный фиксированный ключ длиной 0x40 байт,
строка: nKO/WctQ0AVLbpzfBkS6NevDYT8ourG5CRlmdjyJ72aswx4EPq1UgZhFMXH?3iI9
дамп:
00:  6E 4B 4F 2F 57 63 74 51  30 41 56 4C 62 70 7A 66  nKO/WctQ0AVLbpzf
10:  42 6B 53 36 4E 65 76 44  59 54 38 6F 75 72 47 35  BkS6NevDYT8ourG5
20:  43 52 6C 6D 64 6A 79 4A  37 32 61 73 77 78 34 45  CRlmdjyJ72aswx4E
30:  50 71 31 55 67 5A 68 46  4D 58 48 3F 33 69 49 39  Pq1UgZhFMXH?3iI9

Алгоритм шифрования буфера отправляемых пакетов (синтаксис С)

    /* in: BYTE buf[] - буфер для шифрования,
           size_t len - длина буфера,
           BYTE key[8] - текущий ключ,
           BYTE auxKey[0x40] - вспомогательный ключ.
       out: зашифрованный буфер,
            новый текущий ключ
    */
    buf[0] ^= key[0];
    for ( int i = 1; i < len; ++i )
        buf[i] ^= buf[i - 1] ^ key[i & 7] ^ auxKey[i & 0x3F];
    *(__int64*)key += len;

Алгоритм расшифровки буфера принятых пакетов (синтаксис С)

    /* in: BYTE buf[] - буфер для расшифровки,
           size_t len - длина буфера,
           BYTE key[8] - текущий ключ,
           BYTE auxKey[0x40] - вспомогательный ключ.
       out: расшифрованный буфер,
            новый текущий ключ
    */
    for( int i = len; --i; )
        buf[i] ^= buf[i - 1] ^ key[i & 7] ^ auxKey[i & 0x3F];
    buf[0] ^= key[0];
    *(__int64*)key += len;
Клиент аиона нормально работает под олькой, достаточно легко дампится.
Незначительная часть функций зачем-то накрыта ВМ фемиды.

Клиент содержит большое количество текстовых строк, в том числе отладочной информации и вывода в лог.
В отличие от клиента ла2 не содержит кучи экспортируемых функций, так что имена функций надо придумывать самому.
Код xor-шифрования пакета при отправке встроен в код формирования каждого пакета (inline однако).
Код xor-дешифровки пакета при приеме засунут в одну функцию.
GoldFinch вне форума   Ответить с цитированием
За это сообщение GoldFinch нажился 7 спасибками от:
Старый 18.09.2009, 00:43   #6
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Цитата:
Сообщение от GoldFinch Посмотреть сообщение
Код xor-шифрования пакета при отправке встроен в код формирования каждого пакета (inline однако).
сурово
Цитата:
Сообщение от GoldFinch Посмотреть сообщение
Пакет S_KEY (id=0x48), приходящий клиенту от сервера, содержит 32-разрядное значение для формирования начального ключа DWORD keySeed; Из данных этого пакета формируются начальные ключи для шифрования и дешифровки пакетов.
48 эт помойму на корейском (или китайском) ОБТ, к сожалению в разных регионах разное значение 2го байта пакета и следовательно значение первого байта указывающего на S_KEY тоже разное...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 18.09.2009, 01:04   #7
Пользователь
 
Регистрация: 03.11.2008
Сообщений: 60
Сказал Спасибо: 3
Имеет 107 спасибок в 21 сообщенях
GoldFinch пока неопределено
По умолчанию

xkor, я реверсил европейский клиент
48 - id пакета - забито хардкодом в клиент

Код:
char __stdcall DispatchRecv(int a1)
{
/* ........................................................ */
  if ( dword_1833CA48 )
    return 0;
  v2 = a1;
  id = *(_BYTE *)(a1 + 12);
  if ( id <= (signed int)0xC7u )
  {
    if ( id != 0xC7 )
    {
      switch ( id )
      {
        case 0x48:
          v3 = "S_KEY";
          goto doLogPacketName;
        case 0:
          v3 = "S_VERSION_CHECK";
          goto doLogPacketName;
        case 0xD:
          v3 = "S_ENTER_WORLD_CHECK";
          goto doLogPacketName;
        case 0x17:
          v3 = "S_WAIT_LIST";
          goto doLogPacketName;
        default:
          goto processpacket;
      }
      goto processpacket;
    }
    v3 = "S_L2AUTH_LOGIN_CHECK";
    goto doLogPacketName;
  }
  v4 = id - 0xC8;
  if ( !v4 )
  {
    v3 = "S_CHARACTER_LIST";
    goto doLogPacketName;
  }
  v5 = v4 - 0x1C;
  if ( !v5 )
  {
    v3 = "S_VIRTUAL_AUTH";
    goto doLogPacketName;
  }
  if ( v5 == 27 )
  {
    v3 = "S_RECONNECT_KEY";
doLogPacketName:
    sprintf(&Dest, "[game] recv packet: %s", v3);
    (*(int (__cdecl **)(int, char *))(*(_DWORD *)g_LoggerObj + 8))(g_LoggerObj, &Dest);
  }
processpacket:
  switch ( *(_BYTE *)(v2 + 12) )
  {
    case 0:                                                     // VERSION_CHECK
      OnVersionCheck();
      dword_1833CA58 = dword_17DEA158();
      return 1;
    case 0xC7:                                                  // L2AUTH_LOGIN_CHECK
      OnL2AuthLoginCheck();
      dword_1833CA58 = dword_17DEA158();
      return 1;
    case 0xE4:                                                  // VIRTUAL_AUTH
      OnVirtualAuth();
      dword_1833CA58 = dword_17DEA158();
      return 1;
    case 0xFF:
      sub_17A76D00(
        *(_BYTE *)(*(_DWORD *)(v2 + 16) + *(_DWORD *)(v2 + 20)),
        *(_DWORD *)(*(_DWORD *)(v2 + 16) + *(_DWORD *)(v2 + 20) + 1));
      dword_1833CA58 = dword_17DEA158();
      return 1;
    case 0xC8:                                                  // CHARACTER_LIST
      OnCharacterList();
      dword_1833CA58 = dword_17DEA158();
      return 1;
    case 0xD:                                                   // ENTER_WORLD_CHECK
      OnEnterWorldChaeck();
      dword_1833CA58 = dword_17DEA158();
      return 1;
/* ........................................................ */
    case 0x48:                                                  // S_KEY packet
      OnKeyRecv((*(_DWORD *)(*(_DWORD *)(v2 + 20) + *(_DWORD *)(v2 + 16)) - 1072876679) ^ 0xCD92E451);
      dword_1833CA58 = dword_17DEA158();
      return 1;
/* ........................................................ */
GoldFinch вне форума   Ответить с цитированием
За это сообщение GoldFinch нажился 4 спасибками от:
Старый 18.09.2009, 01:16   #8
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

GoldFinch, жесть, получается они там между ЗБТ и ОБТ ручками id всех пакетов меняли...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился спасибкой от:
Старый 19.09.2009, 14:05   #9
Пользователь
 
Регистрация: 05.09.2008
Сообщений: 49
Сказал Спасибо: 3
Имеет 10 спасибок в 6 сообщенях
Jes пока неопределено
По умолчанию

Цитата:
Сообщение от xkor Посмотреть сообщение
GoldFinch, жесть, получается они там между ЗБТ и ОБТ ручками id всех пакетов меняли...
нет - это обычный enum
пересортировали энум и фсе
__________________
я ничего не знаю!
Jes вне форума   Ответить с цитированием
Старый 10.10.2009, 21:33   #10
Пользователь
 
Аватар для Be3geBJIa3
 
Регистрация: 23.01.2008
Сообщений: 93
Сказал Спасибо: 31
Имеет 65 спасибок в 23 сообщенях
Be3geBJIa3 пока неопределено
По умолчанию

Смотрю, совсем не развивается раздел.
Немного не по теме, может кто уже разобрался как сделать бесконечный зум, как в ла2. Вторую неделю копаю инет, даже упоминаний нет.
Be3geBJIa3 вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Другие игры > Aion



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

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


Часовой пояс GMT +4, время: 18:45.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!