Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- _BYTE *__fastcall xxtea_decrypt(unsigned __int8 *a1, unsigned int a2, unsigned __int8 *a3, unsigned int a4, unsigned int *a5)
- {
- unsigned int v5; // r7
- unsigned __int8 *v6; // r9
- unsigned __int8 *v7; // r5
- unsigned int v8; // r8
- unsigned __int8 *v9; // r6
- _BYTE *v10; // r4
- v5 = a4;
- v6 = a1;
- v7 = a3;
- v8 = a2;
- *a5 = 0;
- if ( a4 > 0xF )
- return sub_699B18((int)a1, a2, (int)a3, a5);
- v9 = (unsigned __int8 *)malloc(0x10u);
- qmemcpy(v9, v7, v5);
- memset(&v9[v5], 0, 16 - v5);
- v10 = sub_699B18((int)v6, v8, (int)v9, a5);
- free(v9);
- return v10;
- }
- _BYTE *__fastcall sub_699B18(int a1, unsigned int a2, int a3, unsigned int *a4)
- {
- unsigned int v4; // r6
- bool v5; // zf
- int v6; // r1
- int v7; // r8
- int v8; // r9
- size_t v9; // r5
- void *v10; // r4
- _DWORD *v11; // r5
- int v12; // r0
- int i; // r1
- unsigned int v14; // r3
- int v15; // r2
- char v16; // r7
- int v17; // r4
- _DWORD *v18; // r10
- int v19; // r0
- int v20; // r1
- unsigned int v21; // r3
- int v22; // r2
- char v23; // r4
- int v24; // r7
- _DWORD *v25; // r6
- int v26; // r4
- unsigned int v27; // lr
- unsigned int v28; // r7
- int v29; // r5
- int v30; // r9
- unsigned int *v31; // r8
- int v32; // r1
- unsigned int *v33; // r2
- unsigned int v34; // t1
- int v35; // r6
- unsigned int v36; // r7
- _BYTE *v37; // r4
- int v38; // r0
- int j; // r1
- char v40; // r3
- unsigned int *v42; // [sp+0h] [bp-30h]
- size_t v43; // [sp+4h] [bp-2Ch]
- int v44; // [sp+8h] [bp-28h]
- unsigned int v45; // [sp+Ch] [bp-24h]
- int v46; // [sp+Ch] [bp-24h]
- _DWORD *p; // [sp+10h] [bp-20h]
- v4 = a2;
- v5 = (a2 & 3) == 0;
- v6 = a2 >> 2;
- v7 = a1;
- if ( !v5 )
- v6 = (v4 >> 2) + 1;
- v42 = a4;
- v8 = a3;
- v9 = 4 * v6;
- v45 = v6;
- v10 = malloc(4 * v6);
- v43 = v9;
- memset(v10, 0, v9);
- v11 = v10;
- if ( v4 )
- {
- v12 = 0;
- for ( i = 0; i != v4; ++i )
- {
- v14 = i & 0xFFFFFFFC;
- v15 = *(unsigned __int8 *)(v7 + i);
- v16 = v12 & 0x18;
- v17 = *(_DWORD *)((char *)v11 + (i & 0xFFFFFFFC));
- v12 += 8;
- *(_DWORD *)((char *)v11 + v14) = v17 | (v15 << v16);
- }
- }
- p = v11;
- v18 = malloc(0x10u);
- v19 = 0;
- v20 = 0;
- *v18 = 0;
- v18[1] = 0;
- v18[2] = 0;
- v18[3] = 0;
- do
- {
- v21 = v20 & 0xFFFFFFFC;
- v22 = *(unsigned __int8 *)(v8 + v20);
- v23 = v19 & 0x18;
- v24 = *(_DWORD *)((char *)v18 + (v20++ & 0xFFFFFFFC));
- v19 += 8;
- *(_DWORD *)((char *)v18 + v21) = v24 | (v22 << v23);
- }
- while ( v20 != 16 );
- v25 = v11;
- v26 = v45 - 1;
- if ( v45 != 1 )
- {
- v27 = -1253254570 - 1640531527 * (0x34 / v45);
- if ( v27 )
- {
- v46 = v45 - 1;
- v28 = *v11;
- v44 = (int)v11 + v43 - 4;
- do
- {
- v29 = v25[v26];
- v30 = (v27 >> 2) & 3;
- v31 = (unsigned int *)v44;
- v32 = v26;
- v33 = (unsigned int *)v44;
- do
- {
- v34 = *(v33 - 1);
- --v33;
- v35 = v32-- & 3 ^ v30;
- v28 = v29 - ((((v34 >> 5) ^ (4 * v28)) + ((16 * v34) ^ (v28 >> 3))) ^ ((v18[v35] ^ v34) + (v28 ^ v27)));
- *v31 = v28;
- v31 = v33;
- v29 = v34;
- }
- while ( v32 );
- v25 = p;
- v26 = v46;
- v28 = *p - ((((p[v46] >> 5) ^ (4 * v28)) + ((16 * p[v46]) ^ (v28 >> 3))) ^ ((v18[v30] ^ p[v46]) + (v28 ^ v27)));
- v27 += 1640531527;
- *p = v28;
- }
- while ( v27 );
- }
- }
- v36 = v25[v26];
- v37 = 0;
- if ( v36 >= v43 - 7 && v36 <= v43 - 4 )
- {
- v25 = p;
- v37 = malloc(v36 + 1);
- if ( v36 )
- {
- v38 = 0;
- for ( j = 0; j != v36; ++j )
- {
- v40 = v38 & 0x18;
- v38 += 8;
- v37[j] = *(_DWORD *)((char *)p + (j & 0xFFFFFFFC)) >> v40;
- }
- }
- v37[v36] = 0;
- *v42 = v36;
- }
- free(v25);
- free(v18);
- return v37;
- }
Advertisement
Add Comment
Please, Sign In to add comment