Ru-MaNGOS

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

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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.03.2014, 17:24   #1
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию QUEST_POI

Сегодня запросил с сервера список всех QUEST_POI.
Отсылал такие пакеты:
Код:
 Packet:CMSG (0x16B8) CMSG_QUEST_POI_QUERY, Data size: 7
|---------------------------------------------------------------------------|
| OFFSET |  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F |0123456789ABCDEF|
|----------------------------------------------------------|----------------|
|00000000| 00 00 04 BD 0C 00 00 -- -- -- -- -- -- -- -- -- |................|
|----------------------------------------------------------|----------------|
В ответ приходили такие пакеты:
Если данных нет, то приходит 3 байта:
Код:
 Packet:SMSG (0x0957) SMSG_QUEST_POI_QUERY_RESPONSE, Data size: 3
|---------------------------------------------------------------------------|
| OFFSET |  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F |0123456789ABCDEF|
|----------------------------------------------------------|----------------|
|00000000| 00 00 00 -- -- -- -- -- -- -- -- -- -- -- -- -- |................|
|----------------------------------------------------------|----------------|
Иначе вот так, других пакетов не нашел, надо выгрузить все и поискать, но пока лень:
Код:
 Packet:SMSG (0x0957) SMSG_QUEST_POI_QUERY_RESPONSE, Data size: 14
|---------------------------------------------------------------------------|
| OFFSET |  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F |0123456789ABCDEF|
|----------------------------------------------------------|----------------|
|00000000| 00 00 08 00 00 20 3B 0D 00 00 BD 0C 00 00 -- -- |..... ;.........|
|----------------------------------------------------------|----------------|
Нашел для них такой обработчик:
Код:
unsigned int __thiscall sub_6B760F(void *this, int a2, int a3)
{
  void *v3; // esi@1
  unsigned int v4; // eax@1
  unsigned int result; // eax@1
  int v6; // eax@3
  int v7; // edi@4
  int v8; // eax@5
  int v9; // eax@6
  int v10; // ecx@6
  int v11; // eax@7
  int v12; // [sp+14h] [bp-Ch]@1
  unsigned int v13; // [sp+18h] [bp-8h]@1
  int v14; // [sp+1Ch] [bp-4h]@2

  LOBYTE(v12) = 0;
  v3 = this;
  v4 = CDataStore__Read21Bits(v12);
  sub_6B718B((char *)v3 + 16, v4);
  result = 0;
  v13 = 0;
  if ( *((_DWORD *)v3 + 4) )
  {
    v14 = 0;
    do
    {
      LOBYTE(v12) = 0;
      v6 = CDataStore__Read22Bits(v12);
      CDataStore__StoreAndCheck22Bits_0(v6);
      ++v13;
      result = v13;
      v14 += 20;
    }
    while ( v13 < *((_DWORD *)v3 + 4) );
  }
  v7 = 0;
  v13 = 0;
  if ( *((_DWORD *)v3 + 4) )
  {
    do
    {
      v8 = *((_DWORD *)v3 + 5);
      v12 = 0;
      if ( *(_DWORD *)(v7 + v8 + 4) )
      {
        do
        {
          v14 = 0;
          CDataStore__GetInt32(&v14);
          v9 = v12;
          *(_DWORD *)(*(_DWORD *)(v7 + *((_DWORD *)v3 + 5) + 8) + 4 * v12) = v14;
          v10 = *((_DWORD *)v3 + 5);
          v12 = v9 + 1;
        }
        while ( (unsigned int)(v9 + 1) < *(_DWORD *)(v7 + v10 + 4) );
      }
      v12 = 0;
      CDataStore__GetInt32(&v12);
      v11 = *((_DWORD *)v3 + 5);
      ++v13;
      *(_DWORD *)(v7 + v11) = v12;
      result = v13;
      v7 += 20;
    }
    while ( v13 < *((_DWORD *)v3 + 4) );
  }
  return result;
}


Но вот прикол в том, что поменялось содержимое пакета.
Если раньше в пакете содержались координаты областей и т.п. то сейчас непонятно что:
Код:
QuestCount: 1
Block_0 size: 1
Unk_0_0: 3387
Quest_0 Id: 3261
Подозреваю что сами POI хранятся в другом месте а Unk_0_0: 3387 это ID записи.
Но вот что и где, не знаю.

ЗЫ. Запрашивал POI так:
Код:
#define CMSG_QUEST_POI_QUERY  0x16B8 // opcode
#define CLIENT_SERVICES_SEND2 0x8F9A
#define CDATA_STORE_V_TABLE   0x9298F0
// proto
typedef void(__stdcall *Send2)(CDataStore *pData);

void SendQuestPOIQuery(int max_entry)
{
    CDataStore packet = { (void*)(baseAddress + CDATA_STORE_V_TABLE) };

    for (int entry = 1; entry < max_entry; ++entry)
    {
        packet.Init(4 + 3 + 4);

        // write opcode
        *(DWORD*)(packet.buffer + 0) = CMSG_QUEST_POI_QUERY;

        *(BYTE*)(packet.buffer + 4) = 0;
        *(BYTE*)(packet.buffer + 5) = 0;
        *(BYTE*)(packet.buffer + 6) = 1 << 2; // 22 bits

        *(DWORD*)(packet.buffer + 7) = entry;

        printf("Send packet CMSG_QUEST_POI_QUERY, entry %i\n", entry);
        Send2(baseAddress + CLIENT_SERVICES_SEND2)(&packet);

        free(packet.buffer);
        Sleep(50);
    }
}
__________________
Konctantin вне форума   Ответить с цитированием
Старый 25.03.2014, 17:51   #2
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Цитата:
вот как запрятали они сам обработчик (ну и гады близы, так извращаются):
Это так компилятор switch оптимизирует.
LordJZ вне форума   Ответить с цитированием
Старый 25.03.2014, 19:34   #3
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Оптимизирует обучение вычитания в столбик.

Добавлено через 1 час 36 минут
Нашел QuestPOIPoints.dbc, вот часть его содержимого:
Код:
entry   X        Y    poi_id
72756, 2148,   -5252, 22280
72757, 2172,   -1169, 22281
72759, -10499, -1158, 22283
72760, -9056,  -461,  22284
72761, -8934,  -137,  22285
72762, -8797,  -259,  22286
72763, -8766,  -253,  22286
72764, -8754,  -193,  22286
72765, -8751,  -160,  22286
72766, -8750,  -115,  22286
72767, -8766,  -93,   22286
72768, -8795,  -117,  22286
72769, -8811,  -217,  22286
72770, -8809,  -234,  22286
72771, -8806,  -244,  22286
72772, -8903,  -163,  22287
Но это таблица с данными, где-то должна быть еще таблица связей.
__________________
Konctantin вне форума   Ответить с цитированием
Старый 27.03.2014, 06:28   #4
Vai Konteh
Новичок
 
Регистрация: 14.09.2013
Адрес: пос.Усть-Омчуг
Сообщений: 13
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Vai Konteh На верном пути
По умолчанию Опкоды

Здравствуйте извените что не много не по теме, подскажите пожалуйста, как найти опкоды для квестов?
И еще вопрос я пытаюсь снифить трафик через Wireshark. И увидел различие между заголовками пакетов которые снифят самодельные сниферы и между заголовками пакетов которые снифит Wireshark. Вообщем различие такое к примеру пакет CMD_AUTH_LOGON_CHELLENGE имеет заголовок В 1 байт 0х00 или CMD_AUTH_LOGON_PROF 0x01 ,а у самодельных заголовок состоит из 2 байт почему?
Vai Konteh вне форума   Ответить с цитированием
Старый 29.03.2014, 00:54   #5
acteros
Новичок
 
Регистрация: 25.06.2010
Адрес: Lipetsk
Сообщений: 21
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
acteros На верном пути
По умолчанию

Заголовки шифруются просто так ты с помощью Wireshark ты их не расшифруешь
acteros вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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



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


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