Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- signed int __cdecl decompress_segment(unsigned char *output, unsigned int output_size, unsigned char *input, unsigned char **input_end)
- {
- signed int v4; // esi@1
- int v5; // edi@1
- signed int result; // eax@2
- unsigned int v7; // ecx@8
- int v8; // edx@9
- unsigned int v9; // ebx@9
- int v10; // ebx@12
- unsigned int v11; // ecx@12
- int v12; // edx@13
- int v13; // ecx@13
- char v14; // al@13
- int v15; // eax@18
- unsigned int v16; // ecx@21
- int v17; // ecx@22
- int v18; // esi@25
- unsigned int v19; // ecx@25
- int v20; // edx@26
- int v21; // ecx@26
- char v22; // al@26
- int v23; // ebx@26
- unsigned int v24; // ecx@30
- int v25; // edx@31
- int v26; // ecx@31
- char v27; // al@31
- unsigned int v28; // ecx@38
- int v29; // edx@39
- int v30; // ecx@39
- char v31; // al@39
- unsigned int v32; // ecx@43
- int v33; // edx@44
- int v34; // ecx@44
- char v35; // al@44
- unsigned int v36; // ecx@47
- int v37; // edx@48
- int v38; // ecx@48
- char v39; // al@48
- signed int v40; // ebx@52
- int v41; // esi@54
- unsigned int v42; // edx@55
- int v43; // ecx@55
- int v44; // edx@55
- char v45; // al@55
- signed int v46; // eax@57
- signed int v47; // eax@59
- int v48; // ebx@59
- unsigned int v49; // ecx@59
- int v50; // edx@60
- int v51; // ecx@60
- char v52; // al@60
- int v53; // esi@60
- unsigned int v54; // ecx@64
- int v55; // edx@65
- int v56; // ecx@65
- char v57; // al@65
- unsigned int v58; // ecx@72
- int v59; // edx@73
- int v60; // ecx@73
- char v61; // al@73
- unsigned int v62; // ecx@77
- int v63; // edx@78
- int v64; // ecx@78
- char v65; // al@78
- unsigned int v66; // ecx@81
- int v67; // edx@82
- int v68; // ecx@82
- char v69; // al@82
- int v70; // ecx@87
- int v71; // eax@90
- int v72; // eax@96
- int v73; // eax@98
- int v74; // eax@100
- int v75; // eax@101
- int v76; // eax@104
- int v77; // eax@106
- int v78; // eax@107
- int v79; // eax@109
- int v80; // eax@111
- int v81; // eax@112
- int v82; // eax@119
- int v83; // eax@121
- int v84; // eax@123
- int v85; // eax@125
- char *v86; // [sp+14h] [bp-D04h]@11
- int v87; // [sp+18h] [bp-D00h]@59
- signed int v88; // [sp+1Ch] [bp-CFCh]@7
- char *v89; // [sp+20h] [bp-CF8h]@59
- signed int v90; // [sp+24h] [bp-CF4h]@52
- char *v91; // [sp+28h] [bp-CF0h]@25
- signed int v92; // [sp+2Ch] [bp-CECh]@20
- char *v93; // [sp+30h] [bp-CE8h]@24
- signed int v94; // [sp+34h] [bp-CE4h]@9
- int v95; // [sp+38h] [bp-CE0h]@1
- unsigned int v96; // [sp+3Ch] [bp-CDCh]@1
- char *v97; // [sp+40h] [bp-CD8h]@8
- int v98; // [sp+44h] [bp-CD4h]@1
- int v99; // [sp+48h] [bp-CD0h]@1
- char v100; // [sp+4Ch] [bp-CCCh]@1
- char v101[3272]; // [sp+50h] [bp-CC8h]@7
- v95 = 0;
- v4 = 0;
- v96 = -1;
- v99 = (int)((char *)output + output_size);
- v98 = (int)input;
- v100 = *(unsigned char *)input;
- v5 = (*(unsigned char *)(input + 1) << 24) | (*(unsigned char *)(input + 2) << 16) | (*(unsigned char *)(input + 3) << 8) | *(unsigned char *)(input + 4);
- if ( *(unsigned char *)input >= 0 )
- {
- memset(v101, 128, 0xCA8u);
- v88 = 0;
- while ( 1 )
- {
- while ( 1 )
- {
- v97 = &v101[v95];
- v7 = (unsigned char)v101[v95 + 2920];
- if ( !(v96 >> 24) )
- {
- v71 = *(unsigned char *)(v98 + 5);
- v96 <<= 8;
- ++v98;
- v5 = (v5 << 8) + v71;
- }
- v8 = v7 - (v7 >> 3);
- v9 = v7 * (v96 >> 8);
- v94 = v5 < v9;
- if ( v5 < v9 )
- break;
- v96 -= v9;
- v5 -= v9;
- v97[2920] = v8;
- v95 = (v95 - 1) & ((unsigned __int64)~(v95 - 1) >> 32);
- if ( output == (void *)v99 )
- return -2;
- v86 = &v101[255 * ((((((unsigned char)output & 7) << 8) | v4 & 0xFFFFF8FFu) >> v100) & 7)];
- v4 = 1;
- do
- {
- v10 = (int)&v86[v4];
- v11 = (unsigned char)v86[v4 - 1];
- if ( !(v96 >> 24) )
- {
- v15 = *(unsigned char *)(v98++ + 5);
- v96 <<= 8;
- v5 = (v5 << 8) + v15;
- }
- v4 *= 2;
- v12 = v11 * (v96 >> 8);
- v13 = v11 - (v11 >> 3);
- v14 = v13;
- if ( v5 < (unsigned int)v12 )
- {
- v96 = v12;
- ++v4;
- v14 = v13 + 31;
- }
- else
- {
- v96 -= v12;
- v5 -= v12;
- }
- *(unsigned char *)(v10 - 1) = v14;
- }
- while ( v4 <= 255 );
- output = (unsigned char *)output + 1;
- ++v88;
- *((unsigned char *)output - 1) = v4;
- }
- v96 = v7 * (v96 >> 8);
- v97[2920] = v8 + 31;
- v92 = -1;
- while ( 1 )
- {
- v16 = (unsigned char)v97[2928];
- if ( !(v9 >> 24) )
- {
- v80 = *(unsigned char *)(v98++ + 5);
- v96 = v9 << 8;
- v5 = (v5 << 8) + v80;
- }
- v97 += 8;
- v9 = v16 * (v96 >> 8);
- v17 = v16 - (v16 >> 3);
- if ( v5 >= v9 )
- break;
- v96 = v9;
- v97[2920] = v17 + 31;
- ++v92;
- if ( v92 == 6 )
- goto LABEL_24;
- }
- v96 -= v9;
- v5 -= v9;
- v97[2920] = v17;
- LABEL_24:
- v93 = &v101[v92];
- if ( v92 >= 0 )
- {
- v91 = &v101[v95 & 7 | 8 * (((unsigned int)output << v92) & 3) | 32 * v92];
- v18 = v92 - 3;
- v19 = (unsigned char)v91[2984];
- if ( !(v96 >> 24) )
- {
- v73 = *(unsigned char *)(v98++ + 5);
- v96 <<= 8;
- v5 = (v5 << 8) + v73;
- }
- v20 = v19 * (v96 >> 8);
- v21 = v19 - (v19 >> 3);
- v22 = v21;
- v23 = 2;
- if ( v5 >= (unsigned int)v20 )
- {
- v96 -= v20;
- v5 -= v20;
- }
- else
- {
- v96 = v20;
- v23 = 3;
- v22 = v21 + 31;
- }
- if ( v18 < 0 )
- {
- v91[2984] = v22;
- }
- else
- {
- if ( v18 <= 0 )
- {
- v91[2984] = v22;
- }
- else
- {
- v24 = (unsigned char)v22;
- if ( !(v96 >> 24) )
- {
- v83 = *(unsigned char *)(v98++ + 5);
- v96 <<= 8;
- v5 = (v5 << 8) + v83;
- }
- v23 *= 2;
- v25 = v24 * (v96 >> 8);
- v26 = v24 - (v24 >> 3);
- v27 = v26;
- if ( v5 >= (unsigned int)v25 )
- {
- v96 -= v25;
- v5 -= v25;
- }
- else
- {
- v96 = v25;
- ++v23;
- v27 = v26 + 31;
- }
- v91[2984] = v27;
- if ( v18 != 1 )
- {
- if ( !(v96 >> 24) )
- {
- v81 = *(unsigned char *)(v98 + 5);
- v96 <<= 8;
- ++v98;
- v5 = (v5 << 8) + v81;
- }
- do
- {
- v96 >>= 1;
- v23 = (v5 < v96) + 2 * v23;
- if ( v5 >= v96 )
- v5 -= v96;
- --v18;
- }
- while ( v18 != 1 );
- }
- }
- v28 = (unsigned char)v91[3008];
- if ( !(v96 >> 24) )
- {
- v82 = *(unsigned char *)(v98 + 5);
- v96 <<= 8;
- ++v98;
- v5 = (v5 << 8) + v82;
- }
- v23 *= 2;
- v29 = v28 * (v96 >> 8);
- v30 = v28 - (v28 >> 3);
- v31 = v30;
- if ( v5 >= (unsigned int)v29 )
- {
- v96 -= v29;
- v5 -= v29;
- }
- else
- {
- v96 = v29;
- ++v23;
- v31 = v30 + 31;
- }
- v91[3008] = v31;
- }
- if ( v92 > 0 )
- {
- v32 = (unsigned char)v91[2992];
- if ( !(v96 >> 24) )
- {
- v85 = *(unsigned char *)(v98++ + 5);
- v96 <<= 8;
- v5 = (v5 << 8) + v85;
- }
- v23 *= 2;
- v33 = v32 * (v96 >> 8);
- v34 = v32 - (v32 >> 3);
- v35 = v34;
- if ( v5 >= (unsigned int)v33 )
- {
- v96 -= v33;
- v5 -= v33;
- }
- else
- {
- v96 = v33;
- ++v23;
- v35 = v34 + 31;
- }
- v91[2992] = v35;
- if ( v92 != 1 )
- {
- v36 = (unsigned char)v91[3000];
- if ( !(v96 >> 24) )
- {
- v84 = *(unsigned char *)(v98 + 5);
- v96 <<= 8;
- ++v98;
- v5 = (v5 << 8) + v84;
- }
- v23 *= 2;
- v37 = v36 * (v96 >> 8);
- v38 = v36 - (v36 >> 3);
- v39 = v38;
- if ( v5 >= (unsigned int)v37 )
- {
- v96 -= v37;
- v5 -= v37;
- }
- else
- {
- v96 = v37;
- ++v23;
- v39 = v38 + 31;
- }
- v91[3000] = v39;
- }
- }
- v94 = v23;
- if ( v23 == 255 )
- break;
- }
- v40 = 8;
- v90 = 352;
- if ( v94 <= 2 )
- {
- v93 += 248;
- v90 = 64;
- }
- do
- {
- v41 = (int)&v93[v40];
- if ( !(v96 >> 24) )
- {
- v72 = *(unsigned char *)(v98++ + 5);
- v96 <<= 8;
- v5 = (v5 << 8) + v72;
- }
- v42 = *(unsigned char *)(v41 + 2033);
- v40 *= 2;
- v43 = v42 * (v96 >> 8);
- v44 = v42 - (v42 >> 3);
- v45 = v44;
- if ( v5 < (unsigned int)v43 )
- {
- v96 = v43;
- v45 = v44 + 31;
- v40 += 8;
- }
- else
- {
- v96 -= v43;
- v5 -= v43;
- }
- *(unsigned char *)(v41 + 2033) = v45;
- v46 = v40 - v90;
- }
- while ( v40 - v90 < 0 );
- if ( v40 != v90 )
- {
- v47 = v46 >> 3;
- v87 = v47 - 1;
- v48 = v47 - 4;
- v89 = &v101[32 * (v47 - 1)];
- v49 = (unsigned char)v89[2344];
- if ( !(v96 >> 24) )
- {
- v78 = *(unsigned char *)(v98 + 5);
- v96 <<= 8;
- ++v98;
- v5 = (v5 << 8) + v78;
- }
- v50 = v49 * (v96 >> 8);
- v51 = v49 - (v49 >> 3);
- v52 = v51;
- v53 = 2;
- if ( v5 >= (unsigned int)v50 )
- {
- v96 -= v50;
- v5 -= v50;
- }
- else
- {
- v96 = v50;
- v53 = 3;
- v52 = v51 + 31;
- }
- if ( v48 < 0 )
- {
- v89[2344] = v52;
- }
- else
- {
- if ( v48 <= 0 )
- {
- v89[2344] = v52;
- }
- else
- {
- v54 = (unsigned char)v52;
- if ( !(v96 >> 24) )
- {
- v79 = *(unsigned char *)(v98++ + 5);
- v96 <<= 8;
- v5 = (v5 << 8) + v79;
- }
- v53 *= 2;
- v55 = v54 * (v96 >> 8);
- v56 = v54 - (v54 >> 3);
- v57 = v56;
- if ( v5 >= (unsigned int)v55 )
- {
- v96 -= v55;
- v5 -= v55;
- }
- else
- {
- v96 = v55;
- ++v53;
- v57 = v56 + 31;
- }
- v89[2344] = v57;
- if ( v48 != 1 )
- {
- if ( !(v96 >> 24) )
- {
- v75 = *(unsigned char *)(v98 + 5);
- v96 <<= 8;
- ++v98;
- v5 = (v5 << 8) + v75;
- }
- do
- {
- v96 >>= 1;
- v53 = (v5 < v96) + 2 * v53;
- if ( v5 >= v96 )
- v5 -= v96;
- --v48;
- }
- while ( v48 != 1 );
- }
- }
- v58 = (unsigned char)v89[2368];
- if ( !(v96 >> 24) )
- {
- v74 = *(unsigned char *)(v98 + 5);
- v96 <<= 8;
- ++v98;
- v5 = (v5 << 8) + v74;
- }
- v53 *= 2;
- v59 = v58 * (v96 >> 8);
- v60 = v58 - (v58 >> 3);
- v61 = v60;
- if ( v5 >= (unsigned int)v59 )
- {
- v96 -= v59;
- v5 -= v59;
- }
- else
- {
- v96 = v59;
- ++v53;
- v61 = v60 + 31;
- }
- v89[2368] = v61;
- }
- if ( v87 > 0 )
- {
- v62 = (unsigned char)v89[2352];
- if ( !(v96 >> 24) )
- {
- v77 = *(unsigned char *)(v98++ + 5);
- v96 <<= 8;
- v5 = (v5 << 8) + v77;
- }
- v53 *= 2;
- v63 = v62 * (v96 >> 8);
- v64 = v62 - (v62 >> 3);
- v65 = v64;
- if ( v5 >= (unsigned int)v63 )
- {
- v96 -= v63;
- v5 -= v63;
- }
- else
- {
- v96 = v63;
- ++v53;
- v65 = v64 + 31;
- }
- v89[2352] = v65;
- if ( v87 != 1 )
- {
- v66 = (unsigned char)v89[2360];
- if ( !(v96 >> 24) )
- {
- v76 = *(unsigned char *)(v98 + 5);
- v96 <<= 8;
- ++v98;
- v5 = (v5 << 8) + v76;
- }
- v53 *= 2;
- v67 = v66 * (v96 >> 8);
- v68 = v66 - (v66 >> 3);
- v69 = v68;
- if ( v5 >= (unsigned int)v67 )
- {
- v96 -= v67;
- v5 -= v67;
- }
- else
- {
- v96 = v67;
- ++v53;
- v69 = v68 + 31;
- }
- v89[2360] = v69;
- }
- }
- v46 = v53 - 1;
- }
- if ( v88 <= (unsigned int)v46 )
- return -1;
- *((unsigned char*)&(v4)) = *((unsigned char *)output + -v46 - 1);
- v70 = (int)((char *)output + v94);
- v95 = (((unsigned char)v94 + (unsigned char)output) & 1) + 6;
- if ( (unsigned int)((char *)output + v94) >= v99 )
- return -2;
- do
- {
- output = (unsigned char *)output + 1;
- ++v88;
- *((unsigned char *)output - 1) = v4;
- v4 = *((unsigned char *)output + -v46 - 1);
- }
- while ( output != (void *)v70 );
- output = (unsigned char *)output + 1;
- ++v88;
- *((unsigned char *)output - 1) = v4;
- }
- if ( input_end )
- *(unsigned int *)input_end = v98 + 5;
- result = v88;
- }
- else
- {
- result = -2;
- if ( v5 <= output_size )
- {
- memcpy(output, (const void *)(input + 5), v5);
- if ( input_end )
- *(unsigned int *)input_end = (unsigned int)(input + v5 + 5);
- result = v5;
- }
- }
- return result;
- }
Add Comment
Please, Sign In to add comment