奇迹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);
}

本文出自 7j45 > 奇迹一条龙