/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401f0620 FUN_1401f0620 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1401f0620(longlong param_1,undefined8 param_2) { int *piVar1; char cVar2; int iVar3; uint uVar4; uint uVar5; longlong lVar6; undefined8 uVar7; undefined8 uVar8; longlong *plVar9; uint *puVar10; longlong *plVar11; ulonglong uVar12; undefined *puVar13; uint *puVar14; uint uVar15; undefined *puVar16; undefined *puVar17; uint uVar18; undefined1 auStack_4a8 [32]; undefined ***local_488; undefined1 local_478 [8]; uint *local_470; longlong 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; ulonglong local_410; undefined **local_408; undefined8 local_400; undefined8 local_3f8; undefined8 local_3f0; undefined8 local_3e8; undefined8 local_3e0; undefined1 local_3d8; undefined1 local_3d0 [8]; undefined8 local_3c8; undefined1 local_3c0; undefined8 local_3b8; undefined1 local_3b0; undefined8 local_3a8; undefined1 local_3a0; undefined8 local_398; undefined1 local_390; undefined8 local_388; undefined1 local_380; longlong local_378; undefined1 local_370; undefined1 local_368 [8]; undefined8 local_360; undefined1 local_358 [16]; undefined4 local_348 [20]; longlong 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_360 = 0xfffffffffffffffe; local_38 = DAT_1403463c0 ^ (ulonglong)auStack_4a8; (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x78) + 0x10))(); puVar17 = (undefined *)0x0; local_458 = 0; local_460 = (undefined *)0x0; local_468 = 0; local_468 = FUN_14016d120(); *(undefined8 *)(local_468 + 0x28) = 1; local_428 = Proud::AddrPort::vftable; local_420 = 0; local_41c = 0; cVar2 = FUN_14016be00(param_2,local_440); if (cVar2 != '\0') { local_258 = 0; local_254 = 0; local_250 = 0; local_24c = 0; cVar2 = FUN_14016b370(param_2,&local_258,0x10); if ((((cVar2 != '\0') && (cVar2 = FUN_14016ba10(param_2,&local_410), cVar2 != '\0')) && (iVar3 = (int)local_410, -1 < iVar3)) && (iVar3 <= DAT_140344d70)) { if (local_460 == (undefined *)0x0) { if (iVar3 < 1) { if (local_468 == 0) goto LAB_1401f0c57; uVar12 = 0; } else { if (local_468 == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } uVar12 = local_410 & 0xffffffff; } FUN_14004f0e0(local_468,uVar12); } else { if (local_458._4_4_ < iVar3) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_458 = CONCAT44(local_458._4_4_,iVar3); } puVar13 = local_460; if (local_460 == (undefined *)0x0) { if (local_468 == 0) { LAB_1401f0c57: /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } puVar13 = puVar17; if (*(int *)(local_468 + 0x18) != 0) { puVar13 = *(undefined **)(local_468 + 0x10); } } cVar2 = FUN_14016b370(param_2,puVar13,local_410 & 0xffffffff); if ((cVar2 != '\0') && (cVar2 = FUN_14016bda0(param_2,&local_428), cVar2 != '\0')) { *(undefined4 *)(*(longlong *)(param_1 + 0x108) + 0x1578) = local_440[0]; plVar11 = *(longlong **)(*(longlong *)(param_1 + 0x108) + 0x15d8); if ((plVar11 != (longlong *)0x0) && (*plVar11 != 0)) { lVar6 = FUN_1401c71f0(); *(undefined4 *)(lVar6 + 0x108) = local_420; *(undefined2 *)(lVar6 + 0x10c) = local_41c; } uVar7 = (**(code **)(**(longlong **)(param_1 + 0x108) + 0x58))(); local_3a8 = uVar7; FUN_14016db50(uVar7); local_3a0 = 1; FUN_14018b960(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_14016d0e0(&local_2f8); if (local_468 != 0) { *(longlong *)(local_468 + 0x28) = *(longlong *)(local_468 + 0x28) + 1; local_2f8 = local_468; } } local_2d8 = 1; uVar8 = FUN_14004e660(local_368,*(longlong *)(param_1 + 0x108) + 0x1588); lVar6 = FUN_14016fcb0(local_358,uVar8, *(undefined2 *)(*(longlong *)(param_1 + 0x108) + 0x1590)); local_298 = *(undefined4 *)(lVar6 + 8); local_294 = *(undefined2 *)(lVar6 + 0xc); FUN_1401dcb50(*(undefined8 *)(param_1 + 0x108),local_348); 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) { lVar6 = *(longlong *)(*(longlong *)(param_1 + 0x108) + 0x58) + 0x98; local_378 = lVar6; FUN_14016db50(lVar6); local_370 = 1; local_478[0] = 0; plVar11 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x70); local_450[0] = (**(code **)(*plVar11 + 0x108))(plVar11,local_478); plVar11 = (longlong *)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x58) + 0x68); (**(code **)(*plVar11 + 0x60))(plVar11,1,&DAT_14034c4b0,local_450); FUN_14016dbe0(lVar6); } FUN_14018ba10(local_348); FUN_14016dbe0(uVar7); lVar6 = *(longlong *)(param_1 + 0x108); if ((*(char *)(lVar6 + 0x1790) != '\0') || (*(int *)(lVar6 + 0x6c8) != 0)) { FUN_1401d4c70(lVar6,1,&DAT_140293a18,*(undefined4 *)(lVar6 + 0x1578)); } if ((*(int *)(*(longlong *)(param_1 + 0x108) + 0x1578) == 0x32) && (iVar3 = FUN_14019ef80(), iVar3 == (iVar3 / 3 + (iVar3 >> 0x1f) + (int)(((longlong)iVar3 / 3 + ((longlong)iVar3 >> 0x3f) & 0xffffffffU) >> 0x1f)) * 3)) { FUN_14016d8c0(); puVar13 = PTR_DAT_1403440a0; local_438 = PTR_DAT_1403440a0; GetModuleFileNameW((HMODULE)0x0,local_248,0x104); plVar11 = *(longlong **)(*(longlong *)(param_1 + 0x108) + 0x15d8); if ((plVar11 != (longlong *)0x0) && (*plVar11 != 0)) { lVar6 = FUN_1401c71f0(); plVar11 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x70); plVar11 = (longlong *)(**(code **)(*plVar11 + 0xb0))(plVar11,&local_418); plVar9 = (longlong *) (*(code *)**(undefined8 **)(lVar6 + 0x100)) ((undefined8 *)(lVar6 + 0x100),&local_430); puVar13 = (undefined *)*plVar11; if ((undefined *)*plVar11 == (undefined *)0x0) { puVar13 = PTR_DAT_1403440a0; } puVar16 = (undefined *)*plVar9; if ((undefined *)*plVar9 == (undefined *)0x0) { puVar16 = PTR_DAT_1403440a0; } local_488 = (undefined ***)local_248; FUN_14004c020(&local_438,L"Usage: %s ## %s ## %s",puVar16,puVar13); if (((local_430 != (undefined *)0x0) && (local_430 != PTR_DAT_1403440a0)) && (local_430 + -8 != (undefined *)0x0)) { uVar7 = FUN_14016d8c0(); local_388 = uVar7; FUN_14016db50(uVar7); local_380 = 1; piVar1 = (int *)(local_430 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(local_430 + -8); } FUN_14016dbe0(uVar7); } local_430 = PTR_DAT_1403440a0; if (((local_418 != (undefined *)0x0) && (local_418 != PTR_DAT_1403440a0)) && (local_418 + -8 != (undefined *)0x0)) { uVar7 = FUN_14016d8c0(); local_3c8 = uVar7; FUN_14016db50(uVar7); local_3c0 = 1; piVar1 = (int *)(local_418 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(local_418 + -8); } FUN_14016dbe0(uVar7); } FUN_14016d8c0(); puVar13 = local_438; local_448 = PTR_DAT_1403440a0; if (PTR_DAT_1403440a0 == (undefined *)0x0) { local_448 = puVar17; } if (local_438 != PTR_DAT_1403440a0) { uVar7 = FUN_14016d8c0(); local_3b8 = uVar7; FUN_14016db50(uVar7); local_3b0 = 1; FUN_14004eb70(&local_448); local_448 = puVar13; if (((puVar13 != PTR_DAT_1403440a0) && (puVar13 != (undefined *)0x0)) && (puVar13 != (undefined *)0x8)) { *(int *)(puVar13 + -4) = *(int *)(puVar13 + -4) + 1; } FUN_14016dbe0(uVar7); } FUN_1401be230(&local_448); } if (((puVar13 != (undefined *)0x0) && (puVar13 != PTR_DAT_1403440a0)) && (puVar13 + -8 != (undefined *)0x0)) { uVar7 = FUN_14016d8c0(); local_398 = uVar7; FUN_14016db50(uVar7); local_390 = 1; piVar1 = (int *)(puVar13 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(puVar13 + -8); } FUN_14016dbe0(uVar7); } } FUN_14016d0e0(&local_468); if (local_460 == (undefined *)0x0) { return; } if (-1 < local_458) { return; } /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } } } FUN_14016d8c0(); local_470 = (uint *)PTR_DAT_1403440a0; uVar4 = FUN_14016d740(L"Bad format in NotifyServerConnectSuccess"); if ((local_470 != (uint *)0x0) && (puVar17 = (undefined *)0x0, local_470 != (uint *)PTR_DAT_1403440a0)) { puVar17 = (undefined *)(ulonglong)local_470[-2]; } uVar18 = 0; uVar5 = uVar4; if ((((int)uVar4 <= (int)puVar17) && (uVar5 = uVar18, local_470 != (uint *)0x0)) && (local_470 != (uint *)PTR_DAT_1403440a0)) { uVar5 = local_470[-2]; } uVar15 = 1; if (1 < (int)uVar5) { uVar15 = uVar5; } uVar5 = uVar18; if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1403440a0)) { uVar5 = local_470[-2]; } if ((int)uVar5 < (int)uVar15) { if (local_470 == (uint *)0x0) { local_470 = (uint *)PTR_DAT_1403440a0; } if ((int)uVar15 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if (uVar15 == 0) { FUN_14004eb70(&local_470); } else { uVar5 = uVar18; if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1403440a0)) { uVar5 = local_470[-2]; } if (uVar15 != uVar5) { puVar10 = (uint *)FUN_14016d940((longlong)(int)uVar15 * 2 + 10); if (puVar10 != (uint *)0x0) { *puVar10 = 0; puVar10[1] = 1; } *puVar10 = uVar15; uVar5 = uVar18; if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1403440a0)) { uVar5 = local_470[-2]; } puVar14 = (uint *)PTR_DAT_1403440a0; if ((int)uVar15 < (int)uVar5) { LAB_1401f0d5c: if (local_470 != (uint *)0x0) { puVar14 = local_470; } } else { uVar15 = uVar18; if (local_470 != (uint *)0x0) { if (local_470 != (uint *)PTR_DAT_1403440a0) { uVar15 = local_470[-2]; } goto LAB_1401f0d5c; } } FUN_14016d770(puVar10 + 2,puVar14,uVar15); FUN_14004eb70(&local_470); local_470 = puVar10 + 2; } } } FUN_14004e850(&local_470); puVar10 = local_470; if (local_470 == (uint *)0x0) { puVar10 = (uint *)PTR_DAT_1403440a0; } FUN_14016d770(puVar10,L"Bad format in NotifyServerConnectSuccess",uVar4); puVar10 = local_470; if (local_470 == (uint *)0x0) { puVar10 = (uint *)PTR_DAT_1403440a0; } uVar5 = FUN_14016d740(puVar10); uVar4 = 0; if (0 < (int)uVar5) { uVar4 = uVar5; } uVar5 = uVar18; if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1403440a0)) { uVar5 = local_470[-2]; } if (((int)uVar5 <= (int)uVar4) && (uVar4 = uVar18, local_470 != (uint *)0x0)) { if (local_470 == (uint *)PTR_DAT_1403440a0) goto LAB_1401f0e16; uVar4 = local_470[-2]; } if (((local_470 != (uint *)PTR_DAT_1403440a0) && (local_470 != (uint *)0x0)) && (local_470 + -2 != (uint *)0x0)) { local_470[-2] = uVar4; *(undefined2 *)((longlong)local_470 + (longlong)(int)uVar4 * 2) = 0; } LAB_1401f0e16: local_400 = 0; local_3f8 = 0; local_3f0 = 0; local_3e8 = 0; local_408 = Proud::ByteArray::vftable; local_488 = &local_408; uVar7 = FUN_140198f80(local_3d0,8,1,&local_470); FUN_1401dfbb0(*(undefined8 *)(param_1 + 0x108),0x1f,uVar7); FUN_14019a9e0(&local_408); puVar10 = local_470; if (((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1403440a0)) && (puVar14 = local_470 + -2, puVar14 != (uint *)0x0)) { uVar7 = FUN_14016d8c0(); local_3e0 = uVar7; FUN_14016db50(uVar7); local_3d8 = 1; puVar10 = puVar10 + -1; *puVar10 = *puVar10 - 1; if (*puVar10 == 0) { FUN_14016d970(puVar14); } FUN_14016dbe0(uVar7); local_3d8 = 0; } local_470 = (uint *)PTR_DAT_1403440a0; if (*(int *)(param_1 + 0x100) < 4) { *(undefined4 *)(param_1 + 0x40) = 0; *(undefined4 *)(param_1 + 0x100) = 4; uVar7 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x70) + 0x1c0))(); *(undefined8 *)(param_1 + 0x80) = uVar7; *(undefined1 *)(param_1 + 0xc0) = 0; } FUN_14016d0e0(&local_468); if ((local_460 != (undefined *)0x0) && (local_458 < 0)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } return; }