Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int __thiscall sub_39504F96(_DWORD *this, unsigned __int8 *a2, unsigned int a3)
- {
- void *v3; // esp
- int result; // eax
- int v5; // ecx
- int v6; // ecx
- int v7; // ecx
- int v8; // esi
- int v9; // ecx
- int v10; // ecx
- int v11; // ecx
- int v12; // ecx
- int v13; // ecx
- _DWORD *v14; // [esp+4h] [ebp-70050h]
- char v15; // [esp+10h] [ebp-70044h]
- int v16; // [esp+10014h] [ebp-60040h]
- char v17; // [esp+10018h] [ebp-6003Ch]
- unsigned __int16 v18; // [esp+1001Ah] [ebp-6003Ah]
- int v19; // [esp+20018h] [ebp-5003Ch]
- int v20; // [esp+2001Ch] [ebp-50038h]
- char v21; // [esp+20020h] [ebp-50034h]
- int v22; // [esp+60020h] [ebp-10034h]
- int v23; // [esp+60024h] [ebp-10030h]
- char v24; // [esp+60028h] [ebp-1002Ch]
- char v25; // [esp+6002Ah] [ebp-1002Ah]
- int v26; // [esp+70028h] [ebp-2Ch]
- int v27; // [esp+7002Ch] [ebp-28h]
- int *v28; // [esp+70030h] [ebp-24h]
- char v29; // [esp+70037h] [ebp-1Dh]
- int v30; // [esp+70038h] [ebp-1Ch]
- char v31; // [esp+7003Ch] [ebp-18h]
- char v32; // [esp+70047h] [ebp-Dh]
- int v33; // [esp+70050h] [ebp-4h]
- v3 = alloca(458824);
- v14 = this;
- result = (int)this;
- if ( this[5] )
- {
- v32 = byte_395CB000[*a2];
- v29 = 0;
- v5 = this[5];
- sub_395804CE(&v30);
- v33 = 0;
- v28 = &v30;
- switch ( v32 )
- {
- case 1:
- v27 = *(unsigned __int16 *)(a2 + 3);
- if ( *(_BYTE *)(*(_DWORD *)off_395C0544 + 172)
- || v27 == 524
- || v27 == 335
- || v27 == 174
- || !(unsigned __int8)sub_39580085(v14[5]) )
- {
- if ( v27 )
- {
- v6 = v14[5];
- sub_39518D8E(a2 + 3, a3 - 3);
- }
- else
- {
- sub_39581A6B(v28, a2 + 3, a3 - 3);
- }
- v29 = 1;
- }
- else
- {
- (*(void (__thiscall **)(_DWORD *, signed int, const char *, _DWORD, _DWORD, _DWORD))(*v14 + 52))(
- v14,
- 1,
- "encryption-mv",
- 0,
- 0,
- 0);
- }
- break;
- case 2:
- v7 = v14[5];
- sub_3951296D(a2 + 1, a3 - 1);
- v29 = 1;
- break;
- case 3:
- v26 = 65534;
- v8 = v14[4];
- if ( (unsigned __int8)sub_3957FB31((int)(a2 + 1), &v24, (int)&v26) )
- {
- v9 = v14[5];
- sub_39518D8E(&v25, v26 - 2);
- v29 = 1;
- }
- else
- {
- (*(void (__thiscall **)(_DWORD *, signed int, const char *, _DWORD, _DWORD, _DWORD))(*v14 + 52))(
- v14,
- 13,
- "decompress-mv",
- 0,
- 0,
- 0);
- }
- break;
- case 4:
- v22 = 0x40000;
- v23 = 0;
- if ( a3 >= 3 )
- {
- v23 = *(unsigned __int16 *)(a2 + 1);
- if ( (unsigned __int8)sub_3957FC42(a2 + 3, &v21) )
- {
- v10 = v14[5];
- sub_3950D638(v23, &v21, v22);
- v29 = 1;
- }
- else
- {
- (*(void (__thiscall **)(_DWORD *, signed int, const char *, _DWORD, _DWORD, _DWORD))(*v14 + 52))(
- v14,
- 13,
- "decompress-mp-body",
- 0,
- 0,
- 0);
- }
- }
- else
- {
- (*(void (__thiscall **)(_DWORD *, signed int, const char *, _DWORD, _DWORD, _DWORD))(*v14 + 52))(
- v14,
- 13,
- "decompress-mp-size",
- 0,
- 0,
- 0);
- }
- break;
- case 5:
- v20 = 65534;
- (*(void (__thiscall **)(int))(*(_DWORD *)(v14[5] + 4) + 24))(v14[5] + 4);
- if ( (unsigned __int8)sub_3957FCA7(a2 + 1, &v17) )
- {
- if ( (unsigned __int8)sub_3957FD15() )
- {
- v11 = v14[5];
- if ( (unsigned __int8)sub_3951A1C5(&v17) )
- {
- v19 = v18;
- if ( v18 )
- {
- v12 = v14[5];
- sub_39518D8E(&v18, a3 - 3);
- }
- else
- {
- sub_39581A6B(v28, &v18, a3 - 3);
- }
- v29 = 1;
- }
- else
- {
- (*(void (__thiscall **)(_DWORD *, signed int, const char *, _DWORD, _DWORD, _DWORD))(*v14 + 52))(
- v14,
- 13,
- "sequence-mv",
- 0,
- 0,
- 0);
- }
- }
- else
- {
- (*(void (__thiscall **)(_DWORD *, signed int, const char *, _DWORD, _DWORD, _DWORD))(*v14 + 52))(
- v14,
- 13,
- "hash-mv",
- 0,
- 0,
- 0);
- }
- }
- else
- {
- (*(void (__thiscall **)(_DWORD *, signed int, const char *, _DWORD, _DWORD, _DWORD))(*v14 + 52))(
- v14,
- 13,
- "encryption-mv",
- 0,
- 0,
- 0);
- }
- break;
- case 6:
- v16 = 65534;
- if ( (unsigned __int8)sub_3957FCA7(a2 + 1, &v15) )
- {
- v13 = v14[5];
- sub_3951296D(&v15, a3 - 1);
- v29 = 1;
- }
- else
- {
- (*(void (__thiscall **)(_DWORD *, signed int, const char *, _DWORD, _DWORD, _DWORD))(*v14 + 52))(
- v14,
- 13,
- "encryptio-mv",
- 0,
- 0,
- 0);
- }
- break;
- }
- if ( !v29 )
- nullsub_7();
- v33 = -1;
- result = (*(int (__cdecl **)(char *))((v30 & 0xFFFFFFFC) + 4))(&v31);
- }
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement