Ru-MaNGOS

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

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

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

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

Сегодня сидел и ковырялся в клиенте 12803
и нашел вот такое:

но непонятно, то для чего столько функций для считывания int8 (2 шт), int16 (2 шт), int32 (4 шт), int64 (2 шт)

Код:
//----- (007CF390) --------------------------------------------------------
int __thiscall GetInt8(int this, int a2)
{
  int v2; // esi@1

  v2 = this;
  if ( *(_DWORD *)(this + 20) == -1 )
    sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 526, (int)"IsFinal()", 0, 1u, 286331153);
  if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 1) )
    *(_BYTE *)a2 = *(_BYTE *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20)++);
  return v2;
}

//----- (007CF3F0) --------------------------------------------------------
int __thiscall GetInt8_2(int this, int a2)
{
  int v2; // esi@1

  v2 = this;
  if ( *(_DWORD *)(this + 20) == -1 )
    sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 527, "IsFinal()", 0, 1u, 286331153);
  if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 1) )
    *(_BYTE *)a2 = *(_BYTE *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20)++);
  return v2;
}

//----- (007CF450) --------------------------------------------------------
int __thiscall GetInt16(int this, int a2)
{
  int v2; // esi@1

  v2 = this;
  if ( *(_DWORD *)(this + 20) == -1 )
    sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 528, "IsFinal()", 0, 1u, 286331153);
  if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 2) )
  {
    *(_WORD *)a2 = *(_WORD *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20));
    *(_DWORD *)(v2 + 20) += 2;
  }
  return v2;
}

//----- (007CF4B0) --------------------------------------------------------
int __thiscall GetInt16_2(int this, int a2)
{
  int v2; // esi@1

  v2 = this;
  if ( *(_DWORD *)(this + 20) == -1 )
    sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 529, (int)"IsFinal()", 0, 1u, 286331153);
  if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 2) )
  {
    *(_WORD *)a2 = *(_WORD *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20));
    *(_DWORD *)(v2 + 20) += 2;
  }
  return v2;
}

//----- (007CF510) --------------------------------------------------------
int __thiscall GetInt32(int this, int a2)
{
  int v2; // esi@1

  v2 = this;
  if ( *(_DWORD *)(this + 20) == -1 )
    sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 530, "IsFinal()", 0, 1u, 286331153);
  if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 4) )
  {
    *(_DWORD *)a2 = *(_DWORD *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20));
    *(_DWORD *)(v2 + 20) += 4;
  }
  return v2;
}

//----- (007CF570) --------------------------------------------------------
int __thiscall GetInt32_2(int this, int a2)
{
  int v2; // esi@1

  v2 = this;
  if ( *(_DWORD *)(this + 20) == -1 )
    sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 531, "IsFinal()", 0, 1u, 286331153);
  if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 4) )
  {
    *(_DWORD *)a2 = *(_DWORD *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20));
    *(_DWORD *)(v2 + 20) += 4;
  }
  return v2;
}

//----- (007CF5D0) --------------------------------------------------------
int __thiscall GetInt32_3(int this, int a2)
{
  int v2; // esi@1

  v2 = this;
  if ( *(_DWORD *)(this + 20) == -1 )
    sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 533, "IsFinal()", 0, 1u, 286331153);
  if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 4) )
  {
    *(_DWORD *)a2 = *(_DWORD *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20));
    *(_DWORD *)(v2 + 20) += 4;
  }
  return v2;
}

//----- (007CF630) --------------------------------------------------------
int __thiscall GetInt32_4(int this, int a2)
{
  int v2; // esi@1

  v2 = this;
  if ( *(_DWORD *)(this + 20) == -1 )
    sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 534, "IsFinal()", 0, 1u, 286331153);
  if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 4) )
  {
    *(_DWORD *)a2 = *(_DWORD *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20));
    *(_DWORD *)(v2 + 20) += 4;
  }
  return v2;
}

//----- (007CF690) --------------------------------------------------------
int __thiscall GetInt64(int this, int a2)
{
  int v2; // esi@1
  int v3; // eax@4
  int v4; // ecx@4

  v2 = this;
  if ( *(_DWORD *)(this + 20) == -1 )
    sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 536, (int)"IsFinal()", 0, 1u, 286331153);
  if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 8) )
  {
    v3 = *(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8);
    v4 = *(_DWORD *)(v2 + 20);
    *(_DWORD *)a2 = *(_DWORD *)(v3 + v4);
    *(_DWORD *)(a2 + 4) = *(_DWORD *)(v3 + v4 + 4);
    *(_DWORD *)(v2 + 20) += 8;
  }
  return v2;
}

//----- (007CF700) --------------------------------------------------------
int __thiscall GetInt64_2(int this, int a2)
{
  int v2; // esi@1
  int v3; // eax@4
  int v4; // ecx@4

  v2 = this;
  if ( *(_DWORD *)(this + 20) == -1 )
    sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 537, "IsFinal()", 0, 1u, 286331153);
  if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 8) )
  {
    v3 = *(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8);
    v4 = *(_DWORD *)(v2 + 20);
    *(_DWORD *)a2 = *(_DWORD *)(v3 + v4);
    *(_DWORD *)(a2 + 4) = *(_DWORD *)(v3 + v4 + 4);
    *(_DWORD *)(v2 + 20) += 8;
  }
  return v2;
}

//----- (007CF770) --------------------------------------------------------
int __thiscall GetFloat(int this, int a2)
{
  int v2; // esi@1

  v2 = this;
  if ( *(_DWORD *)(this + 20) == -1 )
    sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 538, "IsFinal()", 0, 1u, 286331153);
  if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 4) )
  {
    *(float *)a2 = *(float *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20));
    *(_DWORD *)(v2 + 20) += 4;
  }
  return v2;
}
__________________
Konctantin вне форума   Ответить с цитированием
Старый 22.08.2010, 10:16   #2
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

В Release Assertion Enabled билдах у них всегда больше чем 1 функция.
Из сорцов не особо понятно почему компилятор генерирует несколько методов, Возможно близард используют модифицированный код...

datastore.cpp

datastore.h

Последний раз редактировалось TOM_RUS; 22.08.2010 в 17:40.
TOM_RUS вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Konctantin (22.08.2010)
Старый 22.08.2010, 10:46   #3
zergtmn
MaNGOS Dev
 
Аватар для zergtmn
 
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
zergtmn Обладатель прекрасной аурыzergtmn Обладатель прекрасной ауры
По умолчанию

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

Вот это близы наворотили:
6 текстовых полей, но по снифам, я пока ничего не встречал, максимум 2 поля, или это на будущее...
Код:
//----- (0055D000) --------------------------------------------------------
signed int __stdcall READ_SMSG_QUESTGIVER_OFFER_REWARD(int a1)
{
  int v1; // ebx@1
  int v2; // edi@1
  unsigned int v3; // esi@1
  int v4; // eax@5
  int v5; // eax@7
  int v6; // eax@9
  double v7; // st7@9
  char v9; // [sp+0h] [bp-18FCh]@1
  char v10; // [sp+Ch] [bp-18F0h]@1
  char v11; // [sp+BC4h] [bp-D38h]@1
  char v12; // [sp+FC4h] [bp-938h]@1
  char v13; // [sp+13C4h] [bp-538h]@1
  char v14; // [sp+15C4h] [bp-338h]@11
  char v15; // [sp+16D0h] [bp-22Ch]@1
  char v16; // [sp+17D0h] [bp-12Ch]@1
  int v17; // [sp+18D0h] [bp-2Ch]@1
  int v18; // [sp+18D4h] [bp-28h]@1
  int v19; // [sp+18D8h] [bp-24h]@1
  int v20; // [sp+18DCh] [bp-20h]@1
  int v21; // [sp+18E0h] [bp-1Ch]@1
  __int64 v22; // [sp+18E4h] [bp-18h]@1
  int v23; // [sp+18ECh] [bp-10h]@1
  unsigned int v24; // [sp+18F0h] [bp-Ch]@1
  char *v25; // [sp+18F4h] [bp-8h]@1
  int v26; // [sp+18F8h] [bp-4h]@1

  v2 = a1;
  GetInt64_2(&v22);
  GetInt32(&v17);
  GetString(v2, (int)&v13, 0x200u);
  GetString(v2, (int)&v10, 0xBB8u);
  GetString(v2, (int)&v12, 0x400u);
  GetString(v2, (int)&v15, 0x100u);
  GetString(v2, (int)&v11, 0x400u);
  GetString(v2, (int)&v16, 0x100u);
  GetInt32(&v20);
  GetInt32(&v21);
  GetInt8_2((char *)&a1 + 3);
  GetInt32(&v18);
  GetInt32(&v19);
  GetInt32(&v26);
  v1 = v26;
  _alloca_probe_16(v9);
  v3 = 0;
  v23 = v1;
  v25 = &v9;
  v24 = v1;
  if ( v1 > 0 )
  {
    while ( 1 )
    {
      if ( v3 >= v1 )
      {
        v4 = sub_40EEE3(&off_C0463C);
        sub_7DE6E0(-2062548864, v4, -2, 1, 1, "index (0x%08X), array size (0x%08X)", v3);
      }
      GetInt32_2(&v25[8 * v3]);
      if ( v3 >= v24 )
      {
        v5 = sub_40EEE3(&off_C0463C);
        sub_7DE6E0(-2062548864, v5, -2, 1, 1, "index (0x%08X), array size (0x%08X)", v3);
      }
      GetInt32(&v25[8 * v3++ + 4]);
      if ( (signed int)v3 >= v26 )
        break;
      v1 = v24;
    }
  }
  v7 = sub_4964F0(v22, 8, (unsigned int)".\\Player_C.cpp");
  if ( v6 )
    PlayEmotes(v6, (int)&v23);
  ReadArrayBlock_QOR((int)&v14, v2);
  sub_8AD740(v22, 0i64, 3, &v10, v17, 0, 0, 0); // unk
  sub_8AF820(v7, (int)&v13, (int)&v14, BYTE3(a1), v19, v18); // unk
  sub_8AC950(v20, (int)&v12, (int)&v15, v21, (int)&v11, (int)&v16);//unk
  sub_7A5110(304, 0);// unk
  return 1;
}

void __usercall GetBloc_001(int a1<eax>, int a2<edi>)
{
  int v2; // esi@1

  v2 = a1;
  GetInt32(a1);
  GetIntArray(a2, v2 + 4, 6);
  GetIntArray(a2, v2 + 28, 6);
  GetIntArray(a2, v2 + 52, 6);
  GetInt32(v2 + 76);
  GetIntArray(a2, v2 + 80, 4);
  GetIntArray(a2, v2 + 96, 4);
  GetIntArray(a2, v2 + 112, 4);
  GetInt32(v2 + 128);
  GetInt32(v2 + 132);
  GetInt32(v2 + 136);
  GetInt32_2(a2, v2 + 140);
  GetFloat(a2, v2 + 144);
  GetInt32(v2 + 148);
  GetInt32(v2 + 152);
  GetInt32(v2 + 156);
  GetIntArray(a2, v2 + 160, 5);
  GetIntArray(a2, v2 + 180, 5);
  GetIntArray(a2, v2 + 200, 5);
  GetInt32(v2 + 220);
  GetInt32(v2 + 224);
  GetIntArray(a2, v2 + 228, 4);
  GetIntArray(a2, v2 + 244, 4);
  GetInt32(v2 + 260);
  GetInt32(v2 + 264);
}
__________________
Konctantin вне форума   Ответить с цитированием
Старый 22.08.2010, 13:30   #5
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

имена функций и переменных это откуда ?
в бета-версиях клиента включена отладочная информация в exe?
Йоха вне форума   Ответить с цитированием
Старый 22.08.2010, 13:42   #6
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Вычислял опытним путем.

Смотрел на базу, что выкладывал TOM_RUS http://ru-mangos.ru/showthread.php?t=1473
искал совпадения и потихоньку (потратил на это пару часов сегодня)

Нашел с десяток обработчиков пакетов, теперь пишу для них парсеры.


ЗЫ. Но вот обработчик А9 не могу найти..

ЗЫЫ. Вот если интересно, то структура пакета SMSG_QUESTGIVER_REQUEST_ITEMS
Код:
RequestItem ri = new RequestItem();
ri.NpcGuid          = gr.ReadGuid();
ri.QuestEntry       = gr.ReadUInt32();
ri.Title            = gr.ReadCString();
ri.TextRequestItem  = gr.ReadCString();
ri.unk1             = gr.ReadUInt32();
ri.Emote            = gr.ReadUInt32();
ri.Autofinish       = gr.ReadUInt32();
ri.QuestFlag        = gr.ReadUInt32();
ri.unk2             = gr.ReadUInt32();
ri.RewOrReqMoney    = gr.ReadUInt32();
ri.ReqItemsCount    = gr.ReadUInt32();
ri.reqItemList      = new RequestItem.ReqItemOR[6];
for (int i = 0; i < ri.ReqItemsCount; ++i)
{
	ri.reqItemList[i].ReqItemId     = gr.ReadUInt32();
	ri.reqItemList[i].ReqItemCount  = gr.ReadUInt32();
	ri.reqItemList[i].DisplayInfoID = gr.ReadUInt32();
}
ri.UnkFieldCount = gr.ReadUInt32();
ri.unkFieldList = new RequestItem.UnkField[4];
for (int i = 0; i < ri.UnkFieldCount; ++i)
{
	ri.unkFieldList[i].unkField1 = gr.ReadUInt32();
	ri.unkFieldList[i].unkField2 = gr.ReadUInt32();
}
ri.unk3 = gr.ReadUInt32();
ri.unk4 = gr.ReadUInt32();
ri.unk5 = gr.ReadUInt32();
ri.unk6 = gr.ReadUInt32();
ri.unk7 = gr.ReadUInt32();
__________________

Последний раз редактировалось Konctantin; 22.08.2010 в 14:20.
Konctantin вне форума   Ответить с цитированием
Старый 23.08.2010, 18:11   #7
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Цитата:
Сообщение от Konctantin Посмотреть сообщение
ЗЫ. Но вот обработчик А9 не могу найти..
Код:
.text:00499857                 mov     dword ptr [ecx+1AD4h], offset Handle_SMSG_UPDATE_OBJECT
.text:00499861                 mov     dword ptr [ecx+3AD4h], 0
.text:0049986B                 mov     eax, [eax+0E0h]
.text:00499871                 mov     dword ptr [eax+1D10h], offset Handle_SMSG_DESTROY_OBJECT
.text:0049987B                 mov     dword ptr [eax+3D10h], 0
TOM_RUS вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Konctantin (23.08.2010)
Старый 23.08.2010, 18:27   #8
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Спасибо...

И еще есть вопрос... При дизасамблировании нового бинарника, все наработки теряются, есть ли какой способ переносить имена переменных и функций?
__________________
Konctantin вне форума   Ответить с цитированием
Старый 24.08.2010, 09:56   #9
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

я помню давно был такой плагин к иде который как раз предназначался для того что бы переносить в новые билды екзешника все нарытое в предыдущих версиях. Его разрабатывал какой-то пользователь иды, и обсуждение шло на форуме самой датарескью. Не помню как он назывался, так же не в курсе какова его судьба сейчас.
Йоха вне форума   Ответить с цитированием
Старый 25.08.2010, 12:29   #10
Dereka
MaNGOS Dev
 
Аватар для Dereka
 
Регистрация: 08.03.2010
Адрес: Ханты-Мансийск
Сообщений: 28
Сказал(а) спасибо: 27
Поблагодарили 13 раз(а) в 8 сообщениях
Dereka На верном пути
По умолчанию

patchdiff2 поищите

но бывают неточности и в ручную приходиться править

http://cgi.tenablesecurity.com/tenable/patchdiff.php

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

тут новее нашел http://code.google.com/p/patchdiff2/
__________________
Konctantin вне форума   Ответить с цитированием
Старый 29.08.2010, 22:42   #12
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Еще есть вопрос:
В этой функции должен быть участок, где формируется пакет CMSG_AUTH_SESSION (2593)
Код:
//----- (0062E160) --------------------------------------------------------
signed int __thiscall NetClient__SendAuthSession(int this, int a2)
{
  int v2; // ecx@1
  int v3; // esi@1
  int v4; // edi@3
  int v5; // edx@3
  int v6; // ecx@3
  unsigned int v7; // eax@3
  int v8; // ecx@3
  char v9; // dl@3
  char *v10; // eax@5
  signed int v11; // ebx@5
  char v12; // cl@6
  int v13; // edx@11
  int v14; // eax@11
  int v15; // edx@11
  int v16; // eax@11
  int v17; // eax@13
  char v18; // cl@14
  char v20; // [sp+Ch] [bp-5DCh]@3
  char v21; // [sp+1Ch] [bp-5CCh]@15
  __int16 v22; // [sp+30h] [bp-5B8h]@3
  int v23; // [sp+34h] [bp-5B4h]@11
  int v24; // [sp+38h] [bp-5B0h]@3
  int v25; // [sp+3Ch] [bp-5ACh]@3
  char v26; // [sp+40h] [bp-5A8h]@5
  char v27; // [sp+540h] [bp-A8h]@3
  int v28; // [sp+544h] [bp-A4h]@11
  int v29; // [sp+548h] [bp-A0h]@11
  int v30; // [sp+54Ch] [bp-9Ch]@11
  int v31; // [sp+550h] [bp-98h]@11
  int v32; // [sp+554h] [bp-94h]@15
  char v33; // [sp+57Ch] [bp-6Ch]@11
  char v34; // [sp+5D8h] [bp-10h]@3
  int v35; // [sp+5E0h] [bp-8h]@3
  int v36; // [sp+5E4h] [bp-4h]@11

  v3 = this;
  v2 = *(_DWORD *)(this + 18000);
  if ( v2 )
    (*(void (__stdcall **)(int, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 24))(v3, "SMSG_AUTH_CHALLENGE", 0, 0);
  *(_BYTE *)(v3 + 18060) = 0;
  SecureRandom__Seed((int)&v34, 0);
  sub_7D5A00(v6, v5);
  SecureRandom__Seed((int)&v34, v7);
  sub_979310(&v20);
  v8 = *(_DWORD *)(v3 + 1284);
  v9 = *(_BYTE *)(v3 + 1328);
  v22 = 12803;
  v25 = v8;
  v27 = v9;
  v4 = v3 + 4;
  v24 = sub_4B9D60((int)&v34);
  v35 = v24;
  if ( v3 == -4 )
    sub_7E0210(
      0x85100000u,
      (int)"d:\\buildserver\\wow\\6\\work\\wow-code\\trunk\\storm\\h\\SStr.inl",
      111,
      (int)"source",
      v4,
      1u,
      286331153);
  v10 = &v26;
  v11 = 1279;
  while ( 1 )
  {
    v12 = v10[v4 - (_DWORD)&v26];
    *v10++ = v12;
    if ( !v12 )
      break;
    --v11;
    if ( !v11 )
      goto LABEL_10;
  }
  if ( v11 )
    goto LABEL_11;
LABEL_10:
  *v10 = 0;
LABEL_11:
  v13 = *(_DWORD *)(v3 + 18084);
  v14 = *(_DWORD *)(v3 + 18088);
  v28 = *(_DWORD *)(v3 + 18092);
  v23 = v13;
  v15 = *(_DWORD *)(a2 + 8);
  v29 = v14;
  v16 = *(_DWORD *)(a2 + 12);
  v36 = 0;
  v30 = v15;
  v31 = v16;
  sub_64EC00((int)&v33);
  if ( v3 == -4 )
    sub_7E0210(
      0x85100000u,
      (int)"d:\\buildserver\\wow\\6\\work\\wow-code\\trunk\\storm\\h\\SStr.inl",
      178,
      (int)"string",
      0,
      1u,
      286331153);
  v17 = v3 + 4;
  do
    v18 = *(_BYTE *)v17++;
  while ( v18 );
  SHA1__Update((int)&v33, v3 + 4, v17 - (v3 + 5));
  SHA1__Update((int)&v33, (int)&v36, 4u);
  SHA1__Update((int)&v33, (int)&v35, 4u);
  SHA1__Update((int)&v33, a2, 4u);
  SHA1__Update((int)&v33, v3 + 1288, 0x28u);
  sub_64ED00((int)&v21, (int)&v33);
  sub_4667B0((int)&v32);
  (*(void (__thiscall **)(int *))(v32 + 28))(&v32);
  sub_493750((void *)v3, (int)&v20);
  sub_9792C0((int)&v20);
  return 1;
}
Но обработчика я так и не нашел
Прошелся по функциям, но и там не нашел участка, который формирует пакет.

Не слабо близы по передвигали все.

Код:
Packet C->S, CMSG_AUTH_SESSION (2593), len 316, 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 09 00 00 00 15 00 00 00 41 A5 A5 88 |............A...|
|00000010| 16 08 11 E4 21 19 F7 F0 D2 98 B7 A7 A1 E4 DE 51 |....!..........Q|
|00000020| 03 32 62 00 00 00 00 00 00 00 00 00 00 00 B1 AB |.2b.............|
|00000030| A6 0C 01 31 35 35 37 37 36 35 23 32 00 FB 00 00 |...1557765#2....|
|00000040| 00 58 03 00 00 78 9C 75 D2 31 6E C3 30 0C 05 50 |.X...x.u.1n.0..P|
|00000050| 5F A4 87 A9 1D C4 30 5A 2F 8D 32 17 B4 C4 C8 84 |_.....0Z/.2.....|
|00000060| 25 D2 A0 E5 A0 C9 41 7A DE 36 1D 82 0E 94 D6 47 |%.....Az.6.....G|
|00000070| 10 1F 9F 7A 69 9A A6 4D 74 BF 83 86 CF 23 62 98 |...zi..Mt....#b.|
|00000080| C0 2F E7 A1 79 BE 27 BE FA 99 F0 8A 19 B9 D8 AE |./..y.'.........|
|00000090| 7E 06 94 24 F1 56 71 64 B0 65 F7 85 84 4D 6B 41 |~..$.Vqd.e...MkA|
|000000A0| 27 D4 6D 96 B5 C2 A5 24 BC 10 A6 30 12 53 86 D5 |'.m....$...0.S..|
|000000B0| 1A 22 0E C4 D1 5C D0 41 42 0E A0 16 49 9E A0 BC |."...\.AB...I...|
|000000C0| 4B AC 9A C3 AF 62 E3 0A BE 7C 00 85 A3 42 C6 CD |K....b...|...B..|
|000000D0| 98 39 E0 B4 47 27 92 2C EC D3 6D 9D CD B8 FD D8 |.9..G'.,..m.....|
|000000E0| CD 60 F7 DF 8F A7 5D AF 68 97 DF EF 94 42 0B 6C |.`....].h....B.l|
|000000F0| 9F F6 4F 3B E1 A2 92 EA 03 A6 0C BC AD E8 ED 44 |..O;...........D|
|00000100| 43 C1 7C 12 BF 60 A9 B5 3F 82 57 31 E5 51 9E 0D |C.|..`..?.W1.Q..|
|00000110| 78 11 8D B5 85 EE 71 4E 3B 8D A3 8C 23 30 44 B4 |x.....qN;...#0D.|
|00000120| 8E ED 64 41 FB 07 3A 85 80 A7 85 92 5D CD 2F 13 |..dA..:.....]./.|
|00000130| A3 FE B7 F4 7D 78 FB 01 45 49 DC 3C -- -- -- -- |....}x..EI.<....|
|----------------------------------------------------------|----------------|
03 32 - буилд
31 35 35 37 37 36 35 23 32 00 - аккаунт

Если не сложно, подскажите, где обработчик, а то сел править парсеры пакетов, и вот застрял на этом.
__________________
Konctantin вне форума   Ответить с цитированием
Старый 29.08.2010, 23:04   #13
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Код:
void *__thiscall sub_979040(void *this, CDataStore *a2)
{
  int v2; // esi@1
  void *v3; // esi@1

  v3 = this;
  CDataStore__PutInt32_2(a2, 0xA21u);
  CDataStore__PutInt32(a2, *((_DWORD *)v3 + 12));
  CDataStore__PutInt32_3(a2, *((_DWORD *)v3 + 334));
  CDataStore__PutInt32_3(a2, *((_DWORD *)v3 + 335));
  CDataStore__PutArray(a2, (int)((char *)v3 + 16), 20);
  CDataStore__PutInt16((int)a2, *((_WORD *)v3 + 18));// build
  CDataStore__PutInt32_3(a2, *((_DWORD *)v3 + 10));
  CDataStore__PutInt64(a2, *((_DWORD *)v3 + 336), *((_DWORD *)v3 + 337));// unk4
  CDataStore__PutInt32_3(a2, *((_DWORD *)v3 + 11));
  CDataStore__PutInt8_2((int)a2, *((_BYTE *)v3 + 1332));// unk5
  CDataStore__PutCString((int)a2, (int)((char *)v3 + 52));// account
  CDataStore__PutInt32_3(a2, *((_DWORD *)v3 + 342));
  v2 = (int)((char *)v3 + 1352);
  if ( *(_DWORD *)(v2 + 20) == -1 )
      BlizzAssert(
          0x85100000u,
          (int)"d:\\buildserver\\wow\\6\\work\\wow-code\\trunk\\engine\\source\\base\\CDataStore.h",
          504,
          (int)"IsFinal()",
          0,
          1u,
          286331153);
  *(_DWORD *)(v2 + 20) = 0;
  return sub_5ED960(a2, v2);
}
По адресу 00B87798 начинается массив указателей на кучу функций, формирующих клиентские пакеты:
Код:
.rdata:00B87798 off_B87798      dd offset Send_CMSG_PING
.rdata:00B877A0 off_B877A0      dd offset Send_CMSG_REDIRECTION_AUTH_PROOF
.rdata:00B877A8 off_B877A8      dd offset Send_CMSG_UNKNOWN_1296
.rdata:00B877B0 off_B877B0      dd offset Send_CMSG_AUTH_SESSION
.rdata:00B877B8 off_B877B8      dd offset Send_CMSG_MESSAGECHAT_CHANNEL
.rdata:00B877C0 off_B877C0      dd offset Send_CMSG_CHANNEL_SILENCE_VOICE
и т.д. еще 58+28 различных опкодов...

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

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

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

Код:
.text:00979040 Send_CMSG_AUTH_SESSION proc near        ; DATA XREF: .rdata:off_B877B0
Код:
.rdata:00B877B0 off_B877B0      dd offset Send_CMSG_AUTH_SESSION
Код:
.text:009792C8                 mov     dword ptr [ecx], offset off_B877B0
.text:00979324                 mov     dword ptr [esi], offset off_B877B0

Последний раз редактировалось TOM_RUS; 29.08.2010 в 23:25.
TOM_RUS вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Konctantin (30.08.2010)
Ответ


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

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



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


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