Guest User

PseudoCode

a guest
Jan 25th, 2017
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.73 KB | None | 0 0
  1. __int16 __cdecl commonPacketParser(void *class_ptr, int is_data_begin_start, char *packet_data, __int16 packet_size, void *Dst)
  2. {
  3.   int header_size; // eax@1
  4.   _DWORD *v6; // ecx@2
  5.   int v7; // edx@2
  6.   int v8; // eax@3
  7.   int v9; // eax@4
  8.   char *data; // esi@6
  9.   int v11; // eax@10
  10.   int v12; // eax@11
  11.   int v13; // eax@13
  12.   void **v14; // ebp@19
  13.   char *v15; // ebx@19
  14.   unsigned __int16 parse_type; // ax@23
  15.   int v17; // edi@25
  16.   int i; // eax@25
  17.   unsigned __int16 v19; // dx@26
  18.   unsigned __int16 v20; // ax@30
  19.   unsigned __int16 v21; // dx@34
  20.   unsigned __int16 *v22; // eax@38
  21.   int v24; // [sp+4h] [bp-Ch]@0
  22.   signed int v25; // [sp+8h] [bp-8h]@2
  23.   int v26; // [sp+Ch] [bp-4h]@2
  24.  
  25.   LOWORD(header_size) = *((_WORD *)class_ptr + 38024);
  26.   if ( (_WORD)header_size )
  27.   {
  28.     v6 = Dst;
  29.     v7 = (signed __int16)header_size;
  30.     v26 = 0;
  31.     v25 = 1;
  32.     header_size = (signed __int16)header_size;
  33.     if ( is_data_begin_start )
  34.     {
  35.       v8 = header_size - 1;
  36.       if ( v8 )
  37.       {
  38.         v9 = v8 - 1;
  39.         if ( !v9 )
  40.         {
  41.           v24 = *(_WORD *)(packet_data + 9);
  42.           data = &packet_data[v7 + 9];
  43.           goto LABEL_18;
  44.         }
  45.         if ( v9 == 2 )
  46.         {
  47.           v24 = *(_DWORD *)(packet_data + 9);
  48.           data = &packet_data[v7 + 9];
  49. LABEL_18:
  50.           if ( !*((_WORD *)class_ptr + 38020) )
  51.           {
  52. LABEL_57:
  53.             LOWORD(header_size) = 1;
  54.             return header_size;
  55.           }
  56.           v14 = &Dst;
  57.           v15 = (char *)class_ptr + 75784;
  58.           while ( 1 )
  59.           {
  60.             if ( v25 & v24 )
  61.             {
  62.               if ( is_data_begin_start && data > &packet_data[packet_size] )
  63.                 goto LABEL_45;
  64.               parse_type = *(_WORD *)v15;
  65.               if ( *(_WORD *)v15 == 12 )
  66.               {
  67.                 if ( *((_WORD *)v15 + 64) <= 1u )
  68.                 {
  69.                   v20 = *(_WORD *)data;
  70.                   if ( v6 )
  71.                     *v6 = data;
  72.                   data += v20 + 2;
  73.                 }
  74.                 else
  75.                 {
  76.                   v17 = *data++;
  77.                   for ( i = 0; i < v17; data += v19 + 2 )
  78.                   {
  79.                     v19 = *(_WORD *)data;
  80.                     if ( v6 )
  81.                       v6[i] = data;
  82.                     ++i;
  83.                   }
  84.                 }
  85.               }
  86.               else if ( parse_type == 13 )
  87.               {
  88.                 v21 = *(_WORD *)data;
  89.                 if ( v6 )
  90.                   *v6 = data + 2;
  91.                 data += v21 + 2;
  92.                 if ( is_data_begin_start && data > &packet_data[packet_size] )
  93.                   goto LABEL_45;
  94.                 v22 = (unsigned __int16 *)v14[1];
  95.                 ++v14;
  96.                 if ( v22 )
  97.                   *v22 = v21;
  98.               }
  99.               else if ( parse_type )
  100.               {
  101.                 if ( is_data_begin_start
  102.                   && &data[dword_802B80[parse_type] * *((_WORD *)v15 + 64)] > &packet_data[packet_size] )
  103.                 {
  104.                   goto LABEL_45;
  105.                 }
  106.                 if ( v6 )
  107.                   memcpy(v6, data, dword_802B80[parse_type] * *((_WORD *)v15 + 64));
  108.                 data += dword_802B80[*(_WORD *)v15] * *((_WORD *)v15 + 64);
  109.               }
  110.               else
  111.               {
  112.                 if ( v6 )
  113.                   *v6 = data;
  114.                 data += dword_802B80[*(_WORD *)v15] * *((_WORD *)v15 + 64);
  115.                 if ( is_data_begin_start && data > &packet_data[packet_size] )
  116.                 {
  117. LABEL_45:
  118.                   LOWORD(header_size) = 0;
  119.                   return header_size;
  120.                 }
  121.               }
  122.             }
  123.             else if ( v6 && *(_WORD *)v15 == 12 )
  124.             {
  125.               *v6 = 0;
  126.             }
  127.             else if ( *(_WORD *)v15 == 13 )
  128.             {
  129.               ++v14;
  130.             }
  131.             v25 *= 2;
  132.             v6 = v14[1];
  133.             ++v14;
  134.             v15 += 2;
  135.             if ( ++v26 >= *((_WORD *)class_ptr + 38020) )
  136.               goto LABEL_57;
  137.           }
  138.         }
  139.       }
  140.       else
  141.       {
  142.         v24 = (unsigned __int8)packet_data[9];
  143.       }
  144.       data = &packet_data[v7 + 9];
  145.       goto LABEL_18;
  146.     }
  147.     v11 = header_size - 1;
  148.     if ( v11 )
  149.     {
  150.       v12 = v11 - 1;
  151.       if ( v12 )
  152.       {
  153.         if ( v12 != 2 )
  154.         {
  155. LABEL_17:
  156.           data = &packet_data[v7 + 2];
  157.           goto LABEL_18;
  158.         }
  159.         v13 = *(_DWORD *)(packet_data + 2);
  160.       }
  161.       else
  162.       {
  163.         v13 = *((_WORD *)packet_data + 1);
  164.       }
  165.     }
  166.     else
  167.     {
  168.       v13 = (unsigned __int8)packet_data[2];
  169.     }
  170.     v24 = v13;
  171.     goto LABEL_17;
  172.   }
  173.   return header_size;
  174. }
Advertisement
Add Comment
Please, Sign In to add comment