Guest User

Untitled

a guest
Mar 23rd, 2021
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.88 KB | None | 0 0
  1.  
  2. _BYTE *__fastcall xxtea_decrypt(unsigned __int8 *a1, unsigned int a2, unsigned __int8 *a3, unsigned int a4, unsigned int *a5)
  3. {
  4.   unsigned int v5; // r7
  5.   unsigned __int8 *v6; // r9
  6.   unsigned __int8 *v7; // r5
  7.   unsigned int v8; // r8
  8.   unsigned __int8 *v9; // r6
  9.   _BYTE *v10; // r4
  10.  
  11.   v5 = a4;
  12.   v6 = a1;
  13.   v7 = a3;
  14.   v8 = a2;
  15.   *a5 = 0;
  16.   if ( a4 > 0xF )
  17.     return sub_699B18((int)a1, a2, (int)a3, a5);
  18.   v9 = (unsigned __int8 *)malloc(0x10u);
  19.   qmemcpy(v9, v7, v5);
  20.   memset(&v9[v5], 0, 16 - v5);
  21.   v10 = sub_699B18((int)v6, v8, (int)v9, a5);
  22.   free(v9);
  23.   return v10;
  24. }
  25.  
  26.  
  27.  
  28.  
  29.  
  30. _BYTE *__fastcall sub_699B18(int a1, unsigned int a2, int a3, unsigned int *a4)
  31. {
  32.   unsigned int v4; // r6
  33.   bool v5; // zf
  34.   int v6; // r1
  35.   int v7; // r8
  36.   int v8; // r9
  37.   size_t v9; // r5
  38.   void *v10; // r4
  39.   _DWORD *v11; // r5
  40.   int v12; // r0
  41.   int i; // r1
  42.   unsigned int v14; // r3
  43.   int v15; // r2
  44.   char v16; // r7
  45.   int v17; // r4
  46.   _DWORD *v18; // r10
  47.   int v19; // r0
  48.   int v20; // r1
  49.   unsigned int v21; // r3
  50.   int v22; // r2
  51.   char v23; // r4
  52.   int v24; // r7
  53.   _DWORD *v25; // r6
  54.   int v26; // r4
  55.   unsigned int v27; // lr
  56.   unsigned int v28; // r7
  57.   int v29; // r5
  58.   int v30; // r9
  59.   unsigned int *v31; // r8
  60.   int v32; // r1
  61.   unsigned int *v33; // r2
  62.   unsigned int v34; // t1
  63.   int v35; // r6
  64.   unsigned int v36; // r7
  65.   _BYTE *v37; // r4
  66.   int v38; // r0
  67.   int j; // r1
  68.   char v40; // r3
  69.   unsigned int *v42; // [sp+0h] [bp-30h]
  70.   size_t v43; // [sp+4h] [bp-2Ch]
  71.   int v44; // [sp+8h] [bp-28h]
  72.   unsigned int v45; // [sp+Ch] [bp-24h]
  73.   int v46; // [sp+Ch] [bp-24h]
  74.   _DWORD *p; // [sp+10h] [bp-20h]
  75.  
  76.   v4 = a2;
  77.   v5 = (a2 & 3) == 0;
  78.   v6 = a2 >> 2;
  79.   v7 = a1;
  80.   if ( !v5 )
  81.     v6 = (v4 >> 2) + 1;
  82.   v42 = a4;
  83.   v8 = a3;
  84.   v9 = 4 * v6;
  85.   v45 = v6;
  86.   v10 = malloc(4 * v6);
  87.   v43 = v9;
  88.   memset(v10, 0, v9);
  89.   v11 = v10;
  90.   if ( v4 )
  91.   {
  92.     v12 = 0;
  93.     for ( i = 0; i != v4; ++i )
  94.     {
  95.       v14 = i & 0xFFFFFFFC;
  96.       v15 = *(unsigned __int8 *)(v7 + i);
  97.       v16 = v12 & 0x18;
  98.       v17 = *(_DWORD *)((char *)v11 + (i & 0xFFFFFFFC));
  99.       v12 += 8;
  100.       *(_DWORD *)((char *)v11 + v14) = v17 | (v15 << v16);
  101.     }
  102.   }
  103.   p = v11;
  104.   v18 = malloc(0x10u);
  105.   v19 = 0;
  106.   v20 = 0;
  107.   *v18 = 0;
  108.   v18[1] = 0;
  109.   v18[2] = 0;
  110.   v18[3] = 0;
  111.   do
  112.   {
  113.     v21 = v20 & 0xFFFFFFFC;
  114.     v22 = *(unsigned __int8 *)(v8 + v20);
  115.     v23 = v19 & 0x18;
  116.     v24 = *(_DWORD *)((char *)v18 + (v20++ & 0xFFFFFFFC));
  117.     v19 += 8;
  118.     *(_DWORD *)((char *)v18 + v21) = v24 | (v22 << v23);
  119.   }
  120.   while ( v20 != 16 );
  121.   v25 = v11;
  122.   v26 = v45 - 1;
  123.   if ( v45 != 1 )
  124.   {
  125.     v27 = -1253254570 - 1640531527 * (0x34 / v45);
  126.     if ( v27 )
  127.     {
  128.       v46 = v45 - 1;
  129.       v28 = *v11;
  130.       v44 = (int)v11 + v43 - 4;
  131.       do
  132.       {
  133.         v29 = v25[v26];
  134.         v30 = (v27 >> 2) & 3;
  135.         v31 = (unsigned int *)v44;
  136.         v32 = v26;
  137.         v33 = (unsigned int *)v44;
  138.         do
  139.         {
  140.           v34 = *(v33 - 1);
  141.           --v33;
  142.           v35 = v32-- & 3 ^ v30;
  143.           v28 = v29 - ((((v34 >> 5) ^ (4 * v28)) + ((16 * v34) ^ (v28 >> 3))) ^ ((v18[v35] ^ v34) + (v28 ^ v27)));
  144.           *v31 = v28;
  145.           v31 = v33;
  146.           v29 = v34;
  147.         }
  148.         while ( v32 );
  149.         v25 = p;
  150.         v26 = v46;
  151.         v28 = *p - ((((p[v46] >> 5) ^ (4 * v28)) + ((16 * p[v46]) ^ (v28 >> 3))) ^ ((v18[v30] ^ p[v46]) + (v28 ^ v27)));
  152.         v27 += 1640531527;
  153.         *p = v28;
  154.       }
  155.       while ( v27 );
  156.     }
  157.   }
  158.   v36 = v25[v26];
  159.   v37 = 0;
  160.   if ( v36 >= v43 - 7 && v36 <= v43 - 4 )
  161.   {
  162.     v25 = p;
  163.     v37 = malloc(v36 + 1);
  164.     if ( v36 )
  165.     {
  166.       v38 = 0;
  167.       for ( j = 0; j != v36; ++j )
  168.       {
  169.         v40 = v38 & 0x18;
  170.         v38 += 8;
  171.         v37[j] = *(_DWORD *)((char *)p + (j & 0xFFFFFFFC)) >> v40;
  172.       }
  173.     }
  174.     v37[v36] = 0;
  175.     *v42 = v36;
  176.   }
  177.   free(v25);
  178.   free(v18);
  179.   return v37;
  180. }
Advertisement
Add Comment
Please, Sign In to add comment