Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int __fastcall decBufferV3(int a1)
- {
- _BYTE *lpBuffer; // r7
- unsigned int v3; // r8
- int result; // r0
- char v5; // r11
- _BYTE *v6; // r2
- _BYTE *v7; // r3
- int v8; // r9
- int v9; // r2
- void *v10; // r6
- void *v11; // r0
- unsigned int v12; // r4
- signed int v13; // r8
- char *v14; // r4
- int v15; // r3
- int v16; // r10
- int v17; // r3
- int v18; // r0
- int v19; // r0
- _BOOL4 v20; // r4
- unsigned int *v21; // r2
- int v22; // r3
- void *v23; // r6
- char v24[4]; // [sp+8h] [bp-240h] BYREF
- char v25[4]; // [sp+Ch] [bp-23Ch] BYREF
- int v26; // [sp+10h] [bp-238h] BYREF
- char v27[264]; // [sp+14h] [bp-234h] BYREF
- char v28[128]; // [sp+11Ch] [bp-12Ch] BYREF
- char v29[128]; // [sp+19Ch] [bp-ACh] BYREF
- if ( !a1 )
- return 0;
- lpBuffer = (_BYTE *)(*(int (__fastcall **)(int))(*(_DWORD *)a1 + 16))(a1);
- if ( !lpBuffer )
- return 0;
- v3 = (*(int (__fastcall **)(int))(*(_DWORD *)a1 + 12))(a1);
- if ( v3 <= 4 || memcmp(&byte_AA108C, lpBuffer, 4u) )
- return 1;
- v5 = lpBuffer[4];
- if ( (v5 & 1) == 0 )
- {
- v12 = 5;
- v8 = 0;
- goto LABEL_23;
- }
- if ( v3 == 5 )
- return 0;
- v6 = &lpBuffer[v3];
- if ( lpBuffer + 5 >= &lpBuffer[v3] )
- goto LABEL_40;
- v7 = lpBuffer + 6;
- v8 = lpBuffer[5] & 0x7F;
- if ( (lpBuffer[5] & 0x80) != 0 )
- {
- if ( v7 >= v6 )
- goto LABEL_40;
- v7 = lpBuffer + 7;
- v8 |= (lpBuffer[6] & 0x7F) << 7;
- if ( (lpBuffer[6] & 0x80) != 0 )
- {
- if ( v6 <= v7 )
- goto LABEL_40;
- v7 = lpBuffer + 8;
- v8 |= (lpBuffer[7] & 0x7F) << 14;
- if ( (lpBuffer[7] & 0x80) != 0 )
- {
- if ( v7 >= v6 )
- goto LABEL_40;
- v7 = lpBuffer + 9;
- v8 |= (lpBuffer[8] & 0x7F) << 21;
- if ( (lpBuffer[8] & 0x80) != 0 )
- {
- if ( v6 > v7 )
- {
- v9 = (unsigned __int8)lpBuffer[9];
- v7 = lpBuffer + 10;
- v8 |= v9 << 28;
- if ( (v9 & 0x80) != 0 )
- {
- v10 = _cxa_allocate_exception(8u);
- sub_961E88((int)&v26, "Format_Bad7BitInt32", (int)v25);
- ((void (__fastcall *)(void *, int *))sub_951AA4)(v10, &v26);
- v11 = (void *)(v26 - 12);
- if ( (int *)(v26 - 12) != &dword_BDCD20 )
- {
- if ( &pthread_create )
- {
- v21 = (unsigned int *)(v26 - 4);
- __dmb(0xFu);
- do
- v22 = __ldrex(v21);
- while ( __strex(v22 - 1, v21) );
- __dmb(0xFu);
- }
- else
- {
- v22 = *(_DWORD *)(v26 - 4);
- *(_DWORD *)(v26 - 4) = v22 - 1;
- }
- if ( v22 <= 0 )
- operator delete(v11);
- }
- _cxa_throw(
- v10,
- (struct type_info *)&`typeinfo for'std::logic_error,
- (void (__fastcall *)(void *))sub_951258);
- }
- goto LABEL_32;
- }
- LABEL_40:
- v23 = _cxa_allocate_exception(8u);
- sub_961E88((int)&v26, "ibstream_view::consume out of range!", (int)v25);
- sub_951B58(v23, &v26);
- if ( (int *)(v26 - 12) != &dword_BDCD20 )
- sub_2A24E8(v26 - 12, v24);
- _cxa_throw(v23, (struct type_info *)&`typeinfo for'std::out_of_range, (void (__fastcall *)(void *))sub_9515F8);
- }
- }
- }
- }
- LABEL_32:
- v12 = v7 - lpBuffer;
- LABEL_23:
- if ( v12 >= v3 )
- return 0;
- v13 = v3 - v12;
- av_rc4_init((int)v27, (int)&byte_AA1090, 0x50);
- v14 = &lpBuffer[v12];
- v15 = v13;
- if ( (v5 & 2) != 0 && v13 >= 128 )
- v15 = 128;
- av_rc4_crypt((int)v27, v14, v14, v15);
- if ( (v5 & 1) != 0 )
- {
- v16 = (*(int (__fastcall **)(int, char *, char *))(*(_DWORD *)a1 + 24))(a1, v28, v29);
- (*(void (__fastcall **)(int, int))(*(_DWORD *)v16 + 8))(v16, v8);
- v17 = *(_DWORD *)v16;
- v26 = v8;
- v18 = (*(int (__fastcall **)(int))(v17 + 16))(v16);
- v19 = uncompress(v18, &v26, v14, v13);
- v20 = v19 == 0;
- if ( v19 )
- {
- result = 0;
- }
- else
- {
- (*(void (__fastcall **)(int, int))(*(_DWORD *)a1 + 20))(a1, v16);
- (*(void (__fastcall **)(int, int))(*(_DWORD *)a1 + 28))(a1, v16);
- result = v20;
- }
- }
- else
- {
- memmove(lpBuffer, v14, v13);
- (*(void (__fastcall **)(int, signed int))(*(_DWORD *)a1 + 8))(a1, v13);
- result = 1;
- }
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment