чтоб не пропадало, скину сюда инфу по 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-дешифровки пакета при приеме засунут в одну функцию.