Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* xxtea_decrypt(unsigned char*, unsigned int, unsigned char*, unsigned int, unsigned int*) */
- undefined8 xxtea_decrypt(uchar *param_1,uint param_2,uchar *param_3,uint param_4,uint *param_5)
- {
- void *__dest;
- undefined8 uVar1;
- *param_5 = 0;
- if (param_4 < 0x10) {
- __dest = malloc(0x10);
- memcpy(__dest,param_3,(ulong)param_4);
- memset((void *)((long)__dest + (ulong)param_4),0,(ulong)(0x10 - param_4));
- uVar1 = FUN_009220dc(param_1,param_2,__dest,param_5);
- free(__dest);
- return uVar1;
- }
- uVar1 = FUN_009220dc(param_1,param_2,param_3,param_5);
- return uVar1;
- }
- void * FUN_009220dc(long param_1,uint param_2,long param_3,uint *param_4)
- {
- byte *pbVar1;
- undefined *puVar2;
- uint uVar3;
- uint uVar4;
- uint uVar5;
- bool bVar6;
- uint *__s;
- undefined8 *__ptr;
- uint uVar7;
- uint uVar8;
- ulong uVar9;
- uint uVar10;
- long lVar11;
- ulong uVar12;
- ulong uVar13;
- void *pvVar14;
- uVar10 = param_2 >> 2;
- bVar6 = (param_2 & 3) != 0;
- uVar8 = uVar10;
- if (bVar6) {
- uVar8 = uVar10 + 1;
- }
- uVar5 = uVar8 * 4;
- __s = (uint *)malloc((ulong)uVar5);
- memset(__s,0,(ulong)uVar5);
- if (param_2 != 0) {
- uVar7 = 0;
- uVar9 = 0;
- do {
- uVar12 = uVar9 >> 2 & 0x3fffffff;
- pbVar1 = (byte *)(param_1 + uVar9);
- uVar3 = uVar7 & 0x18;
- uVar9 = uVar9 + 1;
- uVar7 = uVar7 + 8;
- __s[uVar12] = (uint)*pbVar1 << (ulong)uVar3 | __s[uVar12];
- } while (param_2 != uVar9);
- }
- __ptr = (undefined8 *)malloc(0x10);
- uVar7 = 0;
- uVar9 = 0;
- *__ptr = 0;
- __ptr[1] = 0;
- do {
- pbVar1 = (byte *)(param_3 + uVar9);
- lVar11 = (uVar9 >> 2 & 0x3fffffff) * 4;
- uVar3 = uVar7 & 0x18;
- uVar9 = uVar9 + 1;
- uVar7 = uVar7 + 8;
- *(uint *)((long)__ptr + lVar11) =
- (uint)*pbVar1 << (ulong)uVar3 | *(uint *)((long)__ptr + lVar11);
- } while (uVar9 != 0x10);
- uVar9 = (ulong)(uVar8 - 1);
- if (uVar8 - 1 != 0) {
- uVar7 = 0;
- if (uVar8 != 0) {
- uVar7 = 0x34 / uVar8;
- }
- uVar8 = uVar7 * -0x61c88647 + 0xb54cda56;
- if (uVar8 != 0) {
- uVar7 = *__s;
- do {
- uVar3 = uVar8 >> 2 & 3;
- lVar11 = (ulong)((uVar10 + bVar6) - 2) << 2;
- uVar12 = uVar9;
- do {
- uVar4 = *(uint *)((long)__s + lVar11);
- uVar13 = uVar12 - 1;
- uVar7 = __s[uVar12] -
- ((uVar4 >> 5 ^ uVar7 << 2) + (uVar4 << 4 ^ uVar7 >> 3) ^
- (*(uint *)((long)__ptr + (ulong)((uint)uVar12 & 3 ^ uVar3) * 4) ^ uVar4) +
- (uVar7 ^ uVar8));
- lVar11 = lVar11 + -4;
- __s[uVar12] = uVar7;
- uVar12 = uVar13;
- } while ((int)uVar13 != 0);
- uVar4 = __s[uVar9];
- uVar7 = *__s - ((uVar4 >> 5 ^ uVar7 * 4) + (uVar4 << 4 ^ uVar7 >> 3) ^
- (*(uint *)((long)__ptr + (ulong)uVar3 * 4) ^ uVar4) + (uVar7 ^ uVar8));
- uVar8 = uVar8 + 0x61c88647;
- *__s = uVar7;
- } while (uVar8 != 0);
- }
- }
- uVar8 = __s[uVar9];
- uVar9 = (ulong)uVar8;
- pvVar14 = (void *)0x0;
- if ((uVar8 < uVar5 - 7) || (uVar5 - 4 < uVar8)) goto LAB_00922360;
- pvVar14 = malloc((ulong)(uVar8 + 1));
- if (uVar8 == 0) {
- uVar9 = 0;
- }
- else {
- if (uVar8 == 1) {
- uVar12 = 0;
- }
- else {
- uVar12 = uVar9 - (uVar8 & 1);
- if (uVar12 != 0) {
- uVar10 = 0;
- uVar13 = 0;
- do {
- uVar7 = __s[uVar13 >> 2 & 0x3fffffff];
- uVar5 = uVar10 & 0x10;
- puVar2 = (undefined *)((long)pvVar14 + uVar13);
- uVar13 = uVar13 + 2;
- uVar10 = uVar10 + 0x10;
- *puVar2 = (char)(uVar7 >> (ulong)uVar5);
- puVar2[1] = (char)(uVar7 >> (ulong)(uVar5 | 8));
- } while (uVar12 != uVar13);
- if ((uVar8 & 1) == 0) goto LAB_00922358;
- }
- }
- uVar10 = (int)uVar12 << 3;
- do {
- uVar5 = uVar10 & 0x18;
- uVar10 = uVar10 + 8;
- *(char *)((long)pvVar14 + uVar12) = (char)(__s[uVar12 >> 2 & 0x3fffffff] >> (ulong)uVar5);
- uVar12 = uVar12 + 1;
- } while (uVar9 != uVar12);
- }
- LAB_00922358:
- *(undefined *)((long)pvVar14 + uVar9) = 0;
- *param_4 = uVar8;
- LAB_00922360:
- free(__s);
- free(__ptr);
- return pvVar14;
- }
Advertisement
Add Comment
Please, Sign In to add comment