Ru-MaNGOS

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

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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.01.2011, 11:26   #1
acteros
Новичок
 
Регистрация: 25.06.2010
Адрес: Lipetsk
Сообщений: 21
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
acteros На верном пути
Вопрос

как можно узнать структуру пакета идущего от клиента к серверу?
Например:
клиент посылает при сборе лута опкод "CMSG_ITEM_QUERY_SINGLE" хотя при снифах на оффе данный опкод я не обнаружил.

через IDA нашел данный участок кода

int __thiscall sub_422380(void *this, int a2)
{
void *v3; // esi@1

v3 = this;
sub_7D1480(a2, 384);
sub_7D14E0(a2, *((_DWORD *)v3 + 6), *((_DWORD *)v3 + 7));
sub_7D1480(a2, *((_DWORD *)v3 + 5));
return sub_7D1480(a2, *((_DWORD *)v3 + 4));
}
как я понял
sub_7D1480(a2, 384);
отправка
CMSG_ITEM_QUERY_SINGLE = 0x00180
Но что отвечает за структуру пакета ?

Последний раз редактировалось NeatElves; 02.01.2011 в 12:02.
acteros вне форума   Ответить с цитированием
Старый 02.01.2011, 11:35   #2
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Сейчас, данные о предметах содержатся в клиенте.
Так же эти данные приходят в пакете 0x08C8 и 0x0828.


Вот ваша же структура, но с переименованными функциями, спасибо TOM_RUS, за базу ИДА
Код:
int __thiscall sub_422380(void *this, int a2)
{
  void *v3; // esi@1

  v3 = this;
  CDataStore__PutInt32(a2, 384); // opcode
  CDataStore__PutInt64(*((_DWORD *)v3 + 6), *((_DWORD *)v3 + 7)); // guid
  CDataStore__PutInt32(a2, *((_DWORD *)v3 + 5));
  return CDataStore__PutInt32(a2, *((_DWORD *)v3 + 4));
}
__________________

Последний раз редактировалось Konctantin; 02.01.2011 в 11:42.
Konctantin вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
acteros (02.01.2011)
Старый 02.01.2011, 12:47   #3
acteros
Новичок
 
Регистрация: 25.06.2010
Адрес: Lipetsk
Сообщений: 21
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
acteros На верном пути
По умолчанию

хм
CDataStore__PutInt64(*((_DWORD *)v3 + 6), *((_DWORD *)v3 + 7)); // guid
тут вроде раньше id вещи был

как я понял 0x0828 это ответ сервера на CMSG_ITEM_QUERY_SINGLE

PHP код:
uint64 item,
recv_data >>item;
sLog.outDetail("STORAGE:i Item Query = %u"item); 
c такой структурой севрер ругается

2011-01-02 13:34:14 ERROR: SESSION: opcode CMSG_ITEM_QUERY_SINGLE (0x0180) have unprocessed tail data (read stop at 8 from 16)
в чем подвох ?
acteros вне форума   Ответить с цитированием
Старый 02.01.2011, 13:20   #4
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

там все не так, посылается запрос, с номером предмета 6A 32 00 00
Код:
Packet C->S, CMSG_DB2_DATA2 (384, 0x0180, cond 16), 16 bytes, Flags: None
|---------------------------------------------------------------------------|
| OFFSET |  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F |0123456789ABCDEF|
|----------------------------------------------------------|----------------|
|00000000| 00 00 00 00 00 00 00 00 6A 32 00 00 C2 8E 23 50 |........j2....#P|
|----------------------------------------------------------|----------------|
и в ответ приходит:
Код:
Packet S->C, SMSG_DB2_DATA2 (2088, 0x0828, spec 5), 48 bytes, Flags: None
|---------------------------------------------------------------------------|
| OFFSET |  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F |0123456789ABCDEF|
|----------------------------------------------------------|----------------|
|00000000| 6A 32 00 00 46 63 F3 AD C2 8E 23 50 20 00 00 00 |j2..Fc....#P ...|
|00000010| 6A 32 00 00 0C 00 00 00 00 00 00 00 FF FF FF FF |j2..............|
|00000020| FF FF FF FF 35 09 00 00 00 00 00 00 00 00 00 00 |....5...........|
|----------------------------------------------------------|----------------|
а потом, после 16 байт идут данные о предмете:
Код:
Packet S->C, SMSG_DB2_DATA2 (2088, 0x0828, spec 5), 593 bytes, Flags: Trailing
|---------------------------------------------------------------------------|
| OFFSET |  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F |0123456789ABCDEF|
|----------------------------------------------------------|----------------|
|00000000| 6A 32 00 00 5C 0B 6E 41 4E E5 9B 91 41 02 00 00 |j2..\.nAN...A...|
|00000010| 6A 32 00 00 01 00 00 00 40 00 00 00 00 20 00 00 |j2......@.... ..|
|00000020| 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF |................|
|00000030| FF FF FF FF 01 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000040| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000050| 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 |................|
|00000060| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000070| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000080| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000090| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|000000A0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|000000B0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|000000C0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|000000D0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|000000E0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|000000F0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000100| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000110| 00 00 00 00 03 43 00 00 00 00 00 00 00 00 00 00 |.....C..........|
|00000120| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000130| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000140| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000150| FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
|00000160| FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000170| 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF |................|
|00000180| FF FF FF FF FF FF FF FF FF FF FF FF 04 00 00 00 |................|
|00000190| 3E 00 D0 9E D1 87 D0 B8 D1 89 D0 B5 D0 BD D0 BD |>...............|
|000001A0| D0 B0 D1 8F 20 D0 B2 D0 BE D0 B4 D0 B0 20 D0 B8 |.... ........ ..|
|000001B0| D0 B7 20 D0 9B D1 83 D0 BD D0 BD D0 BE D0 B3 D0 |.. .............|
|000001C0| BE 20 D0 BA D0 BE D0 BB D0 BE D0 B4 D1 86 D0 B0 |. ..............|
|000001D0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|000001E0| 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF |................|
|000001F0| FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000200| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000210| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000220| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000230| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000240| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000250| 00 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |................|
|----------------------------------------------------------|----------------|
__________________
Konctantin вне форума   Ответить с цитированием
Старый 02.01.2011, 23:36   #5
acteros
Новичок
 
Регистрация: 25.06.2010
Адрес: Lipetsk
Сообщений: 21
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
acteros На верном пути
По умолчанию

Структура пакета как я понял такая:
recv_data >>guid >> item >>item2;

от клиента приходят такие значения
2011-01-02 23:53:46 STORAGE:64 Item Query = 0
2011-01-02 23:53:46 STORAGE:32 Item Query = 1344507586
2011-01-02 23:53:46 STORAGE:i32 Item Query = 16777240

как из них можно вычислить id предмета
acteros вне форума   Ответить с цитированием
Старый 03.01.2011, 00:00   #6
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

нет
Код:
WowGuid guid
uint entry
uint unixTime
Цитата:
как из них можно вычислить id предмета
Я же написал:
Цитата:
с номером предмета 6A 32 00 00
__________________
Konctantin вне форума   Ответить с цитированием
Старый 04.01.2011, 12:37   #7
acteros
Новичок
 
Регистрация: 25.06.2010
Адрес: Lipetsk
Сообщений: 21
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
acteros На верном пути
По умолчанию

ещё назрел такой вопрос
в каком месте происходит обработка опкода 0x0545D в клиенте
я подозреваю что это
Код:
signed int __thiscall CGPlayer_C__OnLootResponse(void *this, int a2, unsigned int a3)
Но с моей расшифровкой от сервера приходит такой пакет
Код:
|-------------------------------------------------|---------------------------------|
| 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | 0 1 2 3 4 5 6 7 8 9 A B C D E F |
|-------------------------------------------------|---------------------------------|
| 8A D7 00 0C 3C 00 30 F1 01 00 00 00 00 01 00 4C | . . . . < . 0 . . . . . . . . L |
| 51 00 00 02 00 00 00 C6 81 00 00 00 00 00 00 00 | Q . . . . . . . . . . . . . . . |
| 00 00 00 00                                     | . . . .                         |
|-------------------------------------------------|---------------------------------|
И в окне лута выводятся совершенно посторонние вещи
подскажите в каком направлении копать ?
acteros вне форума   Ответить с цитированием
Старый 04.01.2011, 17:20   #8
acteros
Новичок
 
Регистрация: 25.06.2010
Адрес: Lipetsk
Сообщений: 21
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
acteros На верном пути
Вопрос

немного разобрался
Но
вот структура пакета со стороны сервака
Код:
data << uint64(guid);
data << uint8(loot_type);
data << LootView(*loot, this, permission);
обработчик в клиенте
Код:
signed int __thiscall CGPlayer_C__OnLootResponse(void *this, int a2, unsigned int a3)
{
  int v3; // eax@1
  int v4; // ecx@1
  unsigned int v5; // edi@1
  void *v6; // esi@1
  char v7; // zf@4
  char v8; // al@4
  signed int result; // eax@23
  void *v10; // eax@32
  void *v11; // edi@32
  int v12; // ecx@40
  int v13; // eax@40
  unsigned int v14; // ST0C_4@40
  signed int v15; // [sp-4h] [bp-34h]@18
  signed int v16; // [sp-4h] [bp-34h]@34
  int v17; // [sp+Ch] [bp-24h]@13
  int v18; // [sp+10h] [bp-20h]@13
  int v19; // [sp+14h] [bp-1Ch]@13
  int v20; // [sp+18h] [bp-18h]@13
  int v21; // [sp+1Ch] [bp-14h]@13
  int v22; // [sp+20h] [bp-10h]@13
  WGUID guid; // [sp+24h] [bp-Ch]@1
  unsigned __int8 v24; // [sp+2Fh] [bp-1h]@1

  v5 = a3;
  v6 = this;
  CDataStore__GetInt64(&guid);
  CDataStore__GetInt8(&v24);
  v3 = *((_DWORD *)v6 + 2216);
  v4 = *((_DWORD *)v6 + 2217);
  if ( *((_QWORD *)v6 + 1108) && v3 == guid.low && v4 == guid.high )
  {
    v8 = v24;
  }
  else
  {
    v7 = (v4 | v3) == 0;
    v8 = v24;
    if ( !v7 || v24 != 2 && v24 != 3 && v24 != 4 && v24 != 6 && v24 != 7 && v24 != 8 && v24 != 9 )
    {
      if ( v24 )
      {
        v17 = (int)off_AAECB8;
        v18 = 0;
        v19 = 0;
        v20 = 0;
        v21 = 0;
        CDataStore__PutInt32(38015);
        CDataStore__PutInt64(guid.low, guid.high);
        v22 = 0;
        ClientServices__SendPacket_0(&v17);
        v17 = (int)off_AAECB8;
        if ( v20 != -1 )
          off_AAECBC(&v17, &v18, &v19, &v20);
      }
      else
      {
        if ( *(_DWORD *)(v5 + 16) != *(_DWORD *)(v5 + 20) )
        {
          CDataStore__GetInt8((char *)&a3 + 3);
          if ( BYTE3(a3) == 15 )
            CGGameUI__DisplayError(615);
        }
      }
      *((_DWORD *)v6 + 2216) = 0;
      *((_DWORD *)v6 + 2217) = 0;
      CGUnit_C__sub_5E0720(0, -1);
      sub_6023C0(0);
      CGGameUI__UnlockItem(guid);
      *(_DWORD *)(v5 + 20) = *(_DWORD *)(v5 + 16);
      return 1;
    }
  }
  if ( v8 )
  {
    v10 = ClntObjMgrGetObjectPtr(guid, TYPEMASK_OBJECT, ".\\Player_C.cpp", 12016);
    v11 = v10;
    if ( v10 )
    {
      if ( ((unsigned int)*(_WORD *)(*((_DWORD *)v10 + 2) + 8) >> 1) & 1 )
        sub_821BC0(guid);
      v12 = v24;
      v13 = guid.high;
      *((_DWORD *)v6 + 2216) = guid.low;
      v14 = a3;
      *((_DWORD *)v6 + 2217) = v13;
      sub_8A70F0(v11, v14, v12);
      if ( (unsigned int)&unk_C000FF & *(_DWORD *)(*((_DWORD *)v6 + 64) + 68) )
      {
        CloseLoot(1, 1, 0);
        return 1;
      }
    }
    else
    {
      if ( (guid.high & 0xF0000000) == 1073741824 )
        v16 = 150;
      else
        v16 = 144;
      CGGameUI__DisplayError(v16);
      v17 = (int)off_AAECB8;
      v18 = 0;
      v19 = 0;
      v20 = 0;
      v21 = 0;
      CDataStore__PutInt32(38015);
      CDataStore__PutInt64(guid.low, guid.high);
      v22 = 0;
      ClientServices__SendPacket_0(&v17);
      v17 = (int)off_AAECB8;
      if ( v20 != -1 )
      {
        off_AAECBC(&v17, &v18, &v19, &v20);
        return 1;
      }
    }
    return 1;
  }
  CDataStore__GetInt8((char *)&a3 + 3);
  switch ( BYTE3(a3) )
  {
    case 6u:
      v15 = 142;
      goto LABEL_31;
    case 4u:
      v15 = 143;
      goto LABEL_31;
    case 5u:
      v15 = 145;
      goto LABEL_31;
    case 8u:
      v15 = 146;
      goto LABEL_31;
    case 9u:
      v15 = 147;
      goto LABEL_31;
    case 0xAu:
      CGGameUI__DisplayError(456);
      return 1;
    case 0xBu:
      v15 = 501;
      goto LABEL_31;
    case 0xCu:
      CGGameUI__DisplayError(520);
      result = 1;
      break;
    case 0xDu:
      CGGameUI__DisplayError(521);
      result = 1;
      break;
    case 0xEu:
      CGGameUI__DisplayError(522);
      result = 1;
      break;
    case 0x10u:
      CGGameUI__DisplayError(461);
      result = 1;
      break;
    case 0x11u:
      CGGameUI__DisplayError(150);
      result = 1;
      break;
    default:
      v15 = 144;
LABEL_31:
      CGGameUI__DisplayError(v15);
      *((_DWORD *)v6 + 2216) = 0;
      *((_DWORD *)v6 + 2217) = 0;
      CGUnit_C__sub_5E0720(0, -1);
      sub_6023C0(0);
      CGGameUI__UnlockItem(guid);
      CGUnit_C__sub_5E0720(0, -1);
      result = 1;
      break;
  }
  return result;
}
data << uint64(guid);
data << uint8(loot_type);
понятно где обрабатываются это
Код:
  CDataStore__GetInt64(&guid);
  CDataStore__GetInt8(&v24);
а вот что отвечает за обработку
Код:
data << LootView(*loot, this, permission);
понять не могу

Последний раз редактировалось Konctantin; 04.01.2011 в 17:51.
acteros вне форума   Ответить с цитированием
Старый 04.01.2011, 17:52   #9
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

в самом низу функции, смотрите:
Код:
  CDataStore__GetInt8((char *)&a3 + 3);
  switch ( BYTE3(a3) )
  {
    case 6u:
      v15 = 142;
      goto LABEL_31;
    case 4u:
      v15 = 143;
      goto LABEL_31;
    case 5u:
      v15 = 145;
      goto LABEL_31;
    case 8u:
      v15 = 146;
      goto LABEL_31;
    case 9u:
      v15 = 147;
      goto LABEL_31;
    case 0xAu:
      CGGameUI__DisplayError(456);
      return 1;
    case 0xBu:
      v15 = 501;
      goto LABEL_31;
    case 0xCu:
      CGGameUI__DisplayError(520);
      result = 1;
      break;
    case 0xDu:
      CGGameUI__DisplayError(521);
      result = 1;
      break;
    case 0xEu:
      CGGameUI__DisplayError(522);
      result = 1;
      break;
    case 0x10u:
      CGGameUI__DisplayError(461);
      result = 1;
      break;
    case 0x11u:
      CGGameUI__DisplayError(150);
      result = 1;
      break;
    default:
      v15 = 144;
LABEL_31:
      CGGameUI__DisplayError(v15);
      *((_DWORD *)v6 + 2216) = 0;
      *((_DWORD *)v6 + 2217) = 0;
      CGUnit_C__sub_5E0720(0, -1);
      sub_6023C0(0);
      CGGameUI__UnlockItem(guid);
      CGUnit_C__sub_5E0720(0, -1);
      result = 1;
      break;
  }
__________________
Konctantin вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
acteros (05.01.2011), Lordronn (04.01.2011)
Старый 05.01.2011, 00:03   #10
Lordronn
Умный
 
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
Lordronn Скоро придёт к известности
По умолчанию

Спрошу тут, что бы не создавать новую тему.

Код:
signed int __cdecl PH_SMSG_GAMEOBJECT_SPAWN_ANIM_OBSOLETE(int a1, int a2, int a3, int a4)
{
  signed int result; // eax@2
  int v5; // [sp+4h] [bp-14h]@2
  int v6; // [sp+8h] [bp-10h]@2
  int v7; // [sp+Ch] [bp-Ch]@1
  int v8; // [sp+13h] [bp-5h]@2
  unsigned __int8 v9; // [sp+17h] [bp-1h]@4

  CDataStore__GetInt32(&v7);
  switch ( v7 )
  {
    case 2:
    case 3:
    case 4:
      CDataStore__GetWowGUID(a4, &v5);
      CDataStore__GetInt8(&v8);
      sub_89B300(v7, v5, v6, v8);
      result = 1;
      break;
    case 0:
    case 5:
    case 6:
    case 8:
      CDataStore__GetInt8(&v8);
      sub_89B770(v7, (unsigned __int8)v8);
      result = 1;
      break;
    case 7:
      CDataStore__GetInt8(&v8);
      CDataStore__GetInt8(&v9);
      if ( v7 != 7 )
        goto LABEL_7;
      sub_89B6F0((unsigned __int8)v8, v9);
      result = 1;
      break;
    case 1:
    case 9:
    case 10:
      sub_89B130(v7);
      goto LABEL_7;
    default:
LABEL_7:
      result = 1;
      break;
  }
  return result;
}
Тут получается int это тип Го, и после уже дальнейшее чтение зависит от него. Или это нечто другое?
Lordronn вне форума   Ответить с цитированием
Старый 05.01.2011, 00:13   #11
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

да, именно так
__________________
Konctantin вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Lordronn (05.01.2011)
Старый 05.01.2011, 01:34   #12
Lordronn
Умный
 
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
Lordronn Скоро придёт к известности
По умолчанию

А где закопаны HighGuidType? Не могу найти щас, но когда открывал экзешник идой, помню, что было такое, правда список быстро рос и я потерял ее

add:

Опкод фазы маски никто не находил. Я сделал квесты у воргенов с фазой. Спарсил снифф. Все опкоды длиной в 4 байта спарсил кроме 1. Думал это и есть маска фазы, но нет. Очень она большая

Код:
Server->Client: SMSG_PHASE_MASK (0xBE7E) (Offset: 1518 / 0x05EE) Length: 4 Time: 04/14/1970 00:45:00
Phase Mask: 16382
Или он теперь 12 байт? Идой не нашел

Последний раз редактировалось Lordronn; 05.01.2011 в 13:39.
Lordronn вне форума   Ответить с цитированием
Старый 05.01.2011, 21:45   #13
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Цитата:
Сообщение от Lordronn Посмотреть сообщение
Спрошу тут, что бы не создавать новую тему.

Код:
signed int __cdecl PH_SMSG_GAMEOBJECT_SPAWN_ANIM_OBSOLETE(int a1, int a2, int a3, int a4)
{
  signed int result; // eax@2
  int v5; // [sp+4h] [bp-14h]@2
  int v6; // [sp+8h] [bp-10h]@2
  int v7; // [sp+Ch] [bp-Ch]@1
  int v8; // [sp+13h] [bp-5h]@2
  unsigned __int8 v9; // [sp+17h] [bp-1h]@4

  CDataStore__GetInt32(&v7);
  switch ( v7 )
  {
    case 2:
    case 3:
    case 4:
      CDataStore__GetWowGUID(a4, &v5);
      CDataStore__GetInt8(&v8);
      sub_89B300(v7, v5, v6, v8);
      result = 1;
      break;
    case 0:
    case 5:
    case 6:
    case 8:
      CDataStore__GetInt8(&v8);
      sub_89B770(v7, (unsigned __int8)v8);
      result = 1;
      break;
    case 7:
      CDataStore__GetInt8(&v8);
      CDataStore__GetInt8(&v9);
      if ( v7 != 7 )
        goto LABEL_7;
      sub_89B6F0((unsigned __int8)v8, v9);
      result = 1;
      break;
    case 1:
    case 9:
    case 10:
      sub_89B130(v7);
      goto LABEL_7;
    default:
LABEL_7:
      result = 1;
      break;
  }
  return result;
}
Тут получается int это тип Го, и после уже дальнейшее чтение зависит от него. Или это нечто другое?
Это вообще совершенно другой опкод...
http://getmangos.com/community/topic...ket-questions/ пост №16
TOM_RUS вне форума   Ответить с цитированием
Старый 05.01.2011, 22:06   #14
Lordronn
Умный
 
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
Lordronn Скоро придёт к известности
По умолчанию

Получается опкод идет при старте енкаутера в инсте, и в нем передается гуид босса
Lordronn вне форума   Ответить с цитированием
Старый 06.01.2011, 17:37   #15
acteros
Новичок
 
Регистрация: 25.06.2010
Адрес: Lipetsk
Сообщений: 21
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
acteros На верном пути
По умолчанию

Подскажите где в клиенте обрабатывается опкод с номером 0x03C54 поиск идой не чего не дал

Последний раз редактировалось acteros; 08.01.2011 в 18:27.
acteros вне форума   Ответить с цитированием
Старый 07.01.2011, 06:59   #16
Lordronn
Умный
 
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
Lordronn Скоро придёт к известности
По умолчанию

Верно ли я понял структуру PH_SMSG_UPDATE_OBJECT

Код:
var mapID = reader.ReadInt16();
var count = reader.ReadInt32();
long sposition = reader.GetPosition();
var unk = reader.ReadByte();
if (unk != 3)
    reader.SetPosition(sposition);
else
{
    var c = reader.ReadInt32();
    for (uint i = 0; i < c; ++i)
        reader.ReadPackedGuid();
}

for (uint i = 0; i < count; ++i)
{
    var stage = reader.ReadByte(); //OBJECT_UPDATE_TYPE
        case 1:
        case 2:
          if ( sub_4963C0(a3, v6 == 2) )
            break;
          return 0;
        case 0:
          if ( sub_4953E0(v3, 0, 0, 0) )
            break;
          return 0;
        case 3:
          sub_493F60();
          break;
        default:
          break;
}
Lordronn вне форума   Ответить с цитированием
Старый 07.01.2011, 07:00   #17
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Угу.
А еще можно было посмотреть в мангосовский src/game/UpdateData.cpp, там то же самое написано. )
LordJZ вне форума   Ответить с цитированием
Старый 03.08.2012, 08:36   #18
acteros
Новичок
 
Регистрация: 25.06.2010
Адрес: Lipetsk
Сообщений: 21
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
acteros На верном пути
По умолчанию

Чтобы не плодить лишних тем спрошу тут, решил написать свой auth server, в целом вроде всё понятно, но после отправки AUTH_LOGON_PROOF, клиент просто зависает на "Проверка версии" опкод на запрос реалмов не приходит.
acteros вне форума   Ответить с цитированием
Старый 03.08.2012, 09:16   #19
Evgeniy
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 98
Сказал(а) спасибо: 12
Поблагодарили 33 раз(а) в 21 сообщениях
Evgeniy На верном пути
По умолчанию

Цитата:
Сообщение от acteros Посмотреть сообщение
Чтобы не плодить лишних тем спрошу тут, решил написать свой auth server, в целом вроде всё понятно, но после отправки AUTH_LOGON_PROOF, клиент просто зависает на "Проверка версии" опкод на запрос реалмов не приходит.
неверный м2, либо формат пакета
Evgeniy вне форума   Ответить с цитированием
Старый 03.08.2012, 09:18   #20
acteros
Новичок
 
Регистрация: 25.06.2010
Адрес: Lipetsk
Сообщений: 21
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
acteros На верном пути
По умолчанию

м2 верный, формат пакета скорее всего где-то там ошибся, тк сейчас поставил Accountflags в 0x01 что соответствует гм клиенту и пришёл запрос за реалмы...
acteros вне форума   Ответить с цитированием
Старый 04.08.2012, 23:46   #21
acteros
Новичок
 
Регистрация: 25.06.2010
Адрес: Lipetsk
Сообщений: 21
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
acteros На верном пути
По умолчанию

Подскажите где отправляются и формируются эти два пакета

Код:
9   2  Recv  
0000  00 2A                                              .*

10   42  Recv  
0000  EC 01 01 00 00 00 FC 8B D5 E9 79 1F 03 B6 39 97    ..........y...9.
0010  82 DD F8 47 EF 42 44 7E DE F0 A5 E0 20 54 E9 AD    ...G.BD~.... T..
0020  75 B7 07 3C 6C EE CB 95 F5 D4                      u..<l.....
Судя по сниффу отправляются они сразу после попытки клиента зайти в окно выбора персонажа, после выбора реалма, поиск по id пакета ничего не выдал.(

Второй как я понял "SMSG_AUTH_CHALLENGE" а вот первый, так и не нашёл где отправляется

Последний раз редактировалось NeatElves; 05.08.2012 в 10:01.
acteros вне форума   Ответить с цитированием
Старый 05.08.2012, 09:59   #22
mAdloVe
Новичок
 
Аватар для mAdloVe
 
Регистрация: 24.03.2010
Сообщений: 23
Сказал(а) спасибо: 7
Поблагодарили 5 раз(а) в 4 сообщениях
mAdloVe На верном пути
По умолчанию

Цитата:
Сообщение от acteros Посмотреть сообщение
Второй как я понял "SMSG_AUTH_CHALLENGE" а вот первый, так и не нашёл где отправляется
Где иммено не нашел? (IDA, source mangos)
mAdloVe вне форума   Ответить с цитированием
Старый 04.09.2012, 09:21   #23
acteros
Новичок
 
Регистрация: 25.06.2010
Адрес: Lipetsk
Сообщений: 21
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
acteros На верном пути
По умолчанию

Может немного глупый вопрос т.к только разбираюсь в криптографии, session key в сервере и session key который хранится в памяти клиента должны быть одинаковы, хочу написать простой sandbox для 5.0.4 вот остановился на экране создания персонажа, не могу правильно расшифровать пакеты после AuthSession
acteros вне форума   Ответить с цитированием
Старый 04.09.2012, 13:34   #24
Lordronn
Умный
 
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
Lordronn Скоро придёт к известности
По умолчанию

Конечно
Lordronn вне форума   Ответить с цитированием
Старый 04.09.2012, 15:53   #25
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Может потому что там идет бит-стриминг?
Amaru вне форума   Ответить с цитированием
Старый 23.08.2013, 13:10   #26
acteros
Новичок
 
Регистрация: 25.06.2010
Адрес: Lipetsk
Сообщений: 21
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
acteros На верном пути
По умолчанию

Начал разбираться с 5.3.0 не подскажите как найти функцию "NetClient__JAMClientDispatch", до этого всегда работал только с готовыми образами для ida от TOM_RUS.
acteros вне форума   Ответить с цитированием
Старый 30.03.2014, 18:26   #27
acteros
Новичок
 
Регистрация: 25.06.2010
Адрес: Lipetsk
Сообщений: 21
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
acteros На верном пути
По умолчанию

Возник вопрос как сейчас найти структуру CMSG

По номеру нашел

Цитата:
int __thiscall sub_686AF4(void *this, int a2) это как я понял инициализация пакета.

{
void *v3; // esi@1

v3 = this;
sub_40F110(a2, 4447); это put_int32
return (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v3 + 4))(v3, a2);
}
Опкод CMSG_SELL_ITEM = 0x115F
Версия 5.4.7 18019
acteros вне форума   Ответить с цитированием
Старый 30.03.2014, 23:47   #28
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

x-ref по 686AF4 выдаст тебе структуру
http://ru-mangos.ru/showthread.php?p=32565#post32565
Amaru вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
SeT (31.03.2014)
Старый 22.07.2014, 10:11   #29
Chipleo
Пользователь
 
Аватар для Chipleo
 
Регистрация: 05.04.2010
Сообщений: 53
Сказал(а) спасибо: 4
Поблагодарили 24 раз(а) в 15 сообщениях
Chipleo На верном пути
По умолчанию

Как узнать адрес обработки ServerToClient: SMSG_UNK_0987 (0x0987) Length: 12 (клиент 18414)?
Chipleo вне форума   Ответить с цитированием
Старый 23.07.2014, 11:16   #30
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

уже много раз об этом говорили
Amaru вне форума   Ответить с цитированием
Старый 23.07.2014, 17:14   #31
Chipleo
Пользователь
 
Аватар для Chipleo
 
Регистрация: 05.04.2010
Сообщений: 53
Сказал(а) спасибо: 4
Поблагодарили 24 раз(а) в 15 сообщениях
Chipleo На верном пути
По умолчанию

OpcodeTools даже Jam группу не показывает, по коду обработка приходит в конечную точку
Код:
            (*(void (__thiscall **)(int, int))(*(_DWORD *)v6 + 68))(v6, a3);
            v11 = v5 & 7 | ((v5 & 0x30 | (((unsigned __int8)(v5 & 0x80) | (v5 >> 1) & 0x7F00) >> 1)) >> 1);
            if ( (v5 & 0x148) == 256 && (v12 = *(_DWORD *)(v6 + 4 * v11 + 1360)) != 0 )
              result = ((int (__cdecl *)(_DWORD, unsigned int, int, int))(v12 - ((v5 | (v5 << 16)) ^ 0x62A3A31D)))(
                         *(_DWORD *)(v6 + 4 * v11 + 9552),
                         v5,
                         a2,
                         v4);
            else
              result = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 24))(v4);
как определить переход?

Последний раз редактировалось Konctantin; 23.07.2014 в 21:41.
Chipleo вне форума   Ответить с цитированием
Старый 23.07.2014, 21:57   #32
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

уже где-то выкладывали дампы адресов обработчиков.
в формате
OPcode handler
__________________
Konctantin вне форума   Ответить с цитированием
Старый 23.07.2014, 23:32   #33
SeT
Ученый
 
Аватар для SeT
 
Регистрация: 13.03.2010
Сообщений: 110
Сказал(а) спасибо: 55
Поблагодарили 23 раз(а) в 14 сообщениях
SeT На верном пути
По умолчанию

Цитата:
Сообщение от Konctantin Посмотреть сообщение
уже где-то выкладывали дампы адресов обработчиков.
в формате
OPcode handler
Если у кого то есть такое для последней версии офа, было бы круто.
SeT вне форума   Ответить с цитированием
Старый 24.07.2014, 01:14   #34
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

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

Цитата:
Сообщение от Chipleo Посмотреть сообщение
OpcodeTools даже Jam группу не показывает, по коду обработка приходит в конечную точку
Код:
            (*(void (__thiscall **)(int, int))(*(_DWORD *)v6 + 68))(v6, a3);
            v11 = v5 & 7 | ((v5 & 0x30 | (((unsigned __int8)(v5 & 0x80) | (v5 >> 1) & 0x7F00) >> 1)) >> 1);
            if ( (v5 & 0x148) == 256 && (v12 = *(_DWORD *)(v6 + 4 * v11 + 1360)) != 0 )
              result = ((int (__cdecl *)(_DWORD, unsigned int, int, int))(v12 - ((v5 | (v5 << 16)) ^ 0x62A3A31D)))(
                         *(_DWORD *)(v6 + 4 * v11 + 9552),
                         v5,
                         a2,
                         v4);
            else
              result = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 24))(v4);
как определить переход?
присоединиться дебаггером

OpcodeTools нужно обновлять под 18414
Amaru вне форума   Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пакеты MANGOS Archon64 Корзина 3 08.01.2011 17:33
вылет клиента astlan Корзина 1 28.04.2010 15:04
Ошибка клиента #134 pdx15 Флудильня 9 22.04.2010 09:04
Настройки клиента ВоВ tempura Tools 6 25.03.2010 01:44


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


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