Итак опишу тут основные сведения о взаимодействии клиента и гейм сервера AION (логин сервер пока трогать не будем)
Формат пакетов у AION во многом похож на Lineage II что вполне логично учитывая что обе игры создала одна компания.
Обязательная часть каждого пакета составляет 5 байт:
первые 2 байта - размер (как и в Lineage II)
далее идет 1 байт определяющий тип пакета
а вот с 4го байта начинаются отличия от линейки, в AION 4й байт определяет некую схему от которой зависит какому типу пакета будет соответствовать предыдущий (3й) байт, причем этот 4й байт похоже что постоянен для версии клеинта/сервера (но разный для входящих и исходящих пакетов)
и последний 5й байт повидимому нужен только для проверки правильности дешифровки и при правильной дешифровке всегда равен не 3му байту, тоесть если 3й равен 0x01, то 5й будет 0xFE
О шифровании напишу чуть поже...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
чтоб не пропадало, скину сюда инфу по 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 нажился 7 спасибками от:
Код xor-шифрования пакета при отправке встроен в код формирования каждого пакета (inline однако).
сурово
Цитата:
Сообщение от GoldFinch
Пакет S_KEY (id=0x48), приходящий клиенту от сервера, содержит 32-разрядное значение для формирования начального ключа DWORD keySeed; Из данных этого пакета формируются начальные ключи для шифрования и дешифровки пакетов.
48 эт помойму на корейском (или китайском) ОБТ, к сожалению в разных регионах разное значение 2го байта пакета и следовательно значение первого байта указывающего на S_KEY тоже разное...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
Смотрю, совсем не развивается раздел.
Немного не по теме, может кто уже разобрался как сделать бесконечный зум, как в ла2. Вторую неделю копаю инет, даже упоминаний нет.