/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400e5cc0 FUN_1400e5cc0 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1400e5cc0(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_1401ac5a0 ^ (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_1400d1840(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_1400bd3c0(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_1400bc930(param_2,pppuVar13,0x10); if ((char)uVar4 != '\0') { pppuVar13 = &local_410; puVar11 = param_2; uVar5 = FUN_1400bcfd0(param_2,pppuVar13,param_3,param_4); if ((((char)uVar5 != '\0') && (iVar17 = (int)local_410, -1 < iVar17)) && (iVar17 <= DAT_1401ac140)) { if (local_460 == (undefined ***)0x0) { puVar11 = local_468; if (iVar17 < 1) { if (local_468 == (uint *)0x0) goto LAB_1400e62f7; iVar17 = 0; } else if (local_468 == (uint *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,0,param_3,param_4); } FUN_1400146f0((longlong)local_468,iVar17,param_3); } else { if (local_458._4_4_ < iVar17) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_458 = CONCAT44(local_458._4_4_,iVar17); } pppuVar13 = local_460; if (local_460 == (undefined ***)0x0) { if (local_468 == (uint *)0x0) { LAB_1400e62f7: /* WARNING: Subroutine does not return */ FUN_1400d1900(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_1400bc930(param_2,pppuVar13,param_3); if ((char)uVar4 != '\0') { pppuVar13 = &local_428; uVar5 = FUN_1400bd360(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_1400a0f10(*(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_14006b350(piVar7); local_3a0 = 1; FUN_140093310((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_1400d1800((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_140009db0(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_14006ff80(local_368 + 2,plVar12,uVar1,param_4); local_298 = *(undefined4 *)(puVar8 + 1); local_294 = *(undefined2 *)((longlong)puVar8 + 0xc); puVar15 = local_348; FUN_1400b7290(*(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_14006b350(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_1401b6110; puVar15 = (undefined4 *)0x1; (**(code **)(*(longlong *) (*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x58) + 0x68) + 0x60))() ; FUN_14006b3e0((longlong)piVar18); } FUN_1400933c0((longlong)local_348,puVar15,puVar20,param_4); FUN_14006b3e0((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_140149958; puVar15 = (undefined4 *)0x1; FUN_1400af0e0(lVar6,1,L"서버와의 연결 성공. HostID=%d",param_4); } if (*(int *)(*(longlong *)(param_1 + 0x108) + 0x1578) == 0x32) { uVar2 = FUN_140076bf0(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_14006cb70((ulonglong)uVar3,(ulonglong)uVar14,puVar20,param_4); pppuVar13 = (undefined ***)PTR_DAT_1401ac010; local_438 = (undefined ***)PTR_DAT_1401ac010; 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_1400a0f10((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_1401ac010; } puVar20 = (undefined *)*plVar9; if ((undefined *)*plVar9 == (undefined *)0x0) { puVar20 = PTR_DAT_1401ac010; } ppppuVar10 = &local_438; FUN_140053d20((longlong *)ppppuVar10,L"Usage: %s ## %s ## %s",puVar20,param_4); if (((local_430 != (undefined *)0x0) && (local_430 != PTR_DAT_1401ac010)) && (local_430 + -8 != (undefined *)0x0)) { ppppuVar10 = (undefined ****) FUN_14006cb70(ppppuVar10,PTR_DAT_1401ac010,puVar20,param_4); local_388 = ppppuVar10; FUN_14006b350((int *)ppppuVar10); local_380 = 1; piVar7 = (int *)(local_430 + -4); *piVar7 = *piVar7 + -1; if (*piVar7 == 0) { FUN_14006cc60(local_430 + -8); } FUN_14006b3e0((longlong)ppppuVar10); } lpFilename = (LPWSTR)PTR_DAT_1401ac010; local_430 = PTR_DAT_1401ac010; if (((local_418 != (undefined *)0x0) && (local_418 != PTR_DAT_1401ac010)) && (local_418 + -8 != (undefined *)0x0)) { ppppuVar10 = (undefined ****) FUN_14006cb70(ppppuVar10,PTR_DAT_1401ac010,puVar20,param_4); local_3c8 = ppppuVar10; FUN_14006b350((int *)ppppuVar10); local_3c0 = 1; piVar7 = (int *)(local_418 + -4); *piVar7 = *piVar7 + -1; if (*piVar7 == 0) { FUN_14006cc60(local_418 + -8); } FUN_14006b3e0((longlong)ppppuVar10); } FUN_14006cb70(ppppuVar10,lpFilename,puVar20,param_4); pppuVar13 = local_438; local_448 = (undefined ***)PTR_DAT_1401ac010; if (PTR_DAT_1401ac010 == (undefined *)0x0) { local_448 = pppuVar21; } if (local_438 != (undefined ***)PTR_DAT_1401ac010) { piVar7 = (int *)FUN_14006cb70(ppppuVar10,lpFilename,puVar20,param_4); local_3b8 = piVar7; FUN_14006b350(piVar7); local_3b0 = 1; FUN_1400031e0((longlong *)&local_448,lpFilename,puVar20,param_4); local_448 = pppuVar13; if (((pppuVar13 != (undefined ***)PTR_DAT_1401ac010) && (pppuVar13 != (undefined ***)0x0)) && (pppuVar13 != (undefined ***)0x8)) { *(int *)((longlong)pppuVar13 + -4) = *(int *)((longlong)pppuVar13 + -4) + 1; } FUN_14006b3e0((longlong)piVar7); } ppppuVar10 = &local_448; FUN_14006fa80((longlong *)ppppuVar10,lpFilename,puVar20,param_4); } if (((pppuVar13 != (undefined ***)0x0) && (pppuVar13 != (undefined ***)PTR_DAT_1401ac010)) && (pppuVar13 + -1 != (undefined ***)0x0)) { piVar18 = (int *)FUN_14006cb70(ppppuVar10,lpFilename,puVar20,param_4); local_398 = piVar18; FUN_14006b350(piVar18); local_390 = 1; piVar7 = (int *)((longlong)pppuVar13 + -4); *piVar7 = *piVar7 + -1; if (*piVar7 == 0) { FUN_14006cc60(pppuVar13 + -1); } FUN_14006b3e0((longlong)piVar18); } } } FUN_1400d1800((longlong *)&local_468); if (local_460 == (undefined ***)0x0) { return; } if (-1 < local_458) { return; } /* WARNING: Subroutine does not return */ FUN_14006be00(); } } } } } FUN_14006cb70(puVar11,pppuVar13,param_3,param_4); local_470 = (uint *)PTR_DAT_1401ac010; uVar3 = FUN_14006c9f0(L"Bad format in NotifyServerConnectSuccess"); if ((local_470 != (uint *)0x0) && (pppuVar21 = (undefined ***)0x0, local_470 != (uint *)PTR_DAT_1401ac010)) { 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_1401ac010)) { uVar2 = local_470[-2]; } uVar19 = 1; if (1 < (int)uVar2) { uVar19 = uVar2; } uVar2 = uVar14; if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1401ac010)) { uVar2 = local_470[-2]; } if ((int)uVar2 < (int)uVar19) { if (local_470 == (uint *)0x0) { local_470 = (uint *)PTR_DAT_1401ac010; } if ((int)uVar19 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } if (uVar19 == 0) { FUN_1400031e0((longlong *)&local_470,PTR_DAT_1401ac010,pppuVar21,param_4); } else { uVar2 = uVar14; if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1401ac010)) { uVar2 = local_470[-2]; } if (uVar19 != uVar2) { puVar11 = (uint *)FUN_14006cbf0((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_1401ac010)) { uVar2 = local_470[-2]; } puVar16 = (uint *)PTR_DAT_1401ac010; if ((int)uVar19 < (int)uVar2) { LAB_1400e63fc: if (local_470 != (uint *)0x0) { puVar16 = local_470; } } else { uVar19 = uVar14; if (local_470 != (uint *)0x0) { if (local_470 != (uint *)PTR_DAT_1401ac010) { uVar19 = local_470[-2]; } goto LAB_1400e63fc; } } uVar5 = (ulonglong)uVar19; FUN_14006ca20(puVar11 + 2,puVar16,uVar19); FUN_1400031e0((longlong *)&local_470,puVar16,uVar5,param_4); local_470 = puVar11 + 2; } } } FUN_140002e40((longlong *)&local_470); puVar11 = local_470; if (local_470 == (uint *)0x0) { puVar11 = (uint *)PTR_DAT_1401ac010; } FUN_14006ca20(puVar11,L"Bad format in NotifyServerConnectSuccess",uVar3); puVar11 = local_470; if (local_470 == (uint *)0x0) { puVar11 = (uint *)PTR_DAT_1401ac010; } uVar2 = FUN_14006c9f0((short *)puVar11); uVar3 = 0; if (0 < (int)uVar2) { uVar3 = uVar2; } uVar2 = uVar14; if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1401ac010)) { uVar2 = local_470[-2]; } if (((int)uVar2 <= (int)uVar3) && (uVar3 = uVar14, local_470 != (uint *)0x0)) { if (local_470 == (uint *)PTR_DAT_1401ac010) goto LAB_1400e64b6; uVar3 = local_470[-2]; } if (((local_470 != (uint *)PTR_DAT_1401ac010) && (local_470 != (uint *)0x0)) && (local_470 + -2 != (uint *)0x0)) { local_470[-2] = uVar3; *(undefined2 *)((longlong)local_470 + (longlong)(int)uVar3 * 2) = 0; } LAB_1400e64b6: local_400 = 0; local_3f8 = 0; local_3f0 = 0; local_3e8 = 0; local_408 = Proud::ByteArray::vftable; ppuVar22 = &local_470; plVar12 = FUN_140078c10(&local_3d0,8,1,(longlong *)ppuVar22,(longlong)&local_408); uVar4 = 0x1f; FUN_1400ba2f0(*(longlong **)(param_1 + 0x108),(undefined4 *)0x1f,plVar12,ppuVar22); pppuVar13 = &local_408; FUN_140078360(pppuVar13); puVar11 = local_470; if (((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1401ac010)) && (puVar16 = local_470 + -2, puVar16 != (uint *)0x0)) { piVar7 = (int *)FUN_14006cb70(pppuVar13,uVar4,plVar12,ppuVar22); local_3e0 = piVar7; FUN_14006b350(piVar7); local_3d8 = 1; puVar11 = puVar11 + -1; *puVar11 = *puVar11 - 1; if (*puVar11 == 0) { FUN_14006cc60(puVar16); } FUN_14006b3e0((longlong)piVar7); local_3d8 = 0; } local_470 = (uint *)PTR_DAT_1401ac010; 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_1400d1800((longlong *)&local_468); if ((local_460 != (undefined ***)0x0) && (local_458 < 0)) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } return; }