Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int __cdecl sub_82AFC0(int a1, int a2)
- {
- int v2; // ebx@1
- int v3; // esi@1
- int result; // eax@2
- unsigned int v5; // esi@5
- int v6; // edx@10
- int v7; // esi@10
- signed int v8; // eax@10
- int v9; // ecx@10
- int AnotherHash; // edi@10
- unsigned int v11; // ecx@11
- unsigned int v12; // ecx@11
- int v13; // edi@13
- int v14; // ecx@13
- int v15; // eax@13
- int v16; // [sp+8h] [bp-8h]@10
- int v17; // [sp+18h] [bp+8h]@10
- int v18; // [sp+1Ch] [bp+Ch]@10
- int Hash; // [sp+1Ch] [bp+Ch]@11
- v2 = a1;
- v3 = *(_DWORD *)(a1 + 16);
- if ( !*(_BYTE *)(a1 + 6) )
- {
- result = sub_81E3B0(a1, a2 - 16, -1);
- if ( result )
- return result;
- goto LABEL_10;
- }
- *(_BYTE *)(a1 + 6) = 0;
- if ( !*(_BYTE *)(**(_DWORD **)v3 + 6) )
- {
- *(_DWORD *)(a1 + 20) = *(_DWORD *)(v3 + 12);
- LABEL_10:
- v16 = ***(_DWORD ***)(a1 + 16) + 20 - *(_DWORD *)(***(_DWORD ***)(a1 + 16) + 20);
- v17 = (a1 + *(_DWORD *)(a1 + 12) + 44) ^ *(_DWORD *)(a1 + *(_DWORD *)(a1 + 12) + 44);
- v6 = *(_DWORD *)(v16 + 40);
- v7 = *(_BYTE *)(v16 + 80)
- + ((*(_BYTE *)(v16 + 83) + ((*(_BYTE *)(v16 + 82) + (*(_BYTE *)(v16 + 81) << 8)) << 8)) << 8);
- v8 = *(_DWORD *)(v16 + 52);
- v9 = *(_DWORD *)(v16 + 60);
- v18 = -1395309893 * v6 - 1838748549 * v7 - 1993746777 * v9 - 1125194579 * v8;
- AnotherHash = 476035360 * v6 + 1546808719 * v9 - 706264423 * v8 - 2088292391 * v7;
- if ( v8 <= 8 ) // calculate from proto size members sizek, sizep, etc
- {
- Hash = AnotherHash ^ v18;
- }
- else
- {
- v11 = *(_DWORD *)(v16 + 36) + 4 * ((v18 + 4) % (unsigned int)(v8 - 4));
- Hash = ((unsigned int)(v17 * *(_DWORD *)(v16 + 36 + v11 + 4)) >> 26)
- + ((unsigned int)(v17 * *(_DWORD *)(v16 + 36 + v11 + 8)) >> 26)
- + ((unsigned int)(v17 * *(_DWORD *)(v11 + v16 + 36 + 12)) >> 26)
- + v18
- + ((unsigned int)(v17 * *(_DWORD *)(v16 + 36 + v11)) >> 26);
- v12 = *(_DWORD *)(v16 + 36) + 4 * ((AnotherHash + 4) % (unsigned int)(v8 - 4));
- AnotherHash += ((unsigned int)(v17 * *(_DWORD *)(v16 + 36 + v12 + 4)) >> 26)
- + ((unsigned int)(v17 * *(_DWORD *)(v12 + v16 + 36 + 8)) >> 26)
- + ((unsigned int)(v17 * *(_DWORD *)(v12 + v16 + 36 + 12)) >> 26)
- + ((unsigned int)(v17 * *(_DWORD *)(v16 + 36 + v12)) >> 26);
- }
- v13 = *(_DWORD *)(v16 + 72) * (AnotherHash | 1);
- v14 = __ROL4__(v13, 11);
- v15 = __ROR4__(v13, 7);
- if ( Hash != (v13 ^ v15 ^ v14) ) // Decrypt the hash from proto members and check if isnt same
- aB0grixozwxq0[-2] = (LPVOID)((unsigned int)aB0grixozwxq0[-2] | 0x200);
- return sub_8221A0(v2, (*(_DWORD *)(v2 + 16) - *(_DWORD *)(v2 + 36)) / 24);
- }
- v5 = v3 - *(_DWORD *)(a1 + 36) - 24;
- result = sub_81E310(a1, a2);
- if ( result )
- {
- result = *(_DWORD *)(*(_DWORD *)(a1 + 16) + 8);
- *(_DWORD *)(a1 + 8) = result;
- }
- if ( v5 >= 0x18 )
- goto LABEL_10;
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement