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;
/* ........................................................ */