Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- signed int __cdecl sub_156EBC0(unsigned __int8 **a1, int a2)
- {
- unsigned int *v2; // eax
- unsigned int v3; // eax
- signed int v4; // ebx
- signed int v5; // edi
- unsigned __int8 *v6; // eax
- int v7; // ecx
- unsigned __int8 *v8; // ecx
- unsigned __int8 *v9; // eax
- unsigned __int8 *v10; // ecx
- int v11; // edx
- signed int v12; // eax
- unsigned __int8 *v13; // eax
- unsigned __int8 *v14; // eax
- unsigned __int8 *v15; // eax
- unsigned __int8 *v16; // eax
- unsigned __int8 *v17; // ecx
- unsigned __int8 *v18; // eax
- unsigned __int8 *v19; // eax
- unsigned __int8 *v20; // ecx
- unsigned __int8 *v21; // eax
- unsigned __int8 *v22; // eax
- unsigned __int8 *v23; // ecx
- unsigned __int8 *v24; // ecx
- signed int result; // eax
- unsigned __int8 *v26; // eax
- unsigned __int8 *v27; // eax
- unsigned __int8 *v28; // eax
- unsigned __int8 *v29; // ecx
- unsigned __int8 *v30; // eax
- unsigned __int8 *v31; // eax
- unsigned __int8 *v32; // ecx
- unsigned __int8 *v33; // eax
- unsigned __int8 *v34; // eax
- unsigned __int8 *v35; // ecx
- unsigned __int8 *v36; // ecx
- unsigned __int8 *v37; // eax
- if ( !a1 )
- return -2;
- v2 = (unsigned int *)a1[7];
- if ( !v2 || !*a1 )
- return -2;
- v3 = *v2;
- v4 = 0;
- if ( a2 == 4 )
- v4 = -5;
- v5 = -5;
- while ( 2 )
- {
- switch ( v3 )
- {
- case 0u:
- v6 = a1[1];
- if ( !v6 )
- return v5;
- ++a1[2];
- a1[1] = v6 - 1;
- v5 = v4;
- v7 = **a1;
- *((_DWORD *)a1[7] + 1) = v7;
- ++*a1;
- if ( (v7 & 0xF) != 8 )
- {
- *(_DWORD *)a1[7] = 13;
- a1[6] = "unknown compression method";
- goto LABEL_36;
- }
- v8 = a1[7];
- if ( (unsigned int)((*((_DWORD *)v8 + 1) >> 4) + 8) > *((_DWORD *)v8 + 4) )
- {
- *(_DWORD *)v8 = 13;
- a1[6] = "invalid window size";
- goto LABEL_36;
- }
- *(_DWORD *)v8 = 1;
- goto LABEL_14;
- case 1u:
- LABEL_14:
- v9 = a1[1];
- if ( !v9 )
- return v5;
- ++a1[2];
- v10 = a1[7];
- v5 = v4;
- a1[1] = v9 - 1;
- v11 = *(*a1)++;
- if ( (v11 + (*((_DWORD *)v10 + 1) << 8)) % 0x1Fu )
- {
- *(_DWORD *)v10 = 13;
- a1[6] = "incorrect header check";
- LABEL_36:
- *((_DWORD *)a1[7] + 1) = 5;
- LABEL_37:
- v3 = *(_DWORD *)a1[7];
- if ( v3 > 0xD )
- return -2;
- continue;
- }
- if ( !(v11 & 0x20) )
- {
- *(_DWORD *)v10 = 7;
- goto LABEL_37;
- }
- *(_DWORD *)a1[7] = 2;
- LABEL_40:
- v26 = a1[1];
- if ( !v26 )
- return v5;
- ++a1[2];
- a1[1] = v26 - 1;
- v5 = v4;
- *((_DWORD *)a1[7] + 2) = **a1 << 24;
- v27 = a1[7];
- ++*a1;
- *(_DWORD *)v27 = 3;
- LABEL_42:
- v28 = a1[1];
- if ( !v28 )
- return v5;
- ++a1[2];
- v29 = a1[7];
- v5 = v4;
- a1[1] = v28 - 1;
- *((_DWORD *)v29 + 2) += **a1 << 16;
- v30 = a1[7];
- ++*a1;
- *(_DWORD *)v30 = 4;
- LABEL_44:
- v31 = a1[1];
- if ( !v31 )
- return v5;
- ++a1[2];
- v32 = a1[7];
- v5 = v4;
- a1[1] = v31 - 1;
- *((_DWORD *)v32 + 2) += **a1 << 8;
- v33 = a1[7];
- ++*a1;
- *(_DWORD *)v33 = 5;
- LABEL_46:
- v34 = a1[1];
- if ( !v34 )
- return v5;
- ++a1[2];
- v35 = a1[7];
- a1[1] = v34 - 1;
- *((_DWORD *)v35 + 2) += **a1;
- v36 = a1[7];
- ++*a1;
- a1[12] = (unsigned __int8 *)*((_DWORD *)v36 + 2);
- result = 2;
- *(_DWORD *)v36 = 6;
- return result;
- case 2u:
- goto LABEL_40;
- case 3u:
- goto LABEL_42;
- case 4u:
- goto LABEL_44;
- case 5u:
- goto LABEL_46;
- case 6u:
- *(_DWORD *)a1[7] = 13;
- v37 = a1[7];
- a1[6] = "need dictionary";
- *((_DWORD *)v37 + 1) = 0;
- return -2;
- case 7u:
- v12 = sub_156F120(*((_DWORD *)a1[7] + 5), a1, v5);
- v5 = v12;
- if ( v12 == -3 )
- {
- *(_DWORD *)a1[7] = 13;
- *((_DWORD *)a1[7] + 1) = 0;
- goto LABEL_37;
- }
- if ( !v12 )
- v5 = v4;
- if ( v5 != 1 )
- return v5;
- v5 = v4;
- sub_156FB90(*((_DWORD *)a1[7] + 5), a1, a1[7] + 4);
- v13 = a1[7];
- if ( *((_DWORD *)v13 + 3) )
- {
- *(_DWORD *)v13 = 12;
- goto LABEL_37;
- }
- *(_DWORD *)v13 = 8;
- LABEL_27:
- v14 = a1[1];
- if ( !v14 )
- return v5;
- ++a1[2];
- a1[1] = v14 - 1;
- v5 = v4;
- *((_DWORD *)a1[7] + 2) = **a1 << 24;
- v15 = a1[7];
- ++*a1;
- *(_DWORD *)v15 = 9;
- LABEL_29:
- v16 = a1[1];
- if ( !v16 )
- return v5;
- ++a1[2];
- v17 = a1[7];
- v5 = v4;
- a1[1] = v16 - 1;
- *((_DWORD *)v17 + 2) += **a1 << 16;
- v18 = a1[7];
- ++*a1;
- *(_DWORD *)v18 = 10;
- LABEL_31:
- v19 = a1[1];
- if ( !v19 )
- return v5;
- ++a1[2];
- v20 = a1[7];
- v5 = v4;
- a1[1] = v19 - 1;
- *((_DWORD *)v20 + 2) += **a1 << 8;
- v21 = a1[7];
- ++*a1;
- *(_DWORD *)v21 = 11;
- LABEL_33:
- v22 = a1[1];
- if ( !v22 )
- return v5;
- ++a1[2];
- v23 = a1[7];
- v5 = v4;
- a1[1] = v22 - 1;
- *((_DWORD *)v23 + 2) += **a1;
- v24 = a1[7];
- ++*a1;
- if ( *((_DWORD *)v24 + 1) == *((_DWORD *)v24 + 2) )
- {
- *(_DWORD *)a1[7] = 12;
- return 1;
- }
- *(_DWORD *)v24 = 13;
- a1[6] = "incorrect data check";
- goto LABEL_36;
- case 8u:
- goto LABEL_27;
- case 9u:
- goto LABEL_29;
- case 0xAu:
- goto LABEL_31;
- case 0xBu:
- goto LABEL_33;
- case 0xCu:
- return 1;
- case 0xDu:
- return -3;
- }
- }
- }
Add Comment
Please, Sign In to add comment