Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Опкоды, Формулы, Клиент > Копаем клиент

Важная информация

Копаем клиент Копаем клиент

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.10.2010, 21:13   #1
84ivan
Гость
 
Сообщений: n/a
По умолчанию шифрование пакетов в 3.3.2

Народ, подскажите пожалуйста как шифруются заголовки для клиента 3.3.2, я смотрел исходники мангоса и тиавпс и понял что:
Создаются SHA1-HMAC хеши ключа сессии, которые используются для шифровки и расшифровки сообщений.
Ключи для HMAC зашиты в коде программы.
Далее эти хеши служат ключами для RC4, которое собственно расшифровывает.
Никаких начальных векторов я не заметил, хз..

Я попробовал расшифровать первый зашифрованный заголовок по этой схеме, но ничего путного не вышло, что не так?
  Ответить с цитированием
Старый 04.10.2010, 21:16   #2
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

первых 2 пакета не шифруется
__________________
Konctantin вне форума   Ответить с цитированием
Старый 05.10.2010, 10:04   #3
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

84ivan
Почитай эту тему, там все разобрано по поводу как разбирать трафик вов.
Йоха вне форума   Ответить с цитированием
Старый 05.10.2010, 10:35   #4
84ivan
Гость
 
Сообщений: n/a
По умолчанию

Да я вижу что не шифруются, я про третий ворлдпакет).
Щас ещё раз почитаю)
  Ответить с цитированием
Старый 05.10.2010, 11:19   #5
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

ты про первое соединение ? или про второе ?
Йоха вне форума   Ответить с цитированием
Старый 05.10.2010, 12:04   #6
84ivan
Гость
 
Сообщений: n/a
По умолчанию

Самое первое, первые пакеты с ворлдсервера, два незашифрованных - SMSG_AUTH_CHALLENGE и CMSG_AUTH_SESSION я получил и отправил, и мне пришёл зашифрованный какой-то пакет, который мне надо расшифровать(
он выглядит вот так:
Код:
0000   4b 39 63 0b 0c 00 00 00 00 00 00 00 00 00 02 8b
0010   a6 fb 09 00 00 00 00 22 41 b0 2d 02 02 00 00 9e
0020   63 7e 1e ff ff ff ff ff ff ff ff ff ff ff ff ff
0030   ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
0040   ff ff ff
Это пакет от мангоса 3.3.2, SMSG_AUTH_RESPONSE и SMSG_ADDON_INFO в одной кучке) теоретически) но заголовки почему-то не расшифровываются у меня)

Мб у меня RC4 какой-то не такой? я пишу на C#, а в .NET убрали RC4 из сборки как устаревший, и я в инете нашёл демку, какой-то итальянец писал) немного переделал её и пользуюсь. Так она вроде работает, я пробовал на своих данных.
Подскажите какую-нибудь нормальную реализацию RC4 для .NET OpenSSL обёртка не подходит, она в обязательном порядке требует чтобы начальный вектор был, помимо ключа(

Последний раз редактировалось 84ivan; 05.10.2010 в 14:25. Причина: ошибка: пакет называется CMSG_AUTH_SESSION
  Ответить с цитированием
Старый 05.10.2010, 14:51   #7
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

к сожалению по шарпу ничего не могу подсказать
Йоха вне форума   Ответить с цитированием
Старый 05.10.2010, 17:20   #8
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

RC4 для C#
Код:
using System;
using System.Collections.Generic;

namespace Wlp
{
    public class Arc4
    {
        private readonly byte[] state;
        private byte x, y;

        public byte[] RC4Data
        {
            get
            {
                var data = new byte[0x102];
                state.CopyTo(data, 0);
                data[100] = x;
                data[101] = y;
                return data;
            }
            set
            {
                Array.Copy(value, state, 0x100);
                x = value[0x100];
                y = value[0x101];
            }
        }

        public Arc4(byte[] key)
        {
            state = new byte[256];
            x = y = 0;
            KeySetup(key);
        }

        public void Process(IList<byte> buffer, int start, int count)
        {
            InternalTransformBlock(buffer, start, count, buffer, start);
        }

        private void KeySetup(byte[] key)
        {
            byte index1 = 0;
            byte index2 = 0;

            for (var counter = 0; counter < 256; counter++)
            {
                state[counter] = (byte)counter;
            }
            x = 0;
            y = 0;
            for (var counter = 0; counter < 256; counter++)
            {
                index2 = (byte)(key[index1] + state[counter] + index2);
                // swap byte
                var tmp = state[counter];
                state[counter] = state[index2];
                state[index2] = tmp;
                index1 = (byte)((index1 + 1) % key.Length);
            }
        }

        private void InternalTransformBlock(IList<byte> inputBuffer, int inputOffset, int inputCount, IList<byte> outputBuffer, int outputOffset)
        {
            for (var counter = 0; counter < inputCount; counter++)
            {
                x = (byte)(x + 1);
                y = (byte)(state[x] + y);
                // swap byte
                var tmp = state[x];
                state[x] = state[y];
                state[y] = tmp;

                var xorIndex = (byte)(state[x] + state[y]);
                outputBuffer[outputOffset + counter] = (byte)(inputBuffer[inputOffset + counter] ^ state[xorIndex]);
            }
        }
    }
}
оригинал взят из Mono: http://www.koders.com/csharp/fidE5B1...65DE035D2.aspx
TOM_RUS вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Старый 05.10.2010, 19:10   #9
84ivan
Гость
 
Сообщений: n/a
По умолчанию

Спасибо огромное) Попробую с этим)

Еее! Зарработало!!)) Корявую реализацию RC4 я нашёл тогда)

Последний раз редактировалось 84ivan; 05.10.2010 в 21:15.
  Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбор пакетов WoW DeusModus Прочая документация 29 25.09.2014 19:58
Шифрование пакетов в 11685 Konctantin Корзина 2 27.03.2010 12:34


Текущее время: 18:20. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot