Guest User

Untitled

a guest
Nov 13th, 2020
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.10 KB | None | 0 0
  1. signed int __cdecl sub_156EBC0(unsigned __int8 **a1, int a2)
  2. {
  3.   unsigned int *v2; // eax
  4.   unsigned int v3; // eax
  5.   signed int v4; // ebx
  6.   signed int v5; // edi
  7.   unsigned __int8 *v6; // eax
  8.   int v7; // ecx
  9.   unsigned __int8 *v8; // ecx
  10.   unsigned __int8 *v9; // eax
  11.   unsigned __int8 *v10; // ecx
  12.   int v11; // edx
  13.   signed int v12; // eax
  14.   unsigned __int8 *v13; // eax
  15.   unsigned __int8 *v14; // eax
  16.   unsigned __int8 *v15; // eax
  17.   unsigned __int8 *v16; // eax
  18.   unsigned __int8 *v17; // ecx
  19.   unsigned __int8 *v18; // eax
  20.   unsigned __int8 *v19; // eax
  21.   unsigned __int8 *v20; // ecx
  22.   unsigned __int8 *v21; // eax
  23.   unsigned __int8 *v22; // eax
  24.   unsigned __int8 *v23; // ecx
  25.   unsigned __int8 *v24; // ecx
  26.   signed int result; // eax
  27.   unsigned __int8 *v26; // eax
  28.   unsigned __int8 *v27; // eax
  29.   unsigned __int8 *v28; // eax
  30.   unsigned __int8 *v29; // ecx
  31.   unsigned __int8 *v30; // eax
  32.   unsigned __int8 *v31; // eax
  33.   unsigned __int8 *v32; // ecx
  34.   unsigned __int8 *v33; // eax
  35.   unsigned __int8 *v34; // eax
  36.   unsigned __int8 *v35; // ecx
  37.   unsigned __int8 *v36; // ecx
  38.   unsigned __int8 *v37; // eax
  39.  
  40.   if ( !a1 )
  41.     return -2;
  42.   v2 = (unsigned int *)a1[7];
  43.   if ( !v2 || !*a1 )
  44.     return -2;
  45.   v3 = *v2;
  46.   v4 = 0;
  47.   if ( a2 == 4 )
  48.     v4 = -5;
  49.   v5 = -5;
  50.   while ( 2 )
  51.   {
  52.     switch ( v3 )
  53.     {
  54.       case 0u:
  55.         v6 = a1[1];
  56.         if ( !v6 )
  57.           return v5;
  58.         ++a1[2];
  59.         a1[1] = v6 - 1;
  60.         v5 = v4;
  61.         v7 = **a1;
  62.         *((_DWORD *)a1[7] + 1) = v7;
  63.         ++*a1;
  64.         if ( (v7 & 0xF) != 8 )
  65.         {
  66.           *(_DWORD *)a1[7] = 13;
  67.           a1[6] = "unknown compression method";
  68.           goto LABEL_36;
  69.         }
  70.         v8 = a1[7];
  71.         if ( (unsigned int)((*((_DWORD *)v8 + 1) >> 4) + 8) > *((_DWORD *)v8 + 4) )
  72.         {
  73.           *(_DWORD *)v8 = 13;
  74.           a1[6] = "invalid window size";
  75.           goto LABEL_36;
  76.         }
  77.         *(_DWORD *)v8 = 1;
  78.         goto LABEL_14;
  79.       case 1u:
  80. LABEL_14:
  81.         v9 = a1[1];
  82.         if ( !v9 )
  83.           return v5;
  84.         ++a1[2];
  85.         v10 = a1[7];
  86.         v5 = v4;
  87.         a1[1] = v9 - 1;
  88.         v11 = *(*a1)++;
  89.         if ( (v11 + (*((_DWORD *)v10 + 1) << 8)) % 0x1Fu )
  90.         {
  91.           *(_DWORD *)v10 = 13;
  92.           a1[6] = "incorrect header check";
  93. LABEL_36:
  94.           *((_DWORD *)a1[7] + 1) = 5;
  95. LABEL_37:
  96.           v3 = *(_DWORD *)a1[7];
  97.           if ( v3 > 0xD )
  98.             return -2;
  99.           continue;
  100.         }
  101.         if ( !(v11 & 0x20) )
  102.         {
  103.           *(_DWORD *)v10 = 7;
  104.           goto LABEL_37;
  105.         }
  106.         *(_DWORD *)a1[7] = 2;
  107. LABEL_40:
  108.         v26 = a1[1];
  109.         if ( !v26 )
  110.           return v5;
  111.         ++a1[2];
  112.         a1[1] = v26 - 1;
  113.         v5 = v4;
  114.         *((_DWORD *)a1[7] + 2) = **a1 << 24;
  115.         v27 = a1[7];
  116.         ++*a1;
  117.         *(_DWORD *)v27 = 3;
  118. LABEL_42:
  119.         v28 = a1[1];
  120.         if ( !v28 )
  121.           return v5;
  122.         ++a1[2];
  123.         v29 = a1[7];
  124.         v5 = v4;
  125.         a1[1] = v28 - 1;
  126.         *((_DWORD *)v29 + 2) += **a1 << 16;
  127.         v30 = a1[7];
  128.         ++*a1;
  129.         *(_DWORD *)v30 = 4;
  130. LABEL_44:
  131.         v31 = a1[1];
  132.         if ( !v31 )
  133.           return v5;
  134.         ++a1[2];
  135.         v32 = a1[7];
  136.         v5 = v4;
  137.         a1[1] = v31 - 1;
  138.         *((_DWORD *)v32 + 2) += **a1 << 8;
  139.         v33 = a1[7];
  140.         ++*a1;
  141.         *(_DWORD *)v33 = 5;
  142. LABEL_46:
  143.         v34 = a1[1];
  144.         if ( !v34 )
  145.           return v5;
  146.         ++a1[2];
  147.         v35 = a1[7];
  148.         a1[1] = v34 - 1;
  149.         *((_DWORD *)v35 + 2) += **a1;
  150.         v36 = a1[7];
  151.         ++*a1;
  152.         a1[12] = (unsigned __int8 *)*((_DWORD *)v36 + 2);
  153.         result = 2;
  154.         *(_DWORD *)v36 = 6;
  155.         return result;
  156.       case 2u:
  157.         goto LABEL_40;
  158.       case 3u:
  159.         goto LABEL_42;
  160.       case 4u:
  161.         goto LABEL_44;
  162.       case 5u:
  163.         goto LABEL_46;
  164.       case 6u:
  165.         *(_DWORD *)a1[7] = 13;
  166.         v37 = a1[7];
  167.         a1[6] = "need dictionary";
  168.         *((_DWORD *)v37 + 1) = 0;
  169.         return -2;
  170.       case 7u:
  171.         v12 = sub_156F120(*((_DWORD *)a1[7] + 5), a1, v5);
  172.         v5 = v12;
  173.         if ( v12 == -3 )
  174.         {
  175.           *(_DWORD *)a1[7] = 13;
  176.           *((_DWORD *)a1[7] + 1) = 0;
  177.           goto LABEL_37;
  178.         }
  179.         if ( !v12 )
  180.           v5 = v4;
  181.         if ( v5 != 1 )
  182.           return v5;
  183.         v5 = v4;
  184.         sub_156FB90(*((_DWORD *)a1[7] + 5), a1, a1[7] + 4);
  185.         v13 = a1[7];
  186.         if ( *((_DWORD *)v13 + 3) )
  187.         {
  188.           *(_DWORD *)v13 = 12;
  189.           goto LABEL_37;
  190.         }
  191.         *(_DWORD *)v13 = 8;
  192. LABEL_27:
  193.         v14 = a1[1];
  194.         if ( !v14 )
  195.           return v5;
  196.         ++a1[2];
  197.         a1[1] = v14 - 1;
  198.         v5 = v4;
  199.         *((_DWORD *)a1[7] + 2) = **a1 << 24;
  200.         v15 = a1[7];
  201.         ++*a1;
  202.         *(_DWORD *)v15 = 9;
  203. LABEL_29:
  204.         v16 = a1[1];
  205.         if ( !v16 )
  206.           return v5;
  207.         ++a1[2];
  208.         v17 = a1[7];
  209.         v5 = v4;
  210.         a1[1] = v16 - 1;
  211.         *((_DWORD *)v17 + 2) += **a1 << 16;
  212.         v18 = a1[7];
  213.         ++*a1;
  214.         *(_DWORD *)v18 = 10;
  215. LABEL_31:
  216.         v19 = a1[1];
  217.         if ( !v19 )
  218.           return v5;
  219.         ++a1[2];
  220.         v20 = a1[7];
  221.         v5 = v4;
  222.         a1[1] = v19 - 1;
  223.         *((_DWORD *)v20 + 2) += **a1 << 8;
  224.         v21 = a1[7];
  225.         ++*a1;
  226.         *(_DWORD *)v21 = 11;
  227. LABEL_33:
  228.         v22 = a1[1];
  229.         if ( !v22 )
  230.           return v5;
  231.         ++a1[2];
  232.         v23 = a1[7];
  233.         v5 = v4;
  234.         a1[1] = v22 - 1;
  235.         *((_DWORD *)v23 + 2) += **a1;
  236.         v24 = a1[7];
  237.         ++*a1;
  238.         if ( *((_DWORD *)v24 + 1) == *((_DWORD *)v24 + 2) )
  239.         {
  240.           *(_DWORD *)a1[7] = 12;
  241.           return 1;
  242.         }
  243.         *(_DWORD *)v24 = 13;
  244.         a1[6] = "incorrect data check";
  245.         goto LABEL_36;
  246.       case 8u:
  247.         goto LABEL_27;
  248.       case 9u:
  249.         goto LABEL_29;
  250.       case 0xAu:
  251.         goto LABEL_31;
  252.       case 0xBu:
  253.         goto LABEL_33;
  254.       case 0xCu:
  255.         return 1;
  256.       case 0xDu:
  257.         return -3;
  258.     }
  259.   }
  260. }
Add Comment
Please, Sign In to add comment