А не, туплю как говорится смотрю в книгу и вижу [censored].
Прошу прощения, но оказывается изменился обработчик клиентских сообщений.
Сначала идут 4 байта, которые пропускаются:
Код:
void __fastcall sub_140476990(__int64 a1, __int64 a2, unsigned int a3)
{
__int64 v3; // rsi@1
__int64 v4; // rbx@1
int v5; // edi@1
__int64 v6; // [sp+20h] [bp-28h]@1
__int64 v7; // [sp+28h] [bp-20h]@1
__int64 v8; // [sp+30h] [bp-18h]@1
int v9; // [sp+38h] [bp-10h]@1
int v10; // [sp+3Ch] [bp-Ch]@1
v3 = a1;
v4 = a2;
v7 = 0i64;
v8 = 0i64;
v6 = (__int64)off_140F06120;
v9 = 0;
v10 = -1;
v5 = a3;
CDataStore::GetInt32((__int64)&v6, 0); // вот тут пропускается 4 байта
(*(void (__fastcall **)(__int64, __int64 *))(*(_QWORD *)v4 + 16i64))(v4, &v6);
v10 = 4;
sub_1404767C0(v3, (__int64)&v6, v5);
v6 = (__int64)off_140F06120;
if ( HIDWORD(v8) != -1 )
sub_140019BC0((__int64)&v6, (__int64)&v7, (__int64)&v8, (__int64)((char *)&v8 + 4));
}
а сам опкод теперь 2 байта:
Код:
void __fastcall sub_1404767C0(__int64 a1, __int64 a2, int a3)
{
__int64 v3; // rbx@1
int v4; // er13@1
__int64 v5; // rdi@1
int v6; // ebp@2
int v7; // er12@2
int v8; // ebp@4
unsigned int v9; // eax@5
int v10; // er15@14
unsigned int v11; // er14@14
__int64 v12; // rdi@14
__int64 v13; // rax@14
__int64 v14; // rax@15
__int64 v15; // rdi@15
__int64 v16; // rbp@17
unsigned __int16 v17; // [sp+70h] [bp+8h]@5
__int64 v18; // [sp+88h] [bp+20h]@14
v3 = a1;
v4 = a3;
v5 = a2;
EnterCriticalSection((LPCRITICAL_SECTION)(a1 + 144));
if ( *(_DWORD *)(v3 + 184) == 5 )
{
v6 = *(_DWORD *)(v5 + 28);
v7 = *(_DWORD *)(v5 + 24) - v6;
if ( *(_DWORD *)(v5 + 24) != v6 )
{
if ( v4 == 2 )
{
v17 = 0;
CDataStore::GetInt16(v5, (__int64)&v17);// opcode
v9 = v17;
*(_DWORD *)(v5 + 28) = v6;
v8 = v17 >= 0x30D4u && v9 < 0x327D
|| v9 >= 0x33F4 && v9 < 0x34B0
|| v9 >= 0x3912 && v9 < 0x391E
|| v9 - 14690 <= 0x54;
}