/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x14007e880 FUN_14007e880 * Pseudocode, not original source. */ void FUN_14007e880(longlong *param_1,double param_2,undefined *param_3,undefined *param_4) { undefined8 *puVar1; double dVar2; bool bVar3; DWORD DVar4; DWORD DVar5; undefined *puVar6; undefined *puVar7; undefined **ppuVar8; int *piVar9; longlong *plVar10; int *piVar11; longlong *plVar12; undefined8 in_RDX; wchar_t *pwVar13; char cVar14; int *piVar15; SIZE_T SVar16; longlong lVar17; undefined *puVar18; undefined8 uVar19; undefined *local_res10; undefined *local_res18; undefined *local_res20; undefined *local_168; int *local_160; char local_158; longlong *local_150; undefined1 local_148; undefined *local_140; undefined *local_138; undefined *local_130; undefined *local_128; undefined *local_120; undefined *local_118; undefined **local_110; undefined1 local_108; undefined **local_100; undefined1 local_f8; int *local_f0; undefined1 local_e8; undefined8 local_e0; int *local_d8; undefined1 local_d0; int *local_c8; undefined1 local_c0; undefined **local_b8; undefined1 local_b0; int *local_a8; undefined1 local_a0; int *local_98; undefined1 local_90; int *local_88; undefined1 local_80; int *local_78; undefined1 local_70; local_e0 = 0xfffffffffffffffe; local_150 = param_1 + 0x95; local_res18 = param_3; FUN_14002e6e0((int *)local_150); local_148 = 1; (**(code **)(param_1[1] + 0x18))(); bVar3 = false; puVar18 = (undefined *)0x0; puVar7 = puVar18; if (param_1[0xad] != 0) { puVar7 = *(undefined **)(param_1[0xad] + 0x38); } FUN_14002e6e0((int *)(puVar7 + 0x10)); puVar6 = puVar18; if (param_1[0xad] != 0) { puVar6 = *(undefined **)(param_1[0xad] + 0x38); } *(int *)(puVar6 + 0x288) = *(int *)(puVar6 + 0x288) + 1; LOCK(); *(int *)(param_1 + 0xa2) = (int)param_1[0xa2] + 1; UNLOCK(); FUN_14002e770((longlong)(puVar7 + 0x10)); DVar4 = GetTickCount(); dVar2 = param_2 * 2.0 * 1000.0; if (dVar2 <= 100000.0) { dVar2 = 100000.0; } if (((char)param_1[0x2e4] != '\0') || ((int)param_1[0xcb] != 0)) { puVar7 = puVar18; if (param_1[0xad] != 0) { puVar7 = *(undefined **)(param_1[0xad] + 0x38); } piVar15 = (int *)(puVar7 + 0x10); local_88 = piVar15; FUN_14002e6e0(piVar15); local_80 = 1; param_4 = (undefined *)(ulonglong)*(uint *)(param_1 + 0x2a1); param_3 = &DAT_140100df0; in_RDX = 0; FUN_140072eb0((longlong)(param_1 + -0xe),0, L"Client %d: CNetClient.Disconnect를 사용자가 콜 하였습니다.",param_4); FUN_14002e770((longlong)piVar15); } plVar12 = param_1 + -0xe; puVar7 = puVar18; do { piVar15 = (int *)(**(code **)(*plVar12 + 0x58))(plVar12); local_160 = piVar15; FUN_14002e6e0(piVar15); local_158 = '\x01'; if (((longlong *)param_1[0xac] == (longlong *)0x0) || (lVar17 = *(longlong *)param_1[0xac], lVar17 == 0)) { if ((((longlong *)param_1[0x2a0] != (longlong *)0x0) && (*(longlong *)param_1[0x2a0] != 0)) || (((longlong *)param_1[0x296] != (longlong *)0x0 && (*(longlong *)param_1[0x296] != 0)))) { FUN_140030200(0,in_RDX,param_3,param_4); local_140 = PTR_DAT_140155010; plVar10 = FUN_14002ff30((longlong *)&local_118,in_RDX,param_3,param_4); param_3 = (undefined *)*plVar10; if ((undefined *)*plVar10 == (undefined *)0x0) { param_3 = PTR_DAT_140155010; } pwVar13 = L"Unstability in Disconnect #1! Process=%s"; ppuVar8 = &local_140; FUN_14001b7a0((longlong *)ppuVar8,L"Unstability in Disconnect #1! Process=%s",param_3, param_4); if (((local_118 != (undefined *)0x0) && (local_118 != PTR_DAT_140155010)) && (local_118 + -8 != (undefined *)0x0)) { ppuVar8 = (undefined **)FUN_140030200(ppuVar8,pwVar13,param_3,param_4); local_b8 = ppuVar8; FUN_14002e6e0((int *)ppuVar8); local_b0 = 1; piVar9 = (int *)(local_118 + -4); *piVar9 = *piVar9 + -1; if (*piVar9 == 0) { FUN_1400302f0(local_118 + -8); } FUN_14002e770((longlong)ppuVar8); } FUN_140030200(ppuVar8,pwVar13,param_3,param_4); puVar7 = local_140; local_168 = PTR_DAT_140155010; if (PTR_DAT_140155010 == (undefined *)0x0) { local_168 = puVar18; } if (local_140 != PTR_DAT_140155010) { piVar9 = (int *)FUN_140030200(ppuVar8,pwVar13,param_3,param_4); local_98 = piVar9; FUN_14002e6e0(piVar9); local_90 = 1; FUN_140003240((longlong *)&local_168,pwVar13,param_3,param_4); local_168 = puVar7; if (((puVar7 != PTR_DAT_140155010) && (puVar7 != (undefined *)0x0)) && (puVar7 != (undefined *)0x8)) { *(int *)(puVar7 + -4) = *(int *)(puVar7 + -4) + 1; } FUN_14002e770((longlong)piVar9); } ppuVar8 = &local_168; FUN_140033120((longlong *)ppuVar8,pwVar13,param_3,param_4); if (((puVar7 != (undefined *)0x0) && (puVar7 != PTR_DAT_140155010)) && (puVar7 + -8 != (undefined *)0x0)) { piVar11 = (int *)FUN_140030200(ppuVar8,pwVar13,param_3,param_4); local_78 = piVar11; FUN_14002e6e0(piVar11); local_70 = 1; piVar9 = (int *)(puVar7 + -4); *piVar9 = *piVar9 + -1; if (*piVar9 == 0) { FUN_1400302f0(puVar7 + -8); } FUN_14002e770((longlong)piVar11); } } FUN_14007b7f0((longlong)plVar12,'\x01',(SIZE_T)param_3,param_4); FUN_14002e770((longlong)piVar15); LAB_14007f06d: FUN_14002e770((longlong)local_150); return; } if ((*(int *)(lVar17 + 0x100) == 5) && (param_1[0x2d5] == 0)) { FUN_14007b7f0((longlong)plVar12,'\x01',(SIZE_T)param_3,param_4); FUN_14002e770((longlong)local_160); goto LAB_14007f06d; } if (DAT_14015c2d0 != '\0') { FUN_14007b7f0((longlong)plVar12,'\x01',(SIZE_T)param_3,param_4); FUN_14002e770((longlong)local_160); goto LAB_14007f06d; } puVar6 = puVar18; if (param_1[0xad] != 0) { puVar6 = *(undefined **)(param_1[0xad] + 0x38); } if (*(longlong *)(puVar6 + 0x2b8) == 0) { puVar7 = puVar18; if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) { puVar7 = *(undefined **)param_1[0xac]; } uVar19 = 5; FUN_1400a36a0((longlong)puVar7,5); FUN_140030200(puVar7,uVar19,param_3,param_4); local_138 = PTR_DAT_140155010; plVar10 = FUN_14002ff30((longlong *)&local_128,uVar19,param_3,param_4); puVar7 = (undefined *)*plVar10; if ((undefined *)*plVar10 == (undefined *)0x0) { puVar7 = PTR_DAT_140155010; } pwVar13 = L"Unstability in Disconnect #2! Process=%s"; ppuVar8 = &local_138; FUN_14001b7a0((longlong *)ppuVar8,L"Unstability in Disconnect #2! Process=%s",puVar7,param_4); if (((local_128 != (undefined *)0x0) && (local_128 != PTR_DAT_140155010)) && (local_128 + -8 != (undefined *)0x0)) { ppuVar8 = (undefined **)FUN_140030200(ppuVar8,pwVar13,puVar7,param_4); local_100 = ppuVar8; FUN_14002e6e0((int *)ppuVar8); local_f8 = 1; piVar15 = (int *)(local_128 + -4); *piVar15 = *piVar15 + -1; if (*piVar15 == 0) { FUN_1400302f0(local_128 + -8); } FUN_14002e770((longlong)ppuVar8); } FUN_140030200(ppuVar8,pwVar13,puVar7,param_4); puVar6 = local_138; local_res20 = PTR_DAT_140155010; if (PTR_DAT_140155010 == (undefined *)0x0) { local_res20 = puVar18; } if (local_138 != PTR_DAT_140155010) { piVar15 = (int *)FUN_140030200(ppuVar8,pwVar13,puVar7,param_4); local_f0 = piVar15; FUN_14002e6e0(piVar15); local_e8 = 1; FUN_140003240((longlong *)&local_res20,pwVar13,puVar7,param_4); local_res20 = puVar6; if (((puVar6 != PTR_DAT_140155010) && (puVar6 != (undefined *)0x0)) && (puVar6 != (undefined *)0x8)) { *(int *)(puVar6 + -4) = *(int *)(puVar6 + -4) + 1; } FUN_14002e770((longlong)piVar15); } ppuVar8 = &local_res20; FUN_140033120((longlong *)ppuVar8,pwVar13,puVar7,param_4); if (((puVar6 != (undefined *)0x0) && (puVar6 != PTR_DAT_140155010)) && (puVar6 + -8 != (undefined *)0x0)) { piVar9 = (int *)FUN_140030200(ppuVar8,pwVar13,puVar7,param_4); local_d8 = piVar9; FUN_14002e6e0(piVar9); local_d0 = 1; piVar15 = (int *)(puVar6 + -4); *piVar15 = *piVar15 + -1; if (*piVar15 == 0) { FUN_1400302f0(puVar6 + -8); } FUN_14002e770((longlong)piVar9); } FUN_14007b7f0((longlong)plVar12,'\x01',(SIZE_T)puVar7,param_4); FUN_14002e770((longlong)local_160); goto LAB_14007f06d; } DVar5 = GetTickCount(); if (dVar2 < (double)(DVar5 - DVar4)) { FUN_140030200(puVar6,in_RDX,param_3,param_4); local_130 = PTR_DAT_140155010; FUN_14002ff30((longlong *)&local_120,in_RDX,param_3,param_4); puVar7 = puVar18; if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) { puVar7 = *(undefined **)param_1[0xac]; } lVar17 = param_1[0x2d5]; SVar16 = (SIZE_T)*(uint *)(puVar7 + 0x100); pwVar13 = L"CNetClient.Disconnect seems to be freezed ## State=%d##GarbageCount=%d##Process=%s"; ppuVar8 = &local_130; FUN_14001b7a0((longlong *)ppuVar8, L"CNetClient.Disconnect seems to be freezed ## State=%d##GarbageCount=%d##Process=%s" ,SVar16,lVar17); if (((local_120 != (undefined *)0x0) && (local_120 != PTR_DAT_140155010)) && (local_120 + -8 != (undefined *)0x0)) { ppuVar8 = (undefined **)FUN_140030200(ppuVar8,pwVar13,SVar16,lVar17); local_110 = ppuVar8; FUN_14002e6e0((int *)ppuVar8); local_108 = 1; piVar15 = (int *)(local_120 + -4); *piVar15 = *piVar15 + -1; if (*piVar15 == 0) { FUN_1400302f0(local_120 + -8); } FUN_14002e770((longlong)ppuVar8); } FUN_140030200(ppuVar8,pwVar13,SVar16,lVar17); puVar7 = local_130; local_res10 = PTR_DAT_140155010; if (PTR_DAT_140155010 == (undefined *)0x0) { local_res10 = puVar18; } if (local_130 != PTR_DAT_140155010) { piVar15 = (int *)FUN_140030200(ppuVar8,pwVar13,SVar16,lVar17); local_a8 = piVar15; FUN_14002e6e0(piVar15); local_a0 = 1; FUN_140003240((longlong *)&local_res10,pwVar13,SVar16,lVar17); local_res10 = puVar7; if (((puVar7 != PTR_DAT_140155010) && (puVar7 != (undefined *)0x0)) && (puVar7 != (undefined *)0x8)) { *(int *)(puVar7 + -4) = *(int *)(puVar7 + -4) + 1; } FUN_14002e770((longlong)piVar15); } FUN_140033120((longlong *)&local_res10,pwVar13,SVar16,lVar17); if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) { puVar18 = *(undefined **)param_1[0xac]; } uVar19 = 0; FUN_1400a36a0((longlong)puVar18,5); uVar19 = CONCAT71((int7)((ulonglong)uVar19 >> 8),1); FUN_14007b7f0((longlong)plVar12,'\x01',SVar16,lVar17); if (((puVar7 != (undefined *)0x0) && (puVar7 != PTR_DAT_140155010)) && (puVar7 + -8 != (undefined *)0x0)) { piVar9 = (int *)FUN_140030200(plVar12,uVar19,SVar16,lVar17); local_c8 = piVar9; FUN_14002e6e0(piVar9); local_c0 = 1; piVar15 = (int *)(puVar7 + -4); *piVar15 = *piVar15 + -1; if (*piVar15 == 0) { FUN_1400302f0(puVar7 + -8); } FUN_14002e770((longlong)piVar9); } FUN_14002e770((longlong)local_160); goto LAB_14007f06d; } if (!bVar3) { bVar3 = true; puVar6 = puVar18; if (param_1[0xad] != 0) { puVar6 = *(undefined **)(param_1[0xad] + 0x38); } FUN_14002e820((longlong)(puVar6 + 0x10)); puVar6 = puVar18; if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) { puVar6 = *(undefined **)param_1[0xac]; } puVar1 = (undefined8 *)param_1[0xac]; if (*(int *)(puVar6 + 0x100) == 3) { puVar6 = puVar18; if (puVar1 != (undefined8 *)0x0) { puVar6 = (undefined *)*puVar1; } uVar19 = (**(code **)(*param_1 + 0x1c0))(param_1); *(undefined8 *)(puVar6 + 0xd0) = uVar19; puVar6 = puVar18; if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) { puVar6 = *(undefined **)param_1[0xac]; } *(double *)(puVar6 + 0xd8) = param_2; param_3 = &DAT_14015de10; in_RDX = 1; param_4 = local_res18; (**(code **)(param_1[0x2f5] + 0x80))(); } else { puVar6 = puVar18; if (puVar1 != (undefined8 *)0x0) { puVar6 = (undefined *)*puVar1; } if (*(int *)(puVar6 + 0x100) < 3) { puVar6 = puVar18; if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) { puVar6 = *(undefined **)param_1[0xac]; } in_RDX = 4; FUN_1400a36a0((longlong)puVar6,4); } } } piVar15 = local_160; cVar14 = local_158; if (0 < (int)puVar7) { FUN_14002e770((longlong)local_160); Sleep(10); cVar14 = '\0'; } puVar7 = (undefined *)(ulonglong)((int)puVar7 + 1); if (cVar14 != '\0') { FUN_14002e770((longlong)piVar15); } } while( true ); }