Ru-MaNGOS

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

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

Опкоды, Формулы, Клиент Разбор и изучение взаимодействия клиента с сервером

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.06.2013, 16:35   #1
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию Пакеты клиент <-> сервер

Доброго времени суток, решил опять посидеть над мангосом, и глянул сразу на катаклизм. Раньше насколько я помню было простое считывание через поток данных из пакета, а сейчас вижу что то добавилось какие-то WriteGuidBytes, WriteGuidMask. Буду благодарен если кто то расскажет(может уже где то обсуждалось, но не нашёл) что это вообще такое и что за числа, например тут:
data.WriteGuidMask<0, 3, 6, 7, 2, 5, 1, 4>.

Код:
    WorldPacket data(SMSG_MOVE_KNOCK_BACK, 9 + 4 + 4 + 4 + 4 + 4 + 1 + 8);
    data.WriteGuidMask<0, 3, 6, 7, 2, 5, 1, 4>(guid);
    data.WriteGuidBytes<1>(guid);
    data << float(vsin);                                // y direction
    data << uint32(0);                                  // Sequence
    data.WriteGuidBytes<6, 7>(guid);
    data << float(horizontalSpeed);                     // Horizontal speed
    data.WriteGuidBytes<4, 5, 3>(guid);
    data << float(-verticalSpeed);                      // Z Movement speed (vertical)
    data << float(vcos);                                // x direction
    data.WriteGuidBytes<2, 0>(guid);
    SendPacket(&data);
Заранее Спасибо!
Dubstep вне форума   Ответить с цитированием
Старый 22.06.2013, 17:00   #2
Fabian
Новичок
 
Регистрация: 02.07.2010
Сообщений: 23
Сказал(а) спасибо: 2
Поблагодарили 20 раз(а) в 12 сообщениях
Fabian На верном пути
По умолчанию

the numbers are for the indexes of the guid. the guid (uint64) is splitted to a byte array (length = 8).

if the value at the specific position is > 0, then True is written to the bit stream, else false.

The same for the guidbytes, if the value at the index is true the specific byte value is written to the buffer.
Fabian вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Dubstep (13.07.2013)
Старый 22.06.2013, 17:23   #3
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

Thank you! Do not tell me how to find the indexes codes?
Dubstep вне форума   Ответить с цитированием
Старый 22.06.2013, 22:47   #4
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Клиент дизассемблить и вытаскивать, больше никак. Ну или можно в тринях смотреть и их WPP, но там не все правильно.

В клиенте что-то типа такого будет
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 1 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.

Последний раз редактировалось Amaru; 22.06.2013 в 22:53.
Amaru вне форума   Ответить с цитированием
Старый 23.06.2013, 00:55   #5
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

Спасибо, буду разбираться!

открыл этот же пакет, но как можно довести индексы до понятного вида? guid[0] и так далее.
http://paste2.org/vHNvOHFH

Ещё интересует вопрос по поиску опкода, в ида про это возможно?
_ESI = (SMSG_MOVE_KNOCK_BACK_struct *)this;

Нужно найти один пакет, номер его есть, но структура кривая...

Последний раз редактировалось NeatElves; 23.06.2013 в 11:13.
Dubstep вне форума   Ответить с цитированием
Старый 23.06.2013, 20:41   #6
Lordronn
Умный
 
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
Lordronn Скоро придёт к известности
По умолчанию

Цитата:
открыл этот же пакет, но как можно довести индексы до понятного вида? guid[0] и так далее.
Вот у тебя бит маска


а ниже уже идет чтение по битмаске
Код:
  if ( _ESI->guid[7] )

  {

    BYTE3(a2) = 0;

    CDataStore_GetInt8(v3, (int)((char *)&a2 + 3));

    _ESI->guid[7] ^= BYTE3(a2);

  }
Lordronn вне форума   Ответить с цитированием
Старый 23.06.2013, 21:19   #7
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

Где бит маска и тп я вижу

Вопрос как найти индексы, т.е. довести

*((_BYTE *)v4 + 16) = (unsigned int)v12 >> 7;
До
_ESI->guid[0] = (unsigned int)v12 >> 7;

p.s. Сори за тупые вопросы, с ида не так сильно знаком
Dubstep вне форума   Ответить с цитированием
Старый 23.06.2013, 22:20   #8
Lordronn
Умный
 
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
Lordronn Скоро придёт к известности
По умолчанию

guid[0] - вот 0 твой индекс
Lordronn вне форума   Ответить с цитированием
Старый 23.06.2013, 22:55   #9
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

Вы наверное не поняли.

Я про то что, у меня есть только
*((_BYTE *)v4 + 16) = (unsigned int)v12 >> 7; <- тут не понятно какой индекс

Вопрос со стоит как сделать так:
_ESI->guid[0] = (unsigned int)v12 >> 7; <- тут уже видно что индекс 0, но как дойти до этого(Это вариант Amaru)
Dubstep вне форума   Ответить с цитированием
Старый 24.06.2013, 10:17   #10
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

Код:
  *((_BYTE *)v4 + 16) = (unsigned int)v12 >> 7;  [0]
  *((_BYTE *)v4 + 19) = (unsigned int)v5 >> 7;   [3]
  *((_BYTE *)v4 + 22) = (unsigned int)v5 >> 7;   [6]
  *((_BYTE *)v4 + 23) = (unsigned int)v5 >> 7;   [7]
  *((_BYTE *)v4 + 18) = (unsigned int)v5 >> 7;   [2]
  *((_BYTE *)v4 + 21) = (unsigned int)v5 >> 7;   [5]
  *((_BYTE *)v4 + 17) =  (unsigned int)v5 >> 7;  [1]
  *((_BYTE *)v4 + 20) = (unsigned int)v5 >> 7;   [4]
как то так наверное
Evgeniy вне форума   Ответить с цитированием
Старый 24.06.2013, 11:56   #11
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

v4 - адрес структуры, выражение в скобках - смещение по адресу.
ида имеет редактор структур + умеет предугадывать структуры
кликаешь правой кнопкой по переменной -> Create new struct type

Цитата:
00000000 SMSG_MOVE_KNOCK_BACK_struct struc ; (sizeof=0x20)
00000000 f0 db 16 dup(?)
00000010 guid db 8 dup(?) ; string(C)
00000018 f18 db 4 dup(?)
0000001C dword1C dd ?
00000020 SMSG_MOVE_KNOCK_BACK_struct ends
структура выглядит так, но может быть обобщена на многие другие опкоды

Последний раз редактировалось Amaru; 24.06.2013 в 12:00.
Amaru вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Dubstep (24.06.2013)
Старый 24.06.2013, 14:03   #12
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

Цитата:
Сообщение от Amaru Посмотреть сообщение
v4 - адрес структуры, выражение в скобках - смещение по адресу.
ида имеет редактор структур + умеет предугадывать структуры
кликаешь правой кнопкой по переменной -> Create new struct type

структура выглядит так, но может быть обобщена на многие другие опкоды
получилось, спасибо!

Есть ещё такой вопрос: как найти sub_* с нужным опкодом?
Dubstep вне форума   Ответить с цитированием
Старый 25.06.2013, 10:29   #13
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Адреса нужно искать как написано здесь http://filebeam.com/80a86ab4f83b6f9e13a749e5646b257c, автор - Chameleon.
Amaru вне форума   Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
blackmanos (03.08.2013), Dubstep (26.06.2013), SergiK_KilleR (25.06.2013)
Старый 26.06.2013, 19:49   #14
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

Цитата:
Сообщение от Amaru Посмотреть сообщение
Адреса нужно искать как написано здесь http://filebeam.com/80a86ab4f83b6f9e13a749e5646b257c, автор - Chameleon.
Скомпилил указанную там тулзу, вписал в поле слева опкод 0x5CB4, в оффсете справа так ничего и не появилось

По вписывал разные, удалось ввести оффсет, кинул его в поиск ида, и ничего нужно не нашло, что делаю не так?
Dubstep вне форума   Ответить с цитированием
Старый 27.06.2013, 11:50   #15
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Цитата:
Сообщение от Dubstep Посмотреть сообщение
Скомпилил указанную там тулзу, вписал в поле слева опкод 0x5CB4, в оффсете справа так ничего и не появилось

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

У меня нашло - special 0x16c
Это значит, что хендлер будет в NetClient__JAMClientDispatch в свиче с кейсом 0x16C, поэтому в коде дизассемблированном коде можно искать 0x16C

Код:
   case 0x16Cu:
      sub_6ADBE0((int)&v294, this, a2, a5, a3);
      v175 = sub_6A7540(&v294);
      sub_6A23E0(&v294);
      result = v175;
      break;

Последний раз редактировалось Amaru; 27.06.2013 в 12:34.
Amaru вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Dubstep (28.06.2013)
Старый 28.06.2013, 17:46   #16
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

Цитата:
Сообщение от Amaru Посмотреть сообщение
вводи десятичное число или копипасть, при вводе с клавиатуры тулза путает байты.

У меня нашло - special 0x16c
Это значит, что хендлер будет в NetClient__JAMClientDispatch в свиче с кейсом 0x16C, поэтому в коде дизассемблированном коде можно искать 0x16C

Код:
   case 0x16Cu:
      sub_6ADBE0((int)&v294, this, a2, a5, a3);
      v175 = sub_6A7540(&v294);
      sub_6A23E0(&v294);
      result = v175;
      break;
удалось найти. Спасибо, буду пробовать что ещё найти
Dubstep вне форума   Ответить с цитированием
Старый 08.07.2013, 19:06   #17
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

Начал смотреть на CMSG опкоды, вот например тулза ничего не выдаёт по 0x0480, как быть?
Dubstep вне форума   Ответить с цитированием
Старый 09.07.2013, 10:05   #18
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Тулза работает только с SMSG опкодами, для CMSG вычислять оффсеты смысла нет
Amaru вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Dubstep (09.07.2013)
Старый 09.07.2013, 16:09   #19
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

Цитата:
Сообщение от Amaru Посмотреть сообщение
Тулза работает только с SMSG опкодами, для CMSG вычислять оффсеты смысла нет
Не подскажите как найти структура пакетов для таких опкодов?
Dubstep вне форума   Ответить с цитированием
Старый 09.07.2013, 16:26   #20
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Цитата:
Сообщение от Dubstep Посмотреть сообщение
Не подскажите как найти структура пакетов для таких опкодов?
Цитата:
Сообщение от Amaru Посмотреть сообщение
Адреса нужно искать как написано здесь http://filebeam.com/80a86ab4f83b6f9e13a749e5646b257c, автор - Chameleon.
Поиском CTRL+F по c-дампу
Будет что-то типа CDataStore__PutUInt32(xxx, 1152);
Amaru вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Dubstep (10.07.2013)
Старый 09.07.2013, 16:34   #21
Fabian
Новичок
 
Регистрация: 02.07.2010
Сообщений: 23
Сказал(а) спасибо: 2
Поблагодарили 20 раз(а) в 12 сообщениях
Fabian На верном пути
По умолчанию

and since a few patches, packet struct & opcode value are in different functions.
access by a off_xxxxxx
Fabian вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Dubstep (10.07.2013)
Старый 10.07.2013, 16:03   #22
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

Спасибо. разобрался
Dubstep вне форума   Ответить с цитированием
Старый 11.07.2013, 17:52   #23
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

Есть ещё не большой вопрос, заметил что с CMSG по особому читается, например
void WorldSession::HandleReorderCharactersOpcode(WorldP acket& recv_data)

recv_data.ReadGuidMask<1, 4, 5, 3, 0, 7, 6, 2>(guid);

Под этом надо тоже писать структуру по типу таких:
Код:
00000000 SMSG_MOVE_KNOCK_BACK_struct struc ; (sizeof=0x20)
00000000 f0 db 16 dup(?)
00000010 guid db 8 dup(?) ; string(C)
00000018 f18 db 4 dup(?)
0000001C dword1C dd ?
00000020 SMSG_MOVE_KNOCK_BACK_struct ends
?
Dubstep вне форума   Ответить с цитированием
Старый 12.07.2013, 00:17   #24
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Там ничего особенного нет, также сначала считывается маска, потом байты
Посмотри опкод попроще, например CMSG_BATTLEMASTER_JOIN
Код:
char __thiscall PH_CMSG_BATTLEMASTER_JOIN(void *this, int a2)
{
  char v2; // al@1
  void *v3; // esi@1
  char v4; // zf@1
  char v5; // zf@1
  char v6; // al@3
  char v7; // al@5
  char v8; // al@7
  char v9; // al@9
  char v10; // al@11
  char v11; // al@13
  char result; // al@15
  int v13; // [sp+8h] [bp-8h]@1
  int v14; // [sp+Ch] [bp-4h]@1

  v3 = this;
  CDataStore__PutInt32(30978);
  CDataStore__PutInt32(*((_DWORD *)v3 + 4));
  v4 = *((_BYTE *)v3 + 26) == 0;
  v13 = a2;
  LOBYTE(v14) = 2
              * (2
               * (*((_BYTE *)v3 + 20) | 2
                                      * (2
                                       * (2 * (2 * (2 * !v4 | *((_BYTE *)v3 + 24) != 0) | *((_BYTE *)v3 + 27) != 0) | *((_BYTE *)v3 + 25) != 0) | *((_BYTE *)v3 + 29) != 0)) | *((_BYTE *)v3 + 28) != 0) | *((_BYTE *)v3 + 30) != 0;
  CDataStore__PutInt8(v14);
  v5 = *((_BYTE *)v3 + 31) == 0;
  BYTE1(v14) = 1;
  LOBYTE(v14) = !v5;
  sub_66ADB0(&v13);
  v2 = *((_BYTE *)v3 + 26);
  if ( v2 )
    CDataStore__PutInt8(v2 ^ 1);
  v6 = *((_BYTE *)v3 + 30);
  if ( v6 )
    CDataStore__PutInt8(v6 ^ 1);
  v7 = *((_BYTE *)v3 + 28);
  if ( v7 )
    CDataStore__PutInt8(v7 ^ 1);
  v8 = *((_BYTE *)v3 + 27);
  if ( v8 )
    CDataStore__PutInt8(v8 ^ 1);
  v9 = *((_BYTE *)v3 + 31);
  if ( v9 )
    CDataStore__PutInt8(v9 ^ 1);
  v10 = *((_BYTE *)v3 + 24);
  if ( v10 )
    CDataStore__PutInt8(v10 ^ 1);
  v11 = *((_BYTE *)v3 + 29);
  if ( v11 )
    CDataStore__PutInt8(v11 ^ 1);
  result = *((_BYTE *)v3 + 25);
  if ( result )
    result = CDataStore__PutInt8(result ^ 1);
  return result;
}
Код:
00000000 CMSG_BATTLEMASTER_JOIN_struct struc ; (sizeof=0x20)
00000000 f0              db 16 dup(?)
00000010 instanceId      dd ?
00000014 asGroup         db ?
00000015 f15             db 3 dup(?)
00000018 guid            db 8 dup(?)             ; string(C)
00000020 CMSG_BATTLEMASTER_JOIN_struct ends
Код:
char __thiscall PH_CMSG_BATTLEMASTER_JOIN(void *this, int a2)
{
  char v2; // al@1
  CMSG_BATTLEMASTER_JOIN_struct *v3; // esi@1
  char v4; // zf@1
  char v5; // zf@1
  char v6; // al@3
  char v7; // al@5
  char v8; // al@7
  char v9; // al@9
  char v10; // al@11
  char v11; // al@13
  char result; // al@15
  int v13; // [sp+8h] [bp-8h]@1
  int v14; // [sp+Ch] [bp-4h]@1

  v3 = (CMSG_BATTLEMASTER_JOIN_struct *)this;
  CDataStore__PutInt32(30978);
  CDataStore__PutInt32(v3->instanceId);
  v4 = v3->guid[2] == 0;
  v13 = a2;
  LOBYTE(v14) = 2
              * (2
               * (v3->asGroup | 2
                              * (2 * (2 * (2 * (2 * !v4 | v3->guid[0] != 0) | v3->guid[3] != 0) | v3->guid[1] != 0) | v3->guid[5] != 0)) | v3->guid[4] != 0) | v3->guid[6] != 0;
  CDataStore__PutInt8(v14);
  v5 = v3->guid[7] == 0;
  BYTE1(v14) = 1;
  LOBYTE(v14) = !v5;
  sub_66ADB0(&v13);
  v2 = v3->guid[2];
  if ( v2 )
    CDataStore__PutInt8(v2 ^ 1);
  v6 = v3->guid[6];
  if ( v6 )
    CDataStore__PutInt8(v6 ^ 1);
  v7 = v3->guid[4];
  if ( v7 )
    CDataStore__PutInt8(v7 ^ 1);
  v8 = v3->guid[3];
  if ( v8 )
    CDataStore__PutInt8(v8 ^ 1);
  v9 = v3->guid[7];
  if ( v9 )
    CDataStore__PutInt8(v9 ^ 1);
  v10 = v3->guid[0];
  if ( v10 )
    CDataStore__PutInt8(v10 ^ 1);
  v11 = v3->guid[5];
  if ( v11 )
    CDataStore__PutInt8(v11 ^ 1);
  result = v3->guid[1];
  if ( result )
    result = CDataStore__PutInt8(result ^ 1);
  return result;
}

Последний раз редактировалось Amaru; 12.07.2013 в 00:24.
Amaru вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Dubstep (13.07.2013)
Старый 13.07.2013, 22:22   #25
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

спасибо!
Dubstep вне форума   Ответить с цитированием
Старый 08.08.2013, 08:03   #26
blackmanos
Новичок
 
Регистрация: 22.03.2010
Сообщений: 11
Сказал(а) спасибо: 19
Поблагодарили 0 раз(а) в 0 сообщениях
blackmanos На верном пути
По умолчанию

а как найти адрес обработчика для такого типа пакетов?
SMSG_MAIL_LIST_RESULT = 0x4217, //15595
для простых выводит jam и по нему ищем, а тут выводит
Converted и Offset
что с ними делать чтоб найти обработчик?
blackmanos вне форума   Ответить с цитированием
Старый 08.08.2013, 10:32   #27
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Цитата:
Сообщение от blackmanos Посмотреть сообщение
а как найти адрес обработчика для такого типа пакетов?
SMSG_MAIL_LIST_RESULT = 0x4217, //15595
для простых выводит jam и по нему ищем, а тут выводит
Converted и Offset
что с ними делать чтоб найти обработчик?
я писал инжектор, но возможно как-то проще можно сделать
Amaru вне форума   Ответить с цитированием
Старый 09.08.2013, 03:48   #28
blackmanos
Новичок
 
Регистрация: 22.03.2010
Сообщений: 11
Сказал(а) спасибо: 19
Поблагодарили 0 раз(а) в 0 сообщениях
blackmanos На верном пути
По умолчанию

похоже что можно, номер пакета встречается в коде так же как и клиентские номера пакетов.
blackmanos вне форума   Ответить с цитированием
Старый 09.08.2013, 10:11   #29
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Цитата:
Сообщение от blackmanos Посмотреть сообщение
похоже что можно, номер пакета встречается в коде так же как и клиентские номера пакетов.
Как? Если обработчики лежат в массиве и индекс является функцией от опкода
Amaru вне форума   Ответить с цитированием
Старый 09.08.2013, 10:32   #30
blackmanos
Новичок
 
Регистрация: 22.03.2010
Сообщений: 11
Сказал(а) спасибо: 19
Поблагодарили 0 раз(а) в 0 сообщениях
blackmanos На верном пути
По умолчанию

поправка небольшая, так нашел пакет
SMSG_UPDATE_OBJECT
в мопе идет рекурсия и он сам себя по номеру вызывает.
blackmanos вне форума   Ответить с цитированием
Старый 29.08.2013, 18:23   #31
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

В курсе кто нибудь что за опкод 0x1027, в тринити он идёт как CMSG_GUILD_SET_ACHIEVEMENT_TRACKING, в мангосе похоже старое название.
Dubstep вне форума   Ответить с цитированием
Старый 30.08.2013, 10:06   #32
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

в мангосе его и нет.
определенно что-то связанное с гильдейскими ачивами
Amaru вне форума   Ответить с цитированием
Старый 30.08.2013, 10:42   #33
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

Он шлётся если открыть список ачив гильдии и нажать "Следить". И вот что там может отправляться не понятно О_о
Dubstep вне форума   Ответить с цитированием
Старый 30.08.2013, 11:18   #34
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

а снифы на что?)
http://paste2.org/Nag8AVFh
очевидно, айди ачив
Amaru вне форума   Ответить с цитированием
Старый 31.08.2013, 12:04   #35
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

ага, сначала количество потом сами ачивки.
Но что с ними делать? Может какие-то чудеса происходят при нажатии "Следить", кроме появления сбоку ачивок? На оффе не играл так что не знаю...

Последний раз редактировалось Dubstep; 31.08.2013 в 12:08.
Dubstep вне форума   Ответить с цитированием
Старый 02.04.2014, 01:29   #36
SeT
Ученый
 
Аватар для SeT
 
Регистрация: 13.03.2010
Сообщений: 110
Сказал(а) спасибо: 55
Поблагодарили 23 раз(а) в 14 сообщениях
SeT На верном пути
По умолчанию

Цитата:
Сообщение от Amaru Посмотреть сообщение
вводи десятичное число или копипасть, при вводе с клавиатуры тулза путает байты.

У меня нашло - special 0x16c
Это значит, что хендлер будет в NetClient__JAMClientDispatch в свиче с кейсом 0x16C, поэтому в коде дизассемблированном коде можно искать 0x16C

Код:
   case 0x16Cu:
      sub_6ADBE0((int)&v294, this, a2, a5, a3);
      v175 = sub_6A7540(&v294);
      sub_6A23E0(&v294);
      result = v175;
      break;
Попробывал сделать такую же магию, нашел case, только он другой... где в таком случае искать обработчик для smsg (билд 16048)?

Код:
    case 0xFBu:
      sub_7BE5C0(this, a2, a5, a3);
      sub_751360(&v37);
      sub_7B6C80(&v37);
      result = 1;
      break;
SeT вне форума   Ответить с цитированием
Старый 02.04.2014, 14:56   #37
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Цитата:
Сообщение от SeT Посмотреть сообщение
Попробывал сделать такую же магию, нашел case, только он другой... где в таком случае искать обработчик для smsg (билд 16048)?

Код:
    case 0xFBu:
      sub_7BE5C0(this, a2, a5, a3);
      sub_751360(&v37);
      sub_7B6C80(&v37);
      result = 1;
      break;
Не понял, в чем проблема.
Вбиваем в OpcodeTools для 16048 опкод, получаем normal, special, либо auth
Вбиваем в поиск, получаем хендлер
Amaru вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
SeT (02.04.2014)
Старый 02.04.2014, 15:25   #38
SeT
Ученый
 
Аватар для SeT
 
Регистрация: 13.03.2010
Сообщений: 110
Сказал(а) спасибо: 55
Поблагодарили 23 раз(а) в 14 сообщениях
SeT На верном пути
По умолчанию

Цитата:
Сообщение от Amaru Посмотреть сообщение
Не понял, в чем проблема.
Вбиваем в OpcodeTools для 16048 опкод, получаем normal, special, либо auth
Вбиваем в поиск, получаем хендлер
Слона и не увидел Все нашлось, на своих местах. Спасибо.
SeT вне форума   Ответить с цитированием
Старый 28.07.2014, 08:58   #39
SeT
Ученый
 
Аватар для SeT
 
Регистрация: 13.03.2010
Сообщений: 110
Сказал(а) спасибо: 55
Поблагодарили 23 раз(а) в 14 сообщениях
SeT На верном пути
По умолчанию

Попался normal опокод - SMSG_AUCTION_BIDDER_LIST_RESULT (16135: hex - DB3, offset dec - 5148).
http://paste2.org/V75IIbKV

Дошёл до места - *(_DWORD *)(dword_11C95AC + 5148) = v6;

А вот куда дальше путь держать, не могу понять...
SeT вне форума   Ответить с цитированием
Старый 29.07.2014, 14:48   #40
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Как уже говорили, сдампить можно хендлеры нормал опкодов, написав программу.
Либо прицепить дебаггер и посмотреть, какой обработчик вызывается
Amaru вне форума   Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
пакеты от клиента к серверу acteros Опкоды, Формулы, Клиент 34 24.07.2014 09:15
Клиент и тайм зоны Amaru Опкоды, Формулы, Клиент 5 29.05.2012 18:36
Пакеты MANGOS Archon64 Корзина 3 08.01.2011 17:33
Клиент Катаклизма evilstar Флудильня 5 04.12.2010 12:58
Портативный SQL клиент selector Новичкам 10 09.07.2010 17:12


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


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