Ru-MaNGOS

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

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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.10.2014, 09:09   #41
GriffonHeart
Гость
 
Сообщений: n/a
По умолчанию

Использую http://www.privatepaste.com/7cc6a57a4d/SovakOpcodes
По второй колонке нахожу нужный мне sub_***
Но вот не могу найти у себя в ida опкоды, помеченные как LEGACY
Кто-нибудь знает, что это за опкоды и как их искать в ida?
  Ответить с цитированием
Старый 04.10.2014, 23:58   #42
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Цитата:
Сообщение от GriffonHeart Посмотреть сообщение
Использую http://www.privatepaste.com/7cc6a57a4d/SovakOpcodes
По второй колонке нахожу нужный мне sub_***
Но вот не могу найти у себя в ida опкоды, помеченные как LEGACY
Кто-нибудь знает, что это за опкоды и как их искать в ida?
Это "normal" опкоды в opcodetools
Amaru вне форума   Ответить с цитированием
Старый 05.10.2014, 04:59   #43
GriffonHeart
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от Amaru Посмотреть сообщение
Это "normal" опкоды в opcodetools
И как для них найти читалку/писалку данных?
  Ответить с цитированием
Старый 06.10.2014, 21:58   #44
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Цитата:
Сообщение от GriffonHeart Посмотреть сообщение
И как для них найти читалку/писалку данных?
http://paste2.org/tA7HF34c

самый последний кусок вычислает обработчик нормал опкодов и вызывает его
(17538 билд)
там обычно в одной функции и читалка и обработка.
ну а писалки там нет, так как это серверные опкоды

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

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

клиентские как раньше ищутся, а серверные обработчики немного по другому
находим сначала NetClient::OneMessageReady
Код:
void __thiscall NetClient__OneMessageReady(void *this, int a2, int a3, int a4, signed int a5)
{
  void *v5; // ebx@1
  int v6; // edi@1
  signed int v7; // eax@3
  int v8; // eax@6
  int v9; // eax@7
  size_t v10; // esi@8
  int v11; // eax@9
  int v12; // ecx@13
  signed int v13; // [sp-4h] [bp-12Ch]@19
  char v14; // [sp+10h] [bp-118h]@8
  void *v15; // [sp+10Ch] [bp-1Ch]@1
  int (__stdcall **v16)(int, int, int); // [sp+110h] [bp-18h]@17
  int v17; // [sp+114h] [bp-14h]@8
  int v18; // [sp+118h] [bp-10h]@8
  size_t v19; // [sp+11Ch] [bp-Ch]@8
  int v20; // [sp+120h] [bp-8h]@8
  int v21; // [sp+124h] [bp-4h]@8
  int v22; // [sp+13Ch] [bp+14h]@9

  v6 = a5;
  v5 = this;
  v15 = this;
  if ( a5 < 4 || !a4 || (v7 = sub_653578(this, a2), v7 >= 4) )
    goto LABEL_4;
  v8 = (int)(v5 + v7 + 1650);
  if ( *(_BYTE *)v8 )
  {
    v11 = *(_DWORD *)a4;
    v22 = *(_DWORD *)a4;
    if ( *(_DWORD *)a4 == 1882 )
    {
      v13 = 0;
    }
    else
    {
      if ( *(_DWORD *)a4 == 1994 )
      {
        NetClient__DecompressAndProcess(a2, a4 + 4, v6 - 4);
        return;
      }
      if ( *(_DWORD *)a4 != 5962 )
      {
        if ( *(_DWORD *)a4 == 6105 )
        {
          NetClient__HandleMultiplePackets(a2, a3, a4 + 4, v6 - 4);
        }
        else
        {
          v12 = (v11 - 1) & 0xF6E;
          if ( v12 == 1864 || v12 == 1896 )
          {
            v18 = 0;
            v19 = -1;
            v21 = 0;
            v16 = &off_D62168;
            v17 = a4 + 4;
            v20 = v6 - 4;
            NetClient__JAMClientConnectionDispatch(a2, a3, v11, &v16);
            v16 = &off_D62168;
            CDataStore__InternalDestroy(&v16);
          }
          else
          {
            if ( sub_6541A4(v5, a2) )
              sub_6252E0(v22, (int)v5, a2, a4, v6);
          }
        }
        return;
      }
      v13 = 1;
    }
    sub_653613(a2, a4 + 4, v6 - 4, v13);
    return;
  }
  *(_BYTE *)v8 = 1;
  v9 = strlen("WORLD OF WARCRAFT CONNECTION - SERVER TO CLIENT");
  if ( sub_A3DE62(a4, "WORLD OF WARCRAFT CONNECTION - SERVER TO CLIENT", v9) )
  {
LABEL_4:
    sub_653F7D(a2, 3u);
    sub_957D2F((LPCRITICAL_SECTION)a2);
    return;
  }
  v10 = strlen("WORLD OF WARCRAFT CONNECTION - CLIENT TO SERVER") + 1;
  memmove_0(&v14, "WORLD OF WARCRAFT CONNECTION - CLIENT TO SERVER", v10);
  v17 = (int)&v14;
  v18 = 0;
  v19 = v10;
  v20 = 4;
  v21 = 0;
  WowConnection__Send(&v17, 1);
  sub_53ACB3(
    v18,
    "d:\\buildserver\\wow\\4\\work\\wow-code\\branches\\wow-patch-6_0_3-branch-fastpatch-1\\wow\\source\\wowservices\\PacketPipe.h",
    34,
    0);
}
Эта штука проверяет айди коннекта, куда пришел опкод, определяет группу, к которой принадлежит опкод, и если все ок то ставит в очередь
Код:
          if ( sub_6541A4(v5, a2) )
              sub_6252E0(v22, (int)v5, a2, a4, v6);
вот этим, собственно, и ставит
Код:
    if ( (unsigned __int8)(*(int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v7 + 0x18))(
                            a2,
                            a1,
                            a3,
                            a4,
                            a5) )
массив собой представляет массив структур что-то вроде
Код:
        [StructLayout(LayoutKind.Sequential)]
        struct SMSGHandler
        {
            public IntPtr pName;            // 0x0
            public uint checker;            // 0x4
            public uint _2;                 // 0x8
            public uint _3;                 // 0xC
            public uint _4;                 // 0x10
            public uint dataHandler;        // 0x14
            public uint connectionChecker;  // 0x18
        }
я глубоко не вникал
pName - имя группы, checker - проверка принадлежности группы, dataHandler - адрес обработчика группы, connectionChecker - проверяет номер соединения (?)

вот так это выглядит в 19116
Код:
'ClientQuest'
Checker: 5F4D44
Connection Checker: 5F4D86
DataHandler: 5F4DD3
_2: 0
_3: 0
_4: 5F4D5C

'Client'
Checker: 5F8F77
Connection Checker: 5FF895
DataHandler: 5F90B3
_2: 0
_3: 0
_4: 5FF74D

'ClientGuild'
Checker: 61F2BD
Connection Checker: 61F2FF
DataHandler: 61F34C
_2: 0
_3: 0
_4: 61F2D5

'ClientSocial'
Checker: 62A9FD
Connection Checker: 62AA15
DataHandler: 62AA43
_2: 0
_3: 0
_4: 250000

'ClientSpell'
Checker: CAE449
Connection Checker: CAE52D
DataHandler: CAE5C8
_2: 0
_3: 0
_4: CAE4B5

'ClientMovement'
Checker: CB96EE
Connection Checker: CB9898
DataHandler: CB997B
_2: 0
_3: 0
_4: CB97BF

'ClientLFG'
Checker: CBC9E4
Connection Checker: CBCA26
DataHandler: CBCA54
_2: 0
_3: 0
_4: CBC9FC

'ClientChat'
Checker: CBFCED
Connection Checker: CBFD2F
DataHandler: CBFD5D
_2: 0
_3: 0
_4: CBFD05

'ClientGarrison'
Checker: CC1461
Connection Checker: CC1501
DataHandler: CC155D
_2: 0
_3: 0
_4: CC14AB
Собственно, в sub_6252E0 вызывается connectionChecker, например вот
Код:
char __cdecl sub_5FF895(int a1, int a2, int a3, int a4, int a5)
{
  int v5; // eax@1
  int v6; // ecx@3
  int v7; // ecx@13
  int v8; // ecx@16
  int v9; // eax@18
  char result; // al@22

  v5 = a2 - 1;
  if ( (((_WORD)a2 - 1) & 0x1F54) != 4608
    && (v5 & 0x1DDC) != 208
    && (v6 = v5 & 0xDDC, v6 != 256)
    && v6 != 2304
    && (v5 & 0x5D4) != 384
    && (v5 & 0x5D6) != 272
    && (v5 & 0x76C) != 832
    && (v5 & 0x5F4) != 480
    && (v5 & 0x15D4) != 4
    && (v5 & 0x15C4) != 260
    && (v5 & 0x15BE) != 5256
    && (v5 & 0x174E) != 1288
    && (v7 = v5 & 0x74E, v7 != 1292)
    && v7 != 1294
    && (v5 & 0x74A) != 1800
    && (v8 = v5 & 0xFCE, v8 != 1352)
    && v8 != 1480
    && (v9 = v5 & 0xDCE, v9 != 1354)
    && v9 != 1482
    || (unsigned __int8)sub_5FA1D7(a2) && sub_653578((void *)a1, a3) != 1 )
  {
    result = 0;
  }
  else
  {
    NETEVENTQUEUE__AddEvent_2(a1, 23, a3, a4, a5);
    result = 1;
  }
  return result;
}
Сами обработчики вызываются в NetClient::ProcessMessage
Код:
char __thiscall NetClient__ProcessMessage(void *this, int a2, int a3, int a4, int a5)
{
  char result; // al@1
  int v6; // esi@1
  void *v7; // edi@1

  ++dword_10B8FC4;
  v6 = a4;
  v7 = this;
  CDataStore__GetInt32(&a4);
  result = sub_625285(v7, a2, a3, a4, v6);
  if ( !result )
    result = (*(int (__thiscall **)(_DWORD))(*(_DWORD *)v6 + 24))(v6);
  return result;
}
В sub_625285 идет та же итерация по структуре, и если опкод принадлежит к группе, то вызывается dataHandler этой группы

при желании для этого всего можно тоже сделать OpcodeTools
Amaru вне форума   Ответить с цитированием
Старый 27.11.2014, 08:34   #47
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

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

Цитата:
Сообщение от Dubstep Посмотреть сообщение
спасибо. Реально как нибудь написать тулзу которая достанет нужну инфу в формате типа: ипод - sub_xxxx
не думаю, что это нужно
достаточно достать инфу опкод-тип-magic_value, а далее ручками найти в дереве if/else нужные обработчики
Amaru вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Dubstep (27.11.2014)
Старый 27.11.2014, 13:34   #49
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

ясно. Но что то не могу найти OneMessageReady.... по си дампу надо искать? И можете показать на каком нибудь опкоде. пример поиска
Dubstep вне форума   Ответить с цитированием
Старый 27.11.2014, 13:51   #50
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

вот адрес: 0x654910 - not rebased
__________________
Konctantin вне форума   Ответить с цитированием
Старый 28.11.2014, 01:57   #51
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

Цитата:
Сообщение от Konctantin Посмотреть сообщение
вот адрес: 0x654910 - not rebased
это адрес OneMessageReady ? или что?
Dubstep вне форума   Ответить с цитированием
Старый 28.11.2014, 04:18   #52
Fabian
Новичок
 
Регистрация: 02.07.2010
Сообщений: 23
Сказал(а) спасибо: 2
Поблагодарили 20 раз(а) в 12 сообщениях
Fabian На верном пути
По умолчанию

Цитата:
Сообщение от Dubstep Посмотреть сообщение
это адрес OneMessageReady ? или что?
yes it is.
Fabian вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Dubstep (29.11.2014)
Старый 29.11.2014, 01:07   #53
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

эм, по си дампу не нашёл ни одного GetInt32, CDataStore О_о как найти CMSG ?Оо
Dubstep вне форума   Ответить с цитированием
Старый 29.11.2014, 07:38   #54
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Это вручную переименованные функции, для удобного восприятия.
CDataStore - это структура (воссозданная вручную) :
Код:
typedef struct {
    void* vTable;
    BYTE* buffer;
    DWORD base;
    DWORD alloc;
    DWORD size;
    DWORD read;
} CDataStore;
Цитата:
О_о как найти CMSG ?Оо
что вас собственно удивляет? тут очень много тем по форуму, почитайте - поймете что да как.
__________________
Konctantin вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Dubstep (29.11.2014)
Старый 29.11.2014, 13:48   #55
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

Как я понял это так, есть DataHandler: 5F90B3, по нему ищу sub_5F90B3, нашёл. там получается большая функция с кучей кейзов, среди них получается есть нужный мне саб, который обрабатывает опкод?
Ну вот ещё вопросы:
1. Как из этих сабов найти нужный
2. И где взять 5F90B3, как я понимаю на каждую группу он свой. вот где взять список этот с адресами
Спасибо
Dubstep вне форума   Ответить с цитированием
Старый 29.11.2014, 14:08   #56
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Цитата:
Сообщение от Dubstep Посмотреть сообщение
Как я понял это так, есть DataHandler: 5F90B3, по нему ищу sub_5F90B3, нашёл. там получается большая функция с кучей кейзов, среди них получается есть нужный мне саб, который обрабатывает опкод?
Ну вот ещё вопросы:
1. Как из этих сабов найти нужный
2. И где взять 5F90B3, как я понимаю на каждую группу он свой. вот где взять список этот с адресами
Спасибо
я же писал
Цитата:
Эта штука проверяет айди коннекта, куда пришел опкод, определяет группу, к которой принадлежит опкод, и если все ок то ставит в очередь
Код:

if ( sub_6541A4(v5, a2) )
sub_6252E0(v22, (int)v5, a2, a4, v6);

вот этим, собственно, и ставит
Код:

if ( (unsigned __int8)(*(int (__cdecl **)(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v7 + 0x18))(
a2,
a1,
a3,
a4,
a5) )

массив собой представляет массив структур что-то вроде
Код:

[StructLayout(LayoutKind.Sequential)]
struct SMSGHandler
{
public IntPtr pName; // 0x0
public uint checker; // 0x4
public uint _2; // 0x8
public uint _3; // 0xC
public uint _4; // 0x10
public uint dataHandler; // 0x14
public uint connectionChecker; // 0x18
}
Amaru вне форума   Ответить с цитированием
Старый 29.11.2014, 19:36   #57
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

что то я всё равно не могу понять.... Покажите пожалуйста на каком нибудь примере как найти, например SMSG_TRAINER_LIST 0x0BA9

кстати, вот пытаюсь найти CMSG_ATTACKSWING = 0x1E9B(7835),
ctrl + f по дампу ", 7835)"

Код:
//----- (01412016) --------------------------------------------------------
int __thiscall sub_1412016(void *this, int a2)
{
  void *v2; // esi@1

  v2 = this;
  sub_122FC66(a2, 7835);
  return (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v2 + 4))(v2, a2);
}
Всё что есть

Кстати ещё вопрос, раньше делал си дамп и там уже были созданы CDataStore структуры, а тут вообще пусто... всё надо самому дописывать
Dubstep вне форума   Ответить с цитированием
Старый 29.11.2014, 21:49   #58
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Цитата:
Кстати ещё вопрос, раньше делал си дамп и там уже были созданы CDataStore структуры, а тут вообще пусто... всё надо самому дописывать
скорее всего вы делали дамп с базы которую выкладывал TOM_RUS (с уже созданными структурами и переименованными функциями).
__________________
Konctantin вне форума   Ответить с цитированием
Старый 01.12.2014, 05:53   #59
moJIto
Новичок
 
Регистрация: 29.08.2014
Сообщений: 29
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
moJIto На верном пути
По умолчанию

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

Цитата:
Сообщение от moJIto Посмотреть сообщение
как найти читалку клиента на пакеты типа варденовских, апдейт обджекта и подобных им ( там где просто putData ) и всё, а само читалки нету... всю голову уже сломал
Как? По номеру пакета может?
Amaru вне форума   Ответить с цитированием
Старый 04.12.2014, 00:29   #61
moJIto
Новичок
 
Регистрация: 29.08.2014
Сообщений: 29
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
moJIto На верном пути
По умолчанию

я про пакеты типа
```
{
int v2; // ebx@1
void *v3; // esi@1
int v4; // edi@1
int v5; // eax@1
int v6; // eax@1
int v8; // [sp+Ch] [bp-8h]@1
__int16 v9; // [sp+10h] [bp-4h]@1

v2 = a2;
v3 = this;
LOBYTE(a2) = 0;
v4 = (int)((char *)this + 20);
v8 = v2;
v9 = 0;
v5 = CDataStore::Strlen((int)((char *)this + 20));
CDataStore::Write6Bits((int)&v8, v5, a2);
CDataStore::FlushBits((int)&v8);
CDataStore::PutInt32(v2, *((_DWORD *)v3 + 4));
v6 = CDataStore::Strlen(v4);
return CDataStore::PutData(v2, v4, v6);
}
```

тут висит PutData - как найти функцию, которая это читает?

Последний раз редактировалось NeatElves; 04.12.2014 в 10:01.
moJIto вне форума   Ответить с цитированием
Старый 07.12.2014, 05:37   #62
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Цитата:
Сообщение от moJIto Посмотреть сообщение
я про пакеты типа
```
{
int v2; // ebx@1
void *v3; // esi@1
int v4; // edi@1
int v5; // eax@1
int v6; // eax@1
int v8; // [sp+Ch] [bp-8h]@1
__int16 v9; // [sp+10h] [bp-4h]@1

v2 = a2;
v3 = this;
LOBYTE(a2) = 0;
v4 = (int)((char *)this + 20);
v8 = v2;
v9 = 0;
v5 = CDataStore::Strlen((int)((char *)this + 20));
CDataStore::Write6Bits((int)&v8, v5, a2);
CDataStore::FlushBits((int)&v8);
CDataStore::PutInt32(v2, *((_DWORD *)v3 + 4));
v6 = CDataStore::Strlen(v4);
return CDataStore::PutData(v2, v4, v6);
}
```

тут висит PutData - как найти функцию, которая это читает?
xref по этой функции
Amaru вне форума   Ответить с цитированием
Старый 31.07.2015, 12:37   #63
moJIto
Новичок
 
Регистрация: 29.08.2014
Сообщений: 29
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
moJIto На верном пути
По умолчанию

Цитата:
Сообщение от Amaru Посмотреть сообщение
xref по этой функции

сколько не пытался - всё равно не выходит найти... даже брал дебаг билд для проверки - тоже самое...

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

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

Доброго всем времени суток какова сейчас(WoD) структура пакета SMSG_WARDEN_DATA?

Последний раз редактировалось Dubstep; 07.08.2015 в 02:41.
Dubstep вне форума   Ответить с цитированием
Старый 06.08.2015, 23:56   #66
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

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

Цитата:
Сообщение от RomanRom2 Посмотреть сообщение
Dubstep вне форума   Ответить с цитированием
Старый 07.08.2015, 10:44   #68
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Ой, там все очень ...:
build 20338
Код:
int __thiscall sub_60F77E(int this, int a2)
{
  int v2; // esi@1

  v2 = this;
  CDataStore::ReadInt32(a2, *(_DWORD *)(this + 32)); // data length
  return sub_410B02(a2, *(_DWORD *)(v2 + 20), *(_DWORD *)(v2 + 32));
}
Можете посмотреть что там да и как.
__________________
Konctantin вне форума   Ответить с цитированием
Старый 07.08.2015, 13:27   #69
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

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

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

Круто, PutData =\

Да структура, типы проверок, да бы запарсить это дело

Последний раз редактировалось Dubstep; 07.08.2015 в 18:58.
Dubstep вне форума   Ответить с цитированием
Старый 13.08.2015, 04:27   #72
moJIto
Новичок
 
Регистрация: 29.08.2014
Сообщений: 29
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
moJIto На верном пути
По умолчанию

вооот.... я всё имел ввиду - как найти читалку к данным из PutData ?
moJIto вне форума   Ответить с цитированием
Старый 15.08.2015, 16:45   #73
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

Цитата:
Сообщение от moJIto Посмотреть сообщение
вооот.... я всё имел ввиду - как найти читалку к данным из PutData ?
Похоже знающих людей тут не осталось или никто не хочет помочь это печально
Dubstep вне форума   Ответить с цитированием
Старый 15.08.2015, 17:00   #74
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

я например не понял вопрос. что за читалка к данным из PutData?
RomanRom2 вне форума   Ответить с цитированием
Старый 15.08.2015, 22:18   #75
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Экстрасенс мод он
он имеет в виду как найти код, который генерит дату, которая потом суется putdata в пакет
Экстрасенс мод офф

Отвечу - все очень просто! открываем ида, и начинаем искать этот код. Отправная точка - адрес данных, которые суются в putdata
Amaru вне форума   Ответить с цитированием
Старый 16.08.2015, 14:22   #76
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

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

RomanRom2, спасибо, я думаю тут все понимают как это работает.
Но вот подсказать как правильно по ида бегать, было бы хорошо, еще было бы лучше на примере вова.
Dubstep вне форума   Ответить с цитированием
Старый 20.08.2015, 00:36   #78
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

ну как как... в общем виде если, то я бегаю примерно так:
сначала ищу по стрингу вообще какое либо место, где есть мое искомое. нахожу какую то функцию, где оно используется. далее смотрю список откуда эта функция вызывается. бегаю там. по ходу исправляю названия переменных, структур или завожу новые - ида это неплохо умеет делать, самостоятельно детектить. иногда наоборот ошибается. все это исправляю. названия полей в структуре конечно получаются в стиле иды, но если ты знаешь что ищешь, то это не вызывает проблем.

на примере вова не подскажу к сожалению, но принципы имхо те же. по моему в инете так много готовых ида баз каких хочешь версий и настолько разобранных и чуть ли не компилируемых, что это уже тоже не должно вызывать проблем. TOMRUS их тут выкладывал дофига.
RomanRom2 вне форума   Ответить с цитированием
Старый 21.08.2015, 15:35   #79
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

Допустим, я от функции sub_60F77E, в ней лежит PutData, теоретически я могу просмотреть полное древо вызова ее?

ps TOM_RUS уже к сожалению свои базы не выкладывает (
Dubstep вне форума   Ответить с цитированием
Старый 21.11.2015, 18:37   #80
Dubstep
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 71
Сказал(а) спасибо: 22
Поблагодарили 0 раз(а) в 0 сообщениях
Dubstep На верном пути
По умолчанию

доброго времени суток.

Такой вопрос есть функция JAMClientDispatch в ней дикий кейз http://pastebin.com/DDTYQyME (622)
Как я понимаю туда приходит опкод, мы его магически преобразуем до v8

далее v8 пускаем через ифы и получаем нужный хэндлер? JAM все smsg?

ps. Есть у кого нормальный IDA ? Текущий крашится при попытке диззамблить.
Dubstep вне форума   Ответить с цитированием
Ответ


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

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:47. Часовой пояс GMT +3.


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