
Originally Posted by
MemoryThePast
yes, it's part of s2s function and you need to hook it plus if you can't see it you need to use Class Informer with IDA to see it.
This is the function in GAMEPROTO_CS_CLIENTFIRE, but when I skip the check part in code, I get client error wrong information 2_5. Can you point me how to bypass 22_11. Thanks.
bool __fastcall sub_7FFCB042FEB0(__int64 a1, __int64 a2)
{
__int64 v4; // rdx
__int64 v5; // rbp
__int64 v6; // rbx
__int64 v7; // r14
int v8; // r13d
__int64 v9; // r12
int i; // r15d
bool v11; // zf
char v12; // al
int v14; // [rsp+48h] [rbp-50h] BYREF
__int16 v15; // [rsp+4Ch] [rbp-4Ch]
*(_BYTE *)(a1 + 12) = (16 * *(_BYTE *)(a1 + 12)) | (*(char *)(a1 + 12) >> 4) & 0xF;
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 24), 5);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, (unsigned int)*(char *)(a1 + 12), 8);
MEMORY[0x7FFDDB0BC0F0](&v14);
v4 = *(unsigned __int8 *)(a1 + 32);
*(_DWORD *)(a1 + 1660) = v14;
*(_WORD *)(a1 + 1664) = v15;
(*(void (__fastcall **)(__int64, __int64, __int64))(*(_QWORD *)a2 + 72LL))(a2, v4, 8);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned __int8 *)(a1 + 1353), 8);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 2140), 32);
v5 = 0;
(*(void (__fastcall **)(__int64, bool, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(_BYTE *)(a1 + 1657) != 0, 1);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 1660), 32);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 80LL))(a2, *(_QWORD *)(a1 + 1640), 64);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 2148), 32);
(*(void (__fastcall **)(__int64, bool, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(_BYTE *)(a1 + 1658) != 0, 1);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 1672), 32);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(
a2,
(unsigned int)*(__int16 *)(a1 + 1632),
16);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 2136), 32);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 2144), 32);
(*(void (__fastcall **)(__int64, __int64, __int64))(*(_QWORD *)a2 + 96LL))(a2, a1 + 1368, 128);
(*(void (__fastcall **)(__int64, bool, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(_BYTE *)(a1 + 1352) != 0, 1);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 80LL))(a2, *(_QWORD *)(a1 + 2168), 64);
(*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)a2 + 136LL))(a2, a1 + 48);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 1668), 32);
(*(void (__fastcall **)(__int64, bool, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(_BYTE *)(a1 + 1364) != 0, 1);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 2156), 32);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 1636), 32);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 1624), 32);
(*(void (__fastcall **)(__int64, bool, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(_BYTE *)(a1 + 1635) != 0, 1);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 1620), 32);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned __int8 *)(a1 + 1612), 8);
v6 = *(_QWORD *)(a1 + 1680);
(*(void (__fastcall **)(__int64, __int64, __int64))(*(_QWORD *)a2 + 72LL))(a2, 1684300900, 32);
(*(void (__fastcall **)(__int64, __int64, __int64))(*(_QWORD *)a2 + 80LL))(a2, v6, 64);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 2160), 32);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 1616), 32);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, (unsigned int)*(__int16 *)(a1 + 34), 16);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned __int16 *)(a1 + 1358), 16);
v7 = a1 + 1320;
v8 = 0;
v9 = 0;
do
{
if ( v8 >= *(unsigned __int8 *)(a1 + 32) )
break;
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned __int8 *)(v9 + a1 + 60), 8);
for ( i = 0; i < 4; ++i )
{
if ( i >= *(unsigned __int8 *)(v9 + a1 + 60) )
break;
(*(void (__fastcall **)(__int64, __int64, __int64))(*(_QWORD *)a2 + 96LL))(a2, a1 + 68 + 12 * (i + 4LL * v8), 96);
(*(void (__fastcall **)(__int64, __int64, __int64))(*(_QWORD *)a2 + 96LL))(
a2,
a1 + 1688 + 12 * (i + 4LL * v8),
96);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(
a2,
*(unsigned __int16 *)(a1 + 2 * (v5 + v7 + -724 - a1)),
16);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(
a2,
*(unsigned __int16 *)(a1 + 2 * (v5 + v7 + -756 - a1)),
16);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(
a2,
*(unsigned __int16 *)(a1 + 2 * (v5 + v7 + -284 - a1)),
16);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(
a2,
*(unsigned __int8 *)(v7 + v5 - 484),
8);
(*(void (__fastcall **)(__int64, _QWORD))(*(_QWORD *)a2 + 192LL))(
a2,
*(_QWORD *)(a1 + 8 * (v5 + v7 + -1211 - a1)));
(*(void (__fastcall **)(__int64, bool, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(_BYTE *)(v7 + v5) != 0, 1);
(*(void (__fastcall **)(__int64, __int64))(*(_QWORD *)a2 + 136LL))(a2, a1 + 452 + 12 * (i + 4LL * v8));
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(
a2,
(unsigned int)*(__int16 *)(a1 + 2 * (v5 + v7 + -692 - a1)),
16);
++v5;
}
++v8;
++v9;
v7 += 4;
v5 = 0;
}
while ( v8 < 8 );
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned __int8 *)(a1 + 1613), 8);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 1648), 32);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 1360), 32);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned __int16 *)(a1 + 1664), 16);
(*(void (__fastcall **)(__int64, bool, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(_BYTE *)(a1 + 1634) != 0, 1);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned __int16 *)(a1 + 1356), 16);
(*(void (__fastcall **)(__int64, bool, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(_BYTE *)(a1 + 1656) != 0, 1);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 1628), 32);
LOBYTE(v5) = *(_BYTE *)(a1 + 1354) != 0;
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, (unsigned int)v5, 1);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 1652), 32);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(a2, *(unsigned int *)(a1 + 2152), 32);
(*(void (__fastcall **)(__int64, __int64, __int64))(*(_QWORD *)a2 + 96LL))(a2, a1 + 36, 96);
v11 = *(_DWORD *)(a1 + 16) == 0;
*(_BYTE *)(a1 + 13) = *(_BYTE *)(a1 + 34);
if ( !v11 )
{
v12 = (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a2 + 64LL))(a2);
(*(void (__fastcall **)(__int64, _QWORD, __int64))(*(_QWORD *)a2 + 72LL))(
a2,
(unsigned int)(char)(v12 * (*(_BYTE *)(a1 + 12) + *(_BYTE *)(a1 + 13))),
8);
}
return *(_DWORD *)(a1 + 8) != 0;
}