/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400dd990 FUN_1400dd990 * Pseudocode, not original source. */ ulonglong * FUN_1400dd990(ulonglong *param_1,longlong param_2,SIZE_T param_3,longlong *param_4) { undefined *puVar1; int *piVar2; uint uVar3; undefined *puVar4; ulonglong uVar5; int *piVar6; longlong lVar7; void *pvVar8; ulonglong *puVar9; ulonglong *puVar10; ulonglong **ppuVar11; ulonglong uVar12; ulonglong **ppuVar13; SIZE_T SVar14; void *pvVar15; undefined8 uVar16; longlong *plVar17; uint *puVar18; undefined **ppuVar19; int local_res10 [2]; uint local_res18 [4]; ulonglong *local_88; undefined *local_80; undefined8 local_78; ulonglong *local_70; undefined1 local_68; undefined **local_60; undefined8 local_58; undefined8 local_50; undefined8 local_48; undefined8 local_40; local_78 = 0xfffffffffffffffe; pvVar8 = (void *)0x0; local_res10[0] = 0; local_res18[0] = *(uint *)(param_3 + 0x18); uVar5 = (ulonglong)local_res18[0]; lVar7 = param_2; SVar14 = param_3; plVar17 = param_4; FUN_1400146f0(param_2,local_res18[0],param_3); pvVar15 = pvVar8; if (*(int *)(param_2 + 0x18) != 0) { pvVar15 = *(void **)(param_2 + 0x10); } uVar3 = *(uint *)(param_3 + 0x18); if (uVar3 != 0) { pvVar8 = *(void **)(param_3 + 0x10); } puVar4 = FUN_1400dd510(lVar7,uVar5,SVar14,plVar17); puVar18 = local_res18; uVar12 = (ulonglong)uVar3; uVar5 = FUN_1400fc520(pvVar8,uVar3,pvVar15,puVar18,(byte *)0x0,0,*(uint *)(puVar4 + 0x105c),2, local_res10,*param_4); if ((int)uVar5 == 0) { if (local_res10[0] == 1) { if (*(uint *)(param_3 + 0x18) < local_res18[0]) { FUN_14006cb70(pvVar8,(ulonglong)local_res18[0],pvVar15,puVar18); local_80 = PTR_DAT_1401ac010; FUN_140053d20((longlong *)&local_80, L"Decryption result is larger! Memory corruption may occur!",pvVar15,puVar18); local_58 = 0; local_50 = 0; local_48 = 0; local_40 = 0; local_60 = Proud::ByteArray::vftable; ppuVar19 = &local_80; uVar16 = 0; FUN_140078c10((longlong *)&local_88,6,0,(longlong *)ppuVar19,(longlong)&local_60); FUN_140078360(&local_60); *param_1 = 0; ppuVar13 = &local_88; FUN_140078ae0(param_1,(ulonglong *)ppuVar13,uVar16,ppuVar19); ppuVar11 = &local_88; FUN_140064150((longlong *)ppuVar11,ppuVar13,uVar16,ppuVar19); puVar4 = local_80; if (((local_80 != (undefined *)0x0) && (local_80 != PTR_DAT_1401ac010)) && (puVar1 = local_80 + -8, puVar1 != (undefined *)0x0)) { piVar6 = (int *)FUN_14006cb70(ppuVar11,ppuVar13,uVar16,ppuVar19); local_70 = (ulonglong *)piVar6; FUN_14006b350(piVar6); local_68 = 1; piVar2 = (int *)(puVar4 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14006cc60(puVar1); } FUN_14006b3e0((longlong)piVar6); } } else { FUN_1400146f0(param_2,local_res18[0],(SIZE_T)pvVar15); *param_1 = 0; } } else { FUN_14006cb70(pvVar8,uVar12,pvVar15,puVar18); local_80 = PTR_DAT_1401ac010; FUN_140053d20((longlong *)&local_80,L"Incorrect Packet",pvVar15,puVar18); local_58 = 0; local_50 = 0; local_48 = 0; local_40 = 0; local_60 = Proud::ByteArray::vftable; ppuVar19 = &local_80; uVar16 = 0; FUN_140078c10((longlong *)&local_88,6,0,(longlong *)ppuVar19,(longlong)&local_60); FUN_140078360(&local_60); *param_1 = 0; ppuVar13 = &local_88; puVar9 = param_1; FUN_140078ae0(param_1,(ulonglong *)ppuVar13,uVar16,ppuVar19); puVar10 = local_88; if (local_88 != (ulonglong *)0x0) { local_70 = local_88; FUN_14006b350((int *)local_88); local_68 = 1; local_88[8] = local_88[8] - 1; if (local_88[8] == 0) { FUN_14006b3e0((longlong)puVar10); local_68 = 0; FUN_1400640e0((undefined4 *)local_88,ppuVar13,uVar16,ppuVar19); puVar9 = local_88; } else { FUN_14006b3e0((longlong)puVar10); puVar9 = puVar10; } } puVar4 = local_80; if (((local_80 != (undefined *)0x0) && (local_80 != PTR_DAT_1401ac010)) && (puVar1 = local_80 + -8, puVar1 != (undefined *)0x0)) { piVar6 = (int *)FUN_14006cb70(puVar9,ppuVar13,uVar16,ppuVar19); local_70 = (ulonglong *)piVar6; FUN_14006b350(piVar6); local_68 = 1; piVar2 = (int *)(puVar4 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14006cc60(puVar1); } FUN_14006b3e0((longlong)piVar6); } } } else { FUN_14006cb70(pvVar8,uVar12,pvVar15,puVar18); local_80 = PTR_DAT_1401ac010; FUN_140053d20((longlong *)&local_80,L"Error",pvVar15,puVar18); local_58 = 0; local_50 = 0; local_48 = 0; local_40 = 0; local_60 = Proud::ByteArray::vftable; ppuVar19 = &local_80; uVar16 = 0; FUN_140078c10((longlong *)&local_88,6,0,(longlong *)ppuVar19,(longlong)&local_60); FUN_140078360(&local_60); *param_1 = 0; ppuVar13 = &local_88; puVar9 = param_1; FUN_140078ae0(param_1,(ulonglong *)ppuVar13,uVar16,ppuVar19); puVar10 = local_88; if (local_88 != (ulonglong *)0x0) { local_70 = local_88; FUN_14006b350((int *)local_88); local_68 = 1; local_88[8] = local_88[8] - 1; if (local_88[8] == 0) { FUN_14006b3e0((longlong)puVar10); local_68 = 0; FUN_1400640e0((undefined4 *)local_88,ppuVar13,uVar16,ppuVar19); puVar9 = local_88; } else { FUN_14006b3e0((longlong)puVar10); puVar9 = puVar10; } } puVar4 = local_80; if (((local_80 != (undefined *)0x0) && (local_80 != PTR_DAT_1401ac010)) && (puVar1 = local_80 + -8, puVar1 != (undefined *)0x0)) { piVar6 = (int *)FUN_14006cb70(puVar9,ppuVar13,uVar16,ppuVar19); local_70 = (ulonglong *)piVar6; FUN_14006b350(piVar6); local_68 = 1; piVar2 = (int *)(puVar4 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14006cc60(puVar1); } FUN_14006b3e0((longlong)piVar6); } } return param_1; }