/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x1400c50f0 FUN_1400c50f0 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1400c50f0(longlong param_1,uint *param_2,SIZE_T param_3,undefined4 *param_4) { ushort uVar1; uint uVar2; uint uVar3; undefined8 uVar4; ulonglong uVar5; longlong lVar6; int *piVar7; undefined8 *puVar8; longlong *plVar9; undefined ****ppppuVar10; uint *puVar11; longlong *plVar12; undefined ***pppuVar13; uint uVar14; undefined4 *puVar15; LPWSTR lpFilename; uint *puVar16; int iVar17; int *piVar18; uint uVar19; undefined *puVar20; undefined ***pppuVar21; uint **ppuVar22; undefined1 auStackY_4a8 [32]; undefined1 local_478 [8]; uint *local_470; uint *local_468; undefined ***local_460; undefined8 local_458; undefined4 local_450 [2]; undefined ***local_448; undefined4 local_440 [2]; undefined ***local_438; undefined *local_430; undefined **local_428; undefined4 local_420; undefined2 local_41c; undefined *local_418; undefined **local_410; undefined **local_408; undefined8 local_400; undefined8 local_3f8; undefined8 local_3f0; undefined8 local_3e8; int *local_3e0; undefined1 local_3d8; longlong local_3d0; undefined ****local_3c8; undefined1 local_3c0; int *local_3b8; undefined1 local_3b0; int *local_3a8; undefined1 local_3a0; int *local_398; undefined1 local_390; undefined ****local_388; undefined1 local_380; int *local_378; undefined1 local_370; longlong local_368 [4]; undefined4 local_348 [20]; uint *local_2f8; undefined ***local_2f0; undefined4 local_2e8; undefined4 local_2e4; undefined4 local_2d8; undefined4 local_298; undefined2 local_294; undefined4 local_258; undefined4 local_254; undefined4 local_250; undefined4 local_24c; WCHAR local_248 [264]; ulonglong local_38; local_368[1] = 0xfffffffffffffffe; local_38 = DAT_14016f5a0 ^ (ulonglong)auStackY_4a8; plVar12 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x78); puVar11 = param_2; (**(code **)(*plVar12 + 0x10))(); pppuVar21 = (undefined ***)0x0; local_458 = 0; local_460 = (undefined ***)0x0; local_468 = (uint *)0x0; local_468 = (uint *)FUN_14008a360(plVar12,puVar11,param_3); local_468[10] = 1; local_468[0xb] = 0; local_428 = Proud::AddrPort::vftable; local_420 = 0; local_41c = 0; pppuVar13 = (undefined ***)local_440; puVar11 = param_2; uVar4 = FUN_140075970(param_2,(undefined4 *)pppuVar13,param_3,param_4); if ((char)uVar4 != '\0') { local_258 = 0; local_254 = 0; local_250 = 0; local_24c = 0; param_3 = 0x10; pppuVar13 = (undefined ***)&local_258; puVar11 = param_2; uVar4 = FUN_140074ee0(param_2,pppuVar13,0x10); if ((char)uVar4 != '\0') { pppuVar13 = &local_410; puVar11 = param_2; uVar5 = FUN_140075580(param_2,pppuVar13,param_3,param_4); if ((((char)uVar5 != '\0') && (iVar17 = (int)local_410, -1 < iVar17)) && (iVar17 <= DAT_14016f140)) { if (local_460 == (undefined ***)0x0) { puVar11 = local_468; if (iVar17 < 1) { if (local_468 == (uint *)0x0) goto LAB_1400c5727; iVar17 = 0; } else if (local_468 == (uint *)0x0) { /* WARNING: Subroutine does not return */ FUN_14008a420(0,0,param_3,param_4); } FUN_14002a050((longlong)local_468,iVar17,param_3); } else { if (local_458._4_4_ < iVar17) { /* WARNING: Subroutine does not return */ FUN_14003dec0(); } local_458 = CONCAT44(local_458._4_4_,iVar17); } pppuVar13 = local_460; if (local_460 == (undefined ***)0x0) { if (local_468 == (uint *)0x0) { LAB_1400c5727: /* WARNING: Subroutine does not return */ FUN_14008a420(puVar11,0,param_3,param_4); } pppuVar13 = pppuVar21; if (local_468[6] != 0) { pppuVar13 = *(undefined ****)(local_468 + 4); } } param_3 = (ulonglong)local_410 & 0xffffffff; puVar11 = param_2; uVar4 = FUN_140074ee0(param_2,pppuVar13,param_3); if ((char)uVar4 != '\0') { pppuVar13 = &local_428; uVar5 = FUN_140075910(param_2,(longlong)pppuVar13); puVar11 = param_2; if ((char)uVar5 != '\0') { *(undefined4 *)(*(longlong *)(param_1 + 0x108) + 0x1578) = local_440[0]; plVar12 = *(longlong **)(*(longlong *)(param_1 + 0x108) + 0x15d8); if ((plVar12 != (longlong *)0x0) && (*plVar12 != 0)) { lVar6 = FUN_14009c0f0(*(longlong *)(param_1 + 0x108)); *(undefined4 *)(lVar6 + 0x108) = local_420; *(undefined2 *)(lVar6 + 0x10c) = local_41c; } piVar7 = (int *)(**(code **)(**(longlong **)(param_1 + 0x108) + 0x58))(); local_3a8 = piVar7; FUN_14003d040(piVar7); local_3a0 = 1; FUN_140064540((longlong)local_348); local_348[0] = 1; if (local_468 == local_2f8) { local_2e4 = local_458._4_4_; local_2f0 = local_460; local_2e8 = (undefined4)local_458; } else { FUN_14008a320((longlong *)&local_2f8); if (local_468 != (uint *)0x0) { *(longlong *)(local_468 + 10) = *(longlong *)(local_468 + 10) + 1; local_2f8 = local_468; } } local_2d8 = 1; plVar12 = FUN_14000ac70(local_368,(longlong *)(*(longlong *)(param_1 + 0x108) + 0x1588), param_3,param_4); uVar1 = *(ushort *)(*(longlong *)(param_1 + 0x108) + 0x1590); puVar20 = (undefined *)(ulonglong)uVar1; puVar8 = FUN_140041a10(local_368 + 2,plVar12,uVar1,param_4); local_298 = *(undefined4 *)(puVar8 + 1); local_294 = *(undefined2 *)((longlong)puVar8 + 0xc); puVar15 = local_348; FUN_1400b1d40(*(longlong **)(param_1 + 0x108),puVar15,(SIZE_T)puVar20,param_4); lVar6 = *(longlong *)(param_1 + 0x108); *(undefined4 *)(lVar6 + 0x6d0) = local_258; *(undefined4 *)(lVar6 + 0x6d4) = local_254; *(undefined4 *)(lVar6 + 0x6d8) = local_250; *(undefined4 *)(lVar6 + 0x6dc) = local_24c; if (*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x58) != 0) { piVar18 = (int *)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x58) + 0x98); local_378 = piVar18; FUN_14003d040(piVar18); local_370 = 1; local_478[0] = 0; plVar12 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x70); local_450[0] = (**(code **)(*plVar12 + 0x108))(plVar12,local_478); param_4 = local_450; puVar20 = &DAT_140177f90; puVar15 = (undefined4 *)0x1; (**(code **)(*(longlong *) (*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x58) + 0x68) + 0x60))() ; FUN_14003d0d0((longlong)piVar18); } FUN_1400645f0((longlong)local_348,puVar15,puVar20,param_4); FUN_14003d0d0((longlong)piVar7); lVar6 = *(longlong *)(param_1 + 0x108); if ((*(char *)(lVar6 + 0x1790) != '\0') || (*(int *)(lVar6 + 0x6c8) != 0)) { param_4 = (undefined4 *)(ulonglong)*(uint *)(lVar6 + 0x1578); puVar20 = &DAT_140123f48; puVar15 = (undefined4 *)0x1; FUN_1400a9f70(lVar6,1,L"서버와의 연결 성공. HostID=%d",param_4); } if (*(int *)(*(longlong *)(param_1 + 0x108) + 0x1578) == 0x32) { uVar2 = FUN_140048600(lVar6,puVar15,puVar20,param_4); uVar14 = (int)uVar2 / 3 + ((int)uVar2 >> 0x1f) + (int)(((longlong)(int)uVar2 / 3 + ((longlong)(int)uVar2 >> 0x3f) & 0xffffffffU) >> 0x1f); uVar3 = uVar14 * 3; if (uVar2 == uVar3) { FUN_14003e7c0((ulonglong)uVar3,(ulonglong)uVar14,puVar20,param_4); pppuVar13 = (undefined ***)PTR_DAT_14016f010; local_438 = (undefined ***)PTR_DAT_14016f010; puVar20 = (undefined *)0x104; lpFilename = local_248; GetModuleFileNameW((HMODULE)0x0,lpFilename,0x104); ppppuVar10 = *(undefined *****)(param_1 + 0x108); if ((ppppuVar10[699] != (undefined ***)0x0) && (*ppppuVar10[699] != (undefined **)0x0)) { lVar6 = FUN_14009c0f0((longlong)ppppuVar10); plVar12 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x70); plVar12 = (longlong *)(**(code **)(*plVar12 + 0xb0))(plVar12,&local_418); plVar9 = (longlong *) (*(code *)**(undefined8 **)(lVar6 + 0x100)) ((undefined8 *)(lVar6 + 0x100),&local_430); param_4 = (undefined4 *)*plVar12; if ((undefined4 *)*plVar12 == (undefined4 *)0x0) { param_4 = (undefined4 *)PTR_DAT_14016f010; } puVar20 = (undefined *)*plVar9; if ((undefined *)*plVar9 == (undefined *)0x0) { puVar20 = PTR_DAT_14016f010; } ppppuVar10 = &local_438; FUN_140029b80((longlong *)ppppuVar10,L"Usage: %s ## %s ## %s",puVar20,param_4); if (((local_430 != (undefined *)0x0) && (local_430 != PTR_DAT_14016f010)) && (local_430 + -8 != (undefined *)0x0)) { ppppuVar10 = (undefined ****) FUN_14003e7c0(ppppuVar10,PTR_DAT_14016f010,puVar20,param_4); local_388 = ppppuVar10; FUN_14003d040((int *)ppppuVar10); local_380 = 1; piVar7 = (int *)(local_430 + -4); *piVar7 = *piVar7 + -1; if (*piVar7 == 0) { FUN_14003e8b0(local_430 + -8); } FUN_14003d0d0((longlong)ppppuVar10); } lpFilename = (LPWSTR)PTR_DAT_14016f010; local_430 = PTR_DAT_14016f010; if (((local_418 != (undefined *)0x0) && (local_418 != PTR_DAT_14016f010)) && (local_418 + -8 != (undefined *)0x0)) { ppppuVar10 = (undefined ****) FUN_14003e7c0(ppppuVar10,PTR_DAT_14016f010,puVar20,param_4); local_3c8 = ppppuVar10; FUN_14003d040((int *)ppppuVar10); local_3c0 = 1; piVar7 = (int *)(local_418 + -4); *piVar7 = *piVar7 + -1; if (*piVar7 == 0) { FUN_14003e8b0(local_418 + -8); } FUN_14003d0d0((longlong)ppppuVar10); } FUN_14003e7c0(ppppuVar10,lpFilename,puVar20,param_4); pppuVar13 = local_438; local_448 = (undefined ***)PTR_DAT_14016f010; if (PTR_DAT_14016f010 == (undefined *)0x0) { local_448 = pppuVar21; } if (local_438 != (undefined ***)PTR_DAT_14016f010) { piVar7 = (int *)FUN_14003e7c0(ppppuVar10,lpFilename,puVar20,param_4); local_3b8 = piVar7; FUN_14003d040(piVar7); local_3b0 = 1; FUN_140002190((longlong *)&local_448,lpFilename,puVar20,param_4); local_448 = pppuVar13; if (((pppuVar13 != (undefined ***)PTR_DAT_14016f010) && (pppuVar13 != (undefined ***)0x0)) && (pppuVar13 != (undefined ***)0x8)) { *(int *)((longlong)pppuVar13 + -4) = *(int *)((longlong)pppuVar13 + -4) + 1; } FUN_14003d0d0((longlong)piVar7); } ppppuVar10 = &local_448; FUN_1400416f0((longlong *)ppppuVar10,lpFilename,puVar20,param_4); } if (((pppuVar13 != (undefined ***)0x0) && (pppuVar13 != (undefined ***)PTR_DAT_14016f010)) && (pppuVar13 + -1 != (undefined ***)0x0)) { piVar18 = (int *)FUN_14003e7c0(ppppuVar10,lpFilename,puVar20,param_4); local_398 = piVar18; FUN_14003d040(piVar18); local_390 = 1; piVar7 = (int *)((longlong)pppuVar13 + -4); *piVar7 = *piVar7 + -1; if (*piVar7 == 0) { FUN_14003e8b0(pppuVar13 + -1); } FUN_14003d0d0((longlong)piVar18); } } } FUN_14008a320((longlong *)&local_468); if (local_460 == (undefined ***)0x0) { return; } if (-1 < local_458) { return; } /* WARNING: Subroutine does not return */ FUN_14003dec0(); } } } } } FUN_14003e7c0(puVar11,pppuVar13,param_3,param_4); local_470 = (uint *)PTR_DAT_14016f010; uVar3 = FUN_14003e620(L"Bad format in NotifyServerConnectSuccess"); if ((local_470 != (uint *)0x0) && (pppuVar21 = (undefined ***)0x0, local_470 != (uint *)PTR_DAT_14016f010)) { pppuVar21 = (undefined ***)(ulonglong)local_470[-2]; } uVar14 = 0; uVar2 = uVar3; if ((((int)uVar3 <= (int)pppuVar21) && (uVar2 = uVar14, local_470 != (uint *)0x0)) && (local_470 != (uint *)PTR_DAT_14016f010)) { uVar2 = local_470[-2]; } uVar19 = 1; if (1 < (int)uVar2) { uVar19 = uVar2; } uVar2 = uVar14; if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_14016f010)) { uVar2 = local_470[-2]; } if ((int)uVar2 < (int)uVar19) { if (local_470 == (uint *)0x0) { local_470 = (uint *)PTR_DAT_14016f010; } if ((int)uVar19 < 0) { /* WARNING: Subroutine does not return */ FUN_14003dec0(); } if (uVar19 == 0) { FUN_140002190((longlong *)&local_470,PTR_DAT_14016f010,pppuVar21,param_4); } else { uVar2 = uVar14; if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_14016f010)) { uVar2 = local_470[-2]; } if (uVar19 != uVar2) { puVar11 = (uint *)FUN_14003e840((longlong)(int)uVar19 * 2 + 10); if (puVar11 != (uint *)0x0) { *puVar11 = 0; puVar11[1] = 1; } *puVar11 = uVar19; uVar2 = uVar14; if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_14016f010)) { uVar2 = local_470[-2]; } puVar16 = (uint *)PTR_DAT_14016f010; if ((int)uVar19 < (int)uVar2) { LAB_1400c582c: if (local_470 != (uint *)0x0) { puVar16 = local_470; } } else { uVar19 = uVar14; if (local_470 != (uint *)0x0) { if (local_470 != (uint *)PTR_DAT_14016f010) { uVar19 = local_470[-2]; } goto LAB_1400c582c; } } uVar5 = (ulonglong)uVar19; FUN_14003e650(puVar11 + 2,puVar16,uVar19); FUN_140002190((longlong *)&local_470,puVar16,uVar5,param_4); local_470 = puVar11 + 2; } } } FUN_140001df0((longlong *)&local_470); puVar11 = local_470; if (local_470 == (uint *)0x0) { puVar11 = (uint *)PTR_DAT_14016f010; } FUN_14003e650(puVar11,L"Bad format in NotifyServerConnectSuccess",uVar3); puVar11 = local_470; if (local_470 == (uint *)0x0) { puVar11 = (uint *)PTR_DAT_14016f010; } uVar2 = FUN_14003e620((short *)puVar11); uVar3 = 0; if (0 < (int)uVar2) { uVar3 = uVar2; } uVar2 = uVar14; if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_14016f010)) { uVar2 = local_470[-2]; } if (((int)uVar2 <= (int)uVar3) && (uVar3 = uVar14, local_470 != (uint *)0x0)) { if (local_470 == (uint *)PTR_DAT_14016f010) goto LAB_1400c58e6; uVar3 = local_470[-2]; } if (((local_470 != (uint *)PTR_DAT_14016f010) && (local_470 != (uint *)0x0)) && (local_470 + -2 != (uint *)0x0)) { local_470[-2] = uVar3; *(undefined2 *)((longlong)local_470 + (longlong)(int)uVar3 * 2) = 0; } LAB_1400c58e6: local_400 = 0; local_3f8 = 0; local_3f0 = 0; local_3e8 = 0; local_408 = Proud::ByteArray::vftable; ppuVar22 = &local_470; plVar12 = FUN_140071c20(&local_3d0,8,1,(longlong *)ppuVar22,(longlong)&local_408); uVar4 = 0x1f; FUN_1400b4da0(*(longlong **)(param_1 + 0x108),(undefined4 *)0x1f,plVar12,ppuVar22); pppuVar13 = &local_408; FUN_140049e40(pppuVar13); puVar11 = local_470; if (((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_14016f010)) && (puVar16 = local_470 + -2, puVar16 != (uint *)0x0)) { piVar7 = (int *)FUN_14003e7c0(pppuVar13,uVar4,plVar12,ppuVar22); local_3e0 = piVar7; FUN_14003d040(piVar7); local_3d8 = 1; puVar11 = puVar11 + -1; *puVar11 = *puVar11 - 1; if (*puVar11 == 0) { FUN_14003e8b0(puVar16); } FUN_14003d0d0((longlong)piVar7); local_3d8 = 0; } local_470 = (uint *)PTR_DAT_14016f010; if (*(int *)(param_1 + 0x100) < 4) { *(undefined4 *)(param_1 + 0x40) = 0; *(undefined4 *)(param_1 + 0x100) = 4; uVar4 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x70) + 0x1c0))(); *(undefined8 *)(param_1 + 0x80) = uVar4; *(undefined1 *)(param_1 + 0xc0) = 0; } FUN_14008a320((longlong *)&local_468); if ((local_460 != (undefined ***)0x0) && (local_458 < 0)) { /* WARNING: Subroutine does not return */ FUN_14003dec0(); } return; }