Ru-MaNGOS

Вернуться   Ru-MaNGOS > Документация > Прочая документация

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

Прочая документация Помощь, книги, инструкции, описания

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.06.2012, 13:08   #1
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Спасибо за быстрый ответ.

Для 14333 есть функция,
Код:
protected override bool NormalCheck(uint opcode)
        {
            return (opcode & 0x2322) == 8738 && opcode != 57919 && opcode != 26159;
        }
Нахожу место, где чекается в IDA получаю
Код:
//----- (00485940) --------------------------------------------------------
char __thiscall NetClient__ProcessMessage(void *this, int a2, int a3, int a4)
{
  int v4; // ebx@1
  void *v5; // edi@1
  unsigned int v6; // esi@1
  char result; // al@2
  unsigned int v8; // eax@3
  int v9; // ecx@6

  ++dword_D36C28;
  v4 = a3;
  v5 = this;
  CDataStore__GetInt16(a3, (int)&a3);
  v6 = (unsigned __int16)a3;
  if ( (a3 & 0x2399) == 0x301 )
  {
    result = NetClient__JAMClientDispatch(v5, 0, a2, a3, v4);
  }
  else
  {
    (*(void (__thiscall **)(void *, _DWORD))(*(_DWORD *)v5 + 72))(v5, (unsigned __int16)a3);
    v8 = v6 & 1 | ((v6 & 0x1C | (((unsigned __int8)(v6 & 0xC0) | ((v6 & 0x1C00 | (v6 >> 1) & 0x6000) >> 2)) >> 1)) >> 1);
    if ( (v6 & 0x2322) == 0x2222 && v6 != 0xE23F && v6 != 0x662F && (v9 = *((_DWORD *)v5 + v8 + 344)) != 0 )
      result = ((int (__cdecl *)(_DWORD, unsigned int, int, int))(v9 - ((v6 | (v6 << 16)) ^ 0x62A3A31D)))(
                 *((_DWORD *)v5 + v8 + 2392),
                 v6,
                 a2,
                 v4);
    else
      result = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 24))(v4);
  }
  return result;
}
в v8 походу считается наш оффсет
Правильно ли, что в *((_DWORD *)v5 + v8 + 2392) будет как раз адрес обработчика?
Amaru вне форума   Ответить с цитированием
Старый 26.06.2012, 10:38   #2
Chameleon
Новичок
 
Регистрация: 04.03.2011
Сообщений: 29
Сказал(а) спасибо: 12
Поблагодарили 9 раз(а) в 7 сообщениях
Chameleon На верном пути
По умолчанию

Цитата:
Сообщение от Amaru Посмотреть сообщение
Правильно ли, что в *((_DWORD *)v5 + v8 + 2392) будет как раз адрес обработчика?
До 4.1 в v5 + v8 + 344 был адрес обработчика. Теперь там зашифрованный адрес, который восстанавливается по формуле, которую написал TOM_RUS: v9 - ((v6 | (v6 << 16)) ^ 0x62A3A31D)

Мне интересно, Amaru, что вы хотите разработать на основе этой информации? Проблема маппинга опкодов к хэндлерам уже решена полностью. Проблема маппинга опкодов между версиями решена удовлетворительно, хотя всегда есть место для улучшения.

Основная проблема для поддержки новых и будущих версию, как я вижу - это создание автоматизированного парсера структуры Jam bitstream пакетов. Чтобы в ядре порядок данных в структуре пакетов мог оставаться стабильным между версиями, а порядок сериализации этих данных для конкретной версии основывался бы на информации сгенерированной этим чудесным парсером. Имея такую штуку можно было бы думать о переходе между новыми версиями за разумное время, без траты уймы времени на ручную перестановку порядка филдов в куче JAM пакетов.
Chameleon вне форума   Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбор кода Спелов partizanes Прочая документация 7 24.01.2012 15:29
шифрование пакетов в 3.3.2 84ivan Копаем клиент 8 05.10.2010 19:10
Шифрование пакетов в 11685 Konctantin Корзина 2 27.03.2010 12:34


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


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