Показать сообщение отдельно
Старый 18.09.2009, 01:04   #7
Пользователь
 
Регистрация: 03.11.2008
Сообщений: 60
Сказал Спасибо: 3
Имеет 107 спасибок в 21 сообщенях
GoldFinch пока неопределено
По умолчанию

xkor, я реверсил европейский клиент
48 - id пакета - забито хардкодом в клиент

Код:
char __stdcall DispatchRecv(int a1)
{
/* ........................................................ */
  if ( dword_1833CA48 )
    return 0;
  v2 = a1;
  id = *(_BYTE *)(a1 + 12);
  if ( id <= (signed int)0xC7u )
  {
    if ( id != 0xC7 )
    {
      switch ( id )
      {
        case 0x48:
          v3 = "S_KEY";
          goto doLogPacketName;
        case 0:
          v3 = "S_VERSION_CHECK";
          goto doLogPacketName;
        case 0xD:
          v3 = "S_ENTER_WORLD_CHECK";
          goto doLogPacketName;
        case 0x17:
          v3 = "S_WAIT_LIST";
          goto doLogPacketName;
        default:
          goto processpacket;
      }
      goto processpacket;
    }
    v3 = "S_L2AUTH_LOGIN_CHECK";
    goto doLogPacketName;
  }
  v4 = id - 0xC8;
  if ( !v4 )
  {
    v3 = "S_CHARACTER_LIST";
    goto doLogPacketName;
  }
  v5 = v4 - 0x1C;
  if ( !v5 )
  {
    v3 = "S_VIRTUAL_AUTH";
    goto doLogPacketName;
  }
  if ( v5 == 27 )
  {
    v3 = "S_RECONNECT_KEY";
doLogPacketName:
    sprintf(&Dest, "[game] recv packet: %s", v3);
    (*(int (__cdecl **)(int, char *))(*(_DWORD *)g_LoggerObj + 8))(g_LoggerObj, &Dest);
  }
processpacket:
  switch ( *(_BYTE *)(v2 + 12) )
  {
    case 0:                                                     // VERSION_CHECK
      OnVersionCheck();
      dword_1833CA58 = dword_17DEA158();
      return 1;
    case 0xC7:                                                  // L2AUTH_LOGIN_CHECK
      OnL2AuthLoginCheck();
      dword_1833CA58 = dword_17DEA158();
      return 1;
    case 0xE4:                                                  // VIRTUAL_AUTH
      OnVirtualAuth();
      dword_1833CA58 = dword_17DEA158();
      return 1;
    case 0xFF:
      sub_17A76D00(
        *(_BYTE *)(*(_DWORD *)(v2 + 16) + *(_DWORD *)(v2 + 20)),
        *(_DWORD *)(*(_DWORD *)(v2 + 16) + *(_DWORD *)(v2 + 20) + 1));
      dword_1833CA58 = dword_17DEA158();
      return 1;
    case 0xC8:                                                  // CHARACTER_LIST
      OnCharacterList();
      dword_1833CA58 = dword_17DEA158();
      return 1;
    case 0xD:                                                   // ENTER_WORLD_CHECK
      OnEnterWorldChaeck();
      dword_1833CA58 = dword_17DEA158();
      return 1;
/* ........................................................ */
    case 0x48:                                                  // S_KEY packet
      OnKeyRecv((*(_DWORD *)(*(_DWORD *)(v2 + 20) + *(_DWORD *)(v2 + 16)) - 1072876679) ^ 0xCD92E451);
      dword_1833CA58 = dword_17DEA158();
      return 1;
/* ........................................................ */
GoldFinch вне форума   Ответить с цитированием
За это сообщение GoldFinch нажился 4 спасибками от: