/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x1400a1330 FUN_1400a1330 * Pseudocode, not original source. */ ulonglong * FUN_1400a1330(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_14001bc70(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_1400a0eb0(lVar7,uVar5,SVar14,plVar17); puVar18 = local_res18; uVar12 = (ulonglong)uVar3; uVar5 = FUN_1400bfb00(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_140030200(pvVar8,(ulonglong)local_res18[0],pvVar15,puVar18); local_80 = PTR_DAT_140155010; FUN_14001b7a0((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_14003c120((longlong *)&local_88,6,0,(longlong *)ppuVar19,(longlong)&local_60); FUN_14003b870(&local_60); *param_1 = 0; ppuVar13 = &local_88; FUN_14003bff0(param_1,(ulonglong *)ppuVar13,uVar16,ppuVar19); ppuVar11 = &local_88; FUN_14002b570((longlong *)ppuVar11,ppuVar13,uVar16,ppuVar19); puVar4 = local_80; if (((local_80 != (undefined *)0x0) && (local_80 != PTR_DAT_140155010)) && (puVar1 = local_80 + -8, puVar1 != (undefined *)0x0)) { piVar6 = (int *)FUN_140030200(ppuVar11,ppuVar13,uVar16,ppuVar19); local_70 = (ulonglong *)piVar6; FUN_14002e6e0(piVar6); local_68 = 1; piVar2 = (int *)(puVar4 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_1400302f0(puVar1); } FUN_14002e770((longlong)piVar6); } } else { FUN_14001bc70(param_2,local_res18[0],(SIZE_T)pvVar15); *param_1 = 0; } } else { FUN_140030200(pvVar8,uVar12,pvVar15,puVar18); local_80 = PTR_DAT_140155010; FUN_14001b7a0((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_14003c120((longlong *)&local_88,6,0,(longlong *)ppuVar19,(longlong)&local_60); FUN_14003b870(&local_60); *param_1 = 0; ppuVar13 = &local_88; puVar9 = param_1; FUN_14003bff0(param_1,(ulonglong *)ppuVar13,uVar16,ppuVar19); puVar10 = local_88; if (local_88 != (ulonglong *)0x0) { local_70 = local_88; FUN_14002e6e0((int *)local_88); local_68 = 1; local_88[8] = local_88[8] - 1; if (local_88[8] == 0) { FUN_14002e770((longlong)puVar10); local_68 = 0; FUN_14002b500((undefined4 *)local_88,ppuVar13,uVar16,ppuVar19); puVar9 = local_88; } else { FUN_14002e770((longlong)puVar10); puVar9 = puVar10; } } puVar4 = local_80; if (((local_80 != (undefined *)0x0) && (local_80 != PTR_DAT_140155010)) && (puVar1 = local_80 + -8, puVar1 != (undefined *)0x0)) { piVar6 = (int *)FUN_140030200(puVar9,ppuVar13,uVar16,ppuVar19); local_70 = (ulonglong *)piVar6; FUN_14002e6e0(piVar6); local_68 = 1; piVar2 = (int *)(puVar4 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_1400302f0(puVar1); } FUN_14002e770((longlong)piVar6); } } } else { FUN_140030200(pvVar8,uVar12,pvVar15,puVar18); local_80 = PTR_DAT_140155010; FUN_14001b7a0((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_14003c120((longlong *)&local_88,6,0,(longlong *)ppuVar19,(longlong)&local_60); FUN_14003b870(&local_60); *param_1 = 0; ppuVar13 = &local_88; puVar9 = param_1; FUN_14003bff0(param_1,(ulonglong *)ppuVar13,uVar16,ppuVar19); puVar10 = local_88; if (local_88 != (ulonglong *)0x0) { local_70 = local_88; FUN_14002e6e0((int *)local_88); local_68 = 1; local_88[8] = local_88[8] - 1; if (local_88[8] == 0) { FUN_14002e770((longlong)puVar10); local_68 = 0; FUN_14002b500((undefined4 *)local_88,ppuVar13,uVar16,ppuVar19); puVar9 = local_88; } else { FUN_14002e770((longlong)puVar10); puVar9 = puVar10; } } puVar4 = local_80; if (((local_80 != (undefined *)0x0) && (local_80 != PTR_DAT_140155010)) && (puVar1 = local_80 + -8, puVar1 != (undefined *)0x0)) { piVar6 = (int *)FUN_140030200(puVar9,ppuVar13,uVar16,ppuVar19); local_70 = (ulonglong *)piVar6; FUN_14002e6e0(piVar6); local_68 = 1; piVar2 = (int *)(puVar4 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_1400302f0(puVar1); } FUN_14002e770((longlong)piVar6); } } return param_1; }