Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Опкоды, Формулы, Клиент (http://mangos.ytdb.ru/forumdisplay.php?f=9)
-   -   пакеты от клиента к серверу (http://mangos.ytdb.ru/showthread.php?t=3352)

acteros 02.01.2011 11:26

как можно узнать структуру пакета идущего от клиента к серверу?
Например:
клиент посылает при сборе лута опкод "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
Но что отвечает за структуру пакета ?

Konctantin 02.01.2011 11:35

Сейчас, данные о предметах содержатся в клиенте.
Так же эти данные приходят в пакете 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));
}


acteros 02.01.2011 12:47

хм
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)
в чем подвох ?

Konctantin 02.01.2011 13:20

там все не так, посылается запрос, с номером предмета 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 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |................|
|----------------------------------------------------------|----------------|


acteros 02.01.2011 23:36

Структура пакета как я понял такая:
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 предмета

Konctantin 03.01.2011 00:00

нет
Код:

WowGuid guid
uint entry
uint unixTime

Цитата:

как из них можно вычислить id предмета
Я же написал:
Цитата:

с номером предмета 6A 32 00 00

acteros 04.01.2011 12:37

ещё назрел такой вопрос
в каком месте происходит обработка опкода 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

немного разобрался
Но
вот структура пакета со стороны сервака
Код:

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:52

в самом низу функции, смотрите:
Код:

  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;
  }


Lordronn 05.01.2011 00:03

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

Код:

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 это тип Го, и после уже дальнейшее чтение зависит от него. Или это нечто другое?

Konctantin 05.01.2011 00:13

да, именно так

Lordronn 05.01.2011 01:34

А где закопаны 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 байт? Идой не нашел

TOM_RUS 05.01.2011 21:45

Цитата:

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

Код:

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

Lordronn 05.01.2011 22:06

Получается опкод идет при старте енкаутера в инсте, и в нем передается гуид босса

acteros 06.01.2011 17:37

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

Lordronn 07.01.2011 06:59

Верно ли я понял структуру 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;
}


LordJZ 07.01.2011 07:00

Угу.
А еще можно было посмотреть в мангосовский src/game/UpdateData.cpp, там то же самое написано. )

acteros 03.08.2012 08:36

Чтобы не плодить лишних тем спрошу тут, решил написать свой auth server, в целом вроде всё понятно, но после отправки AUTH_LOGON_PROOF, клиент просто зависает на "Проверка версии" опкод на запрос реалмов не приходит.

Evgeniy 03.08.2012 09:16

Цитата:

Сообщение от acteros (Сообщение 28456)
Чтобы не плодить лишних тем спрошу тут, решил написать свой auth server, в целом вроде всё понятно, но после отправки AUTH_LOGON_PROOF, клиент просто зависает на "Проверка версии" опкод на запрос реалмов не приходит.

неверный м2, либо формат пакета

acteros 03.08.2012 09:18

м2 верный, формат пакета скорее всего где-то там ошибся, тк сейчас поставил Accountflags в 0x01 что соответствует гм клиенту и пришёл запрос за реалмы...

acteros 04.08.2012 23:46

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

Код:

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" а вот первый, так и не нашёл где отправляется

mAdloVe 05.08.2012 09:59

Цитата:

Сообщение от acteros (Сообщение 28490)
Второй как я понял "SMSG_AUTH_CHALLENGE" а вот первый, так и не нашёл где отправляется

Где иммено не нашел? (IDA, source mangos)

acteros 04.09.2012 09:21

Может немного глупый вопрос т.к только разбираюсь в криптографии, session key в сервере и session key который хранится в памяти клиента должны быть одинаковы, хочу написать простой sandbox для 5.0.4 вот остановился на экране создания персонажа, не могу правильно расшифровать пакеты после AuthSession

Lordronn 04.09.2012 13:34

Конечно

Amaru 04.09.2012 15:53

Может потому что там идет бит-стриминг?

acteros 23.08.2013 13:10

Начал разбираться с 5.3.0 не подскажите как найти функцию "NetClient__JAMClientDispatch", до этого всегда работал только с готовыми образами для ida от TOM_RUS.

acteros 30.03.2014 18:26

Возник вопрос как сейчас найти структуру 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

Amaru 30.03.2014 23:47

x-ref по 686AF4 выдаст тебе структуру
http://ru-mangos.ru/showthread.php?p=32565#post32565

Chipleo 22.07.2014 10:11

Как узнать адрес обработки ServerToClient: SMSG_UNK_0987 (0x0987) Length: 12 (клиент 18414)?

Amaru 23.07.2014 11:16

уже много раз об этом говорили

Chipleo 23.07.2014 17:14

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:57

уже где-то выкладывали дампы адресов обработчиков.
в формате
OPcode handler

SeT 23.07.2014 23:32

Цитата:

Сообщение от Konctantin (Сообщение 32977)
уже где-то выкладывали дампы адресов обработчиков.
в формате
OPcode handler

Если у кого то есть такое для последней версии офа, было бы круто.

Konctantin 24.07.2014 01:14

а что мешает заинжектить в процесс Длл и запустить перебор с 0 по 0xffff?

Amaru 24.07.2014 09:15

Цитата:

Сообщение от Chipleo (Сообщение 32976)
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


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

ru-mangos.ru - Русское сообщество MaNGOS