Показать сообщение отдельно
Старый 25.06.2012, 14:45   #16
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Разве обработчик не
Код:
v9 - ((v6 | (v6 << 16)) ^ 0x62A3A31D)
где v9 зашифрованный оффсет, v6 - номер опкода
?

Код:
char __thiscall NetClient::ProcessMessage(ClientConnection *this, int a2, int opcode, int a4)
{
  CDataStore *data; // ebx@1
  ClientConnection *_this; // edi@1
  unsigned int op; // esi@1
  char result; // al@2
  unsigned int condensedId; // eax@3
  void *jamOffs; // ecx@6

  ++dword_D36C28;
  data = opcode;
  _this = this;
  CDataStore::GetInt16(opcode, &opcode);
  op = opcode;
  if ( (opcode & 0x2399) == 0x301 )
  {
    result = NetClient::JAMClientDispatch(_this, 0, a2, opcode, data);
  }
  else
  {
    (*(_this->vTable + 18))(_this, opcode);
    condensedId = op & 1 | ((op & 0x1C | (((op & 0xC0) | ((op & 0x1C00 | (op >> 1) & 0x6000) >> 2)) >> 1)) >> 1);
    if ( (op & 0x2322) == 0x2222 && op != 0xE23F && op != 0x662F && (jamOffs = _this->Handlers[condensedId]) != 0 )
      result = ((jamOffs - ((op | (op << 16)) ^ 0x62A3A31D)))(_this->HandlersState[condensedId], op, a2, data);
    else
      result = data->vTable->IsRead(data);
  }
  return result;
}

Последний раз редактировалось TOM_RUS; 25.06.2012 в 14:56.
TOM_RUS вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Amaru (25.06.2012)