奇迹S6 Ep2封包加密解密C++逆向源码
char __fastcall sub_519570(int a1)
{
char v1; // al@1
char v2; // al@2
char v3; // al@3
v1 = *(_BYTE *)a1 + 63;
if ( !v1 )
return 2;
v2 = v1 - 1;
if ( v2 )
{
v3 = v2 - 1;
if ( v3 )
{
if ( v3 != 1 )
return 0;
return 3;
}
return 2;
}
return 3;
}
int __fastcall sub_519594(int a1)
{
int v1; // ebx@1
char v2; // al@1
char v3; // al@2
char v4; // al@3
int v5; // edx@7
v1 = a1;
v2 = sub_519590() + 63;
if ( !v2 )
return *(_BYTE *)(v1 + 1);
v3 = v2 - 1;
if ( v3 )
{
v4 = v3 - 1;
if ( v4 )
{
if ( v4 != 1 )
return 0;
goto LABEL_7;
}
return *(_BYTE *)(v1 + 1);
}
LABEL_7:
v5 = *(_BYTE *)(v1 + 1) << 8;
LOWORD(v5) = *(_BYTE *)(v1 + 2) + (_WORD)v5;
return v5;
}
__int16 __fastcall sub_5195D4(int a1)
{
int v1; // ebx@1
__int16 v2; // ST00_2@1
v1 = a1;
v2 = sub_519594(a1);
return v2 - (unsigned __int8)sub_519570(v1);
}
int __fastcall sub_519654(int result, int a2, int a3)
{
int i; // edx@1
for ( i = a2 - 1; i > 0; --i )
*(_BYTE *)(i + result) ^= byte_526658[(a3 + i) % 32] ^ *(_BYTE *)(result + i - 1);
return result;
}
//sub_519690
int __fastcall MU_Decode32(void * a1)
{
int v1; // esi@1
char v2; // bl@1
__int16 v3; // ax@1
v1 = a1;
v2 = sub_519570(a1);
v3 = sub_5195D4(v1);
return sub_519654(v1 + (unsigned __int8)v2 + 1, (unsigned __int16)v3, (unsigned __int8)v2);
}