Guest User

Untitled

a guest
Mar 17th, 2021
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.51 KB | None | 0 0
  1. int __fastcall decBufferV3(int a1)
  2. {
  3.   _BYTE *lpBuffer; // r7
  4.   unsigned int v3; // r8
  5.   int result; // r0
  6.   char v5; // r11
  7.   _BYTE *v6; // r2
  8.   _BYTE *v7; // r3
  9.   int v8; // r9
  10.   int v9; // r2
  11.   void *v10; // r6
  12.   void *v11; // r0
  13.   unsigned int v12; // r4
  14.   signed int v13; // r8
  15.   char *v14; // r4
  16.   int v15; // r3
  17.   int v16; // r10
  18.   int v17; // r3
  19.   int v18; // r0
  20.   int v19; // r0
  21.   _BOOL4 v20; // r4
  22.   unsigned int *v21; // r2
  23.   int v22; // r3
  24.   void *v23; // r6
  25.   char v24[4]; // [sp+8h] [bp-240h] BYREF
  26.   char v25[4]; // [sp+Ch] [bp-23Ch] BYREF
  27.   int v26; // [sp+10h] [bp-238h] BYREF
  28.   char v27[264]; // [sp+14h] [bp-234h] BYREF
  29.   char v28[128]; // [sp+11Ch] [bp-12Ch] BYREF
  30.   char v29[128]; // [sp+19Ch] [bp-ACh] BYREF
  31.  
  32.   if ( !a1 )
  33.     return 0;
  34.   lpBuffer = (_BYTE *)(*(int (__fastcall **)(int))(*(_DWORD *)a1 + 16))(a1);
  35.   if ( !lpBuffer )
  36.     return 0;
  37.   v3 = (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 12))(a1);
  38.   if ( v3 <= 4 || memcmp(&byte_AA108C, lpBuffer, 4u) )
  39.     return 1;
  40.   v5 = lpBuffer[4];
  41.   if ( (v5 & 1) == 0 )
  42.   {
  43.     v12 = 5;
  44.     v8 = 0;
  45.     goto LABEL_23;
  46.   }
  47.   if ( v3 == 5 )
  48.     return 0;
  49.   v6 = &lpBuffer[v3];
  50.   if ( lpBuffer + 5 >= &lpBuffer[v3] )
  51.     goto LABEL_40;
  52.   v7 = lpBuffer + 6;
  53.   v8 = lpBuffer[5] & 0x7F;
  54.   if ( (lpBuffer[5] & 0x80) != 0 )
  55.   {
  56.     if ( v7 >= v6 )
  57.       goto LABEL_40;
  58.     v7 = lpBuffer + 7;
  59.     v8 |= (lpBuffer[6] & 0x7F) << 7;
  60.     if ( (lpBuffer[6] & 0x80) != 0 )
  61.     {
  62.       if ( v6 <= v7 )
  63.         goto LABEL_40;
  64.       v7 = lpBuffer + 8;
  65.       v8 |= (lpBuffer[7] & 0x7F) << 14;
  66.       if ( (lpBuffer[7] & 0x80) != 0 )
  67.       {
  68.         if ( v7 >= v6 )
  69.           goto LABEL_40;
  70.         v7 = lpBuffer + 9;
  71.         v8 |= (lpBuffer[8] & 0x7F) << 21;
  72.         if ( (lpBuffer[8] & 0x80) != 0 )
  73.         {
  74.           if ( v6 > v7 )
  75.           {
  76.             v9 = (unsigned __int8)lpBuffer[9];
  77.             v7 = lpBuffer + 10;
  78.             v8 |= v9 << 28;
  79.             if ( (v9 & 0x80) != 0 )
  80.             {
  81.               v10 = _cxa_allocate_exception(8u);
  82.               sub_961E88((int)&v26, "Format_Bad7BitInt32", (int)v25);
  83.               ((void (__fastcall *)(void *, int *))sub_951AA4)(v10, &v26);
  84.               v11 = (void *)(v26 - 12);
  85.               if ( (int *)(v26 - 12) != &dword_BDCD20 )
  86.               {
  87.                 if ( &pthread_create )
  88.                 {
  89.                   v21 = (unsigned int *)(v26 - 4);
  90.                   __dmb(0xFu);
  91.                   do
  92.                     v22 = __ldrex(v21);
  93.                   while ( __strex(v22 - 1, v21) );
  94.                   __dmb(0xFu);
  95.                 }
  96.                 else
  97.                 {
  98.                   v22 = *(_DWORD *)(v26 - 4);
  99.                   *(_DWORD *)(v26 - 4) = v22 - 1;
  100.                 }
  101.                 if ( v22 <= 0 )
  102.                   operator delete(v11);
  103.               }
  104.               _cxa_throw(
  105.                 v10,
  106.                 (struct type_info *)&`typeinfo for'std::logic_error,
  107.                (void (__fastcall *)(void *))sub_951258);
  108.            }
  109.            goto LABEL_32;
  110.          }
  111. LABEL_40:
  112.          v23 = _cxa_allocate_exception(8u);
  113.          sub_961E88((int)&v26, "ibstream_view::consume out of range!", (int)v25);
  114.          sub_951B58(v23, &v26);
  115.          if ( (int *)(v26 - 12) != &dword_BDCD20 )
  116.            sub_2A24E8(v26 - 12, v24);
  117.          _cxa_throw(v23, (struct type_info *)&`typeinfo for'std::out_of_range, (void (__fastcall *)(void *))sub_9515F8);
  118.         }
  119.       }
  120.     }
  121.   }
  122. LABEL_32:
  123.   v12 = v7 - lpBuffer;
  124. LABEL_23:
  125.   if ( v12 >= v3 )
  126.     return 0;
  127.   v13 = v3 - v12;
  128.   av_rc4_init((int)v27, (int)&byte_AA1090, 0x50);
  129.   v14 = &lpBuffer[v12];
  130.   v15 = v13;
  131.   if ( (v5 & 2) != 0 && v13 >= 128 )
  132.     v15 = 128;
  133.   av_rc4_crypt((int)v27, v14, v14, v15);
  134.   if ( (v5 & 1) != 0 )
  135.   {
  136.     v16 = (*(int (__fastcall **)(int, char *, char *))(*(_DWORD *)a1 + 24))(a1, v28, v29);
  137.     (*(void (__fastcall **)(int, int))(*(_DWORD *)v16 + 8))(v16, v8);
  138.     v17 = *(_DWORD *)v16;
  139.     v26 = v8;
  140.     v18 = (*(int (__fastcall **)(int))(v17 + 16))(v16);
  141.     v19 = uncompress(v18, &v26, v14, v13);
  142.     v20 = v19 == 0;
  143.     if ( v19 )
  144.     {
  145.       result = 0;
  146.     }
  147.     else
  148.     {
  149.       (*(void (__fastcall **)(int, int))(*(_DWORD *)a1 + 20))(a1, v16);
  150.       (*(void (__fastcall **)(int, int))(*(_DWORD *)a1 + 28))(a1, v16);
  151.       result = v20;
  152.     }
  153.   }
  154.   else
  155.   {
  156.     memmove(lpBuffer, v14, v13);
  157.     (*(void (__fastcall **)(int, signed int))(*(_DWORD *)a1 + 8))(a1, v13);
  158.     result = 1;
  159.   }
  160.   return result;
  161. }
Advertisement
Add Comment
Please, Sign In to add comment