Guest User

Untitled

a guest
Mar 24th, 2021
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.21 KB | None | 0 0
  1. /* xxtea_decrypt(unsigned char*, unsigned int, unsigned char*, unsigned int, unsigned int*) */
  2.  
  3. undefined8 xxtea_decrypt(uchar *param_1,uint param_2,uchar *param_3,uint param_4,uint *param_5)
  4.  
  5. {
  6.   void *__dest;
  7.   undefined8 uVar1;
  8.  
  9.   *param_5 = 0;
  10.   if (param_4 < 0x10) {
  11.     __dest = malloc(0x10);
  12.     memcpy(__dest,param_3,(ulong)param_4);
  13.     memset((void *)((long)__dest + (ulong)param_4),0,(ulong)(0x10 - param_4));
  14.     uVar1 = FUN_009220dc(param_1,param_2,__dest,param_5);
  15.     free(__dest);
  16.     return uVar1;
  17.   }
  18.   uVar1 = FUN_009220dc(param_1,param_2,param_3,param_5);
  19.   return uVar1;
  20. }
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27. void * FUN_009220dc(long param_1,uint param_2,long param_3,uint *param_4)
  28.  
  29. {
  30.   byte *pbVar1;
  31.   undefined *puVar2;
  32.   uint uVar3;
  33.   uint uVar4;
  34.   uint uVar5;
  35.   bool bVar6;
  36.   uint *__s;
  37.   undefined8 *__ptr;
  38.   uint uVar7;
  39.   uint uVar8;
  40.   ulong uVar9;
  41.   uint uVar10;
  42.   long lVar11;
  43.   ulong uVar12;
  44.   ulong uVar13;
  45.   void *pvVar14;
  46.  
  47.   uVar10 = param_2 >> 2;
  48.   bVar6 = (param_2 & 3) != 0;
  49.   uVar8 = uVar10;
  50.   if (bVar6) {
  51.     uVar8 = uVar10 + 1;
  52.   }
  53.   uVar5 = uVar8 * 4;
  54.   __s = (uint *)malloc((ulong)uVar5);
  55.   memset(__s,0,(ulong)uVar5);
  56.   if (param_2 != 0) {
  57.     uVar7 = 0;
  58.     uVar9 = 0;
  59.     do {
  60.       uVar12 = uVar9 >> 2 & 0x3fffffff;
  61.       pbVar1 = (byte *)(param_1 + uVar9);
  62.       uVar3 = uVar7 & 0x18;
  63.       uVar9 = uVar9 + 1;
  64.       uVar7 = uVar7 + 8;
  65.       __s[uVar12] = (uint)*pbVar1 << (ulong)uVar3 | __s[uVar12];
  66.     } while (param_2 != uVar9);
  67.   }
  68.   __ptr = (undefined8 *)malloc(0x10);
  69.   uVar7 = 0;
  70.   uVar9 = 0;
  71.   *__ptr = 0;
  72.   __ptr[1] = 0;
  73.   do {
  74.     pbVar1 = (byte *)(param_3 + uVar9);
  75.     lVar11 = (uVar9 >> 2 & 0x3fffffff) * 4;
  76.     uVar3 = uVar7 & 0x18;
  77.     uVar9 = uVar9 + 1;
  78.     uVar7 = uVar7 + 8;
  79.     *(uint *)((long)__ptr + lVar11) =
  80.          (uint)*pbVar1 << (ulong)uVar3 | *(uint *)((long)__ptr + lVar11);
  81.   } while (uVar9 != 0x10);
  82.   uVar9 = (ulong)(uVar8 - 1);
  83.   if (uVar8 - 1 != 0) {
  84.     uVar7 = 0;
  85.     if (uVar8 != 0) {
  86.       uVar7 = 0x34 / uVar8;
  87.     }
  88.     uVar8 = uVar7 * -0x61c88647 + 0xb54cda56;
  89.     if (uVar8 != 0) {
  90.       uVar7 = *__s;
  91.       do {
  92.         uVar3 = uVar8 >> 2 & 3;
  93.         lVar11 = (ulong)((uVar10 + bVar6) - 2) << 2;
  94.         uVar12 = uVar9;
  95.         do {
  96.           uVar4 = *(uint *)((long)__s + lVar11);
  97.           uVar13 = uVar12 - 1;
  98.           uVar7 = __s[uVar12] -
  99.                   ((uVar4 >> 5 ^ uVar7 << 2) + (uVar4 << 4 ^ uVar7 >> 3) ^
  100.                   (*(uint *)((long)__ptr + (ulong)((uint)uVar12 & 3 ^ uVar3) * 4) ^ uVar4) +
  101.                   (uVar7 ^ uVar8));
  102.           lVar11 = lVar11 + -4;
  103.           __s[uVar12] = uVar7;
  104.           uVar12 = uVar13;
  105.         } while ((int)uVar13 != 0);
  106.         uVar4 = __s[uVar9];
  107.         uVar7 = *__s - ((uVar4 >> 5 ^ uVar7 * 4) + (uVar4 << 4 ^ uVar7 >> 3) ^
  108.                        (*(uint *)((long)__ptr + (ulong)uVar3 * 4) ^ uVar4) + (uVar7 ^ uVar8));
  109.         uVar8 = uVar8 + 0x61c88647;
  110.         *__s = uVar7;
  111.       } while (uVar8 != 0);
  112.     }
  113.   }
  114.   uVar8 = __s[uVar9];
  115.   uVar9 = (ulong)uVar8;
  116.   pvVar14 = (void *)0x0;
  117.   if ((uVar8 < uVar5 - 7) || (uVar5 - 4 < uVar8)) goto LAB_00922360;
  118.   pvVar14 = malloc((ulong)(uVar8 + 1));
  119.   if (uVar8 == 0) {
  120.     uVar9 = 0;
  121.   }
  122.   else {
  123.     if (uVar8 == 1) {
  124.       uVar12 = 0;
  125.     }
  126.     else {
  127.       uVar12 = uVar9 - (uVar8 & 1);
  128.       if (uVar12 != 0) {
  129.         uVar10 = 0;
  130.         uVar13 = 0;
  131.         do {
  132.           uVar7 = __s[uVar13 >> 2 & 0x3fffffff];
  133.           uVar5 = uVar10 & 0x10;
  134.           puVar2 = (undefined *)((long)pvVar14 + uVar13);
  135.           uVar13 = uVar13 + 2;
  136.           uVar10 = uVar10 + 0x10;
  137.           *puVar2 = (char)(uVar7 >> (ulong)uVar5);
  138.           puVar2[1] = (char)(uVar7 >> (ulong)(uVar5 | 8));
  139.         } while (uVar12 != uVar13);
  140.         if ((uVar8 & 1) == 0) goto LAB_00922358;
  141.       }
  142.     }
  143.     uVar10 = (int)uVar12 << 3;
  144.     do {
  145.       uVar5 = uVar10 & 0x18;
  146.       uVar10 = uVar10 + 8;
  147.       *(char *)((long)pvVar14 + uVar12) = (char)(__s[uVar12 >> 2 & 0x3fffffff] >> (ulong)uVar5);
  148.       uVar12 = uVar12 + 1;
  149.     } while (uVar9 != uVar12);
  150.   }
  151. LAB_00922358:
  152.   *(undefined *)((long)pvVar14 + uVar9) = 0;
  153.   *param_4 = uVar8;
  154. LAB_00922360:
  155.   free(__s);
  156.   free(__ptr);
  157.   return pvVar14;
  158. }
  159.  
  160.  
Advertisement
Add Comment
Please, Sign In to add comment