/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x140004960 FUN_140004960 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ undefined8 FUN_140004960(longlong param_1) { undefined1 uVar1; longlong *plVar2; longlong lVar3; uint uVar4; ushort uVar5; int iVar6; int iVar7; longlong lVar8; longlong lVar9; ulonglong uVar10; ulonglong uVar11; undefined **ppuVar12; longlong lVar13; undefined1 auStack_e8 [32]; undefined8 local_c8; undefined8 local_c0; undefined8 local_b8; undefined8 local_b0; undefined8 local_a8; undefined8 local_a0; undefined8 local_98; undefined8 local_90; undefined8 local_88; undefined8 local_80; undefined4 local_78; undefined8 local_68; undefined1 local_60; undefined7 uStack_5f; undefined8 local_50; ulonglong local_48; ulonglong local_38; local_68 = 0xfffffffffffffffe; local_38 = DAT_1401ac5a0 ^ (ulonglong)auStack_e8; iVar6 = _kbhit(); if (iVar6 != 0) { lVar13 = 0; do { iVar6 = _getch(); iVar6 = (int)(char)iVar6; if (*(int *)(param_1 + 0x40) == 0) { iVar7 = toupper(iVar6); switch(iVar7) { case 0x45: DAT_1401bcf14 = 1; printf("%s\n"); return 0; case 0x46: DAT_1401bcf10 = 1; printf("%s\n"); break; default: printf("........... Message : Unknown Control Command.\n"); break; case 0x4c: *(undefined4 *)(param_1 + 0x40) = 1; printf("%s\n"); break; case 0x4d: FUN_140062910(DAT_1401bd020); lVar9 = DAT_1401bd020; if (*(longlong *)(param_1 + 0x30) != 0) { *(undefined1 *)(*(longlong *)(param_1 + 0x30) + 0x18) = *(undefined1 *)(DAT_1401bd020 + 0x16); } uVar4 = DAT_1401bcf24; plVar2 = *(longlong **)(param_1 + 0x60); uVar11 = (ulonglong)DAT_1401bcf24; if ((plVar2 != (longlong *)0x0) && (uVar1 = *(undefined1 *)(lVar9 + 8), lVar8 = lVar13, uVar10 = uVar11, 0 < (int)DAT_1401bcf24)) { do { lVar3 = *plVar2; if (*(longlong *)(lVar8 + lVar3) != 0) { *(undefined1 *)(*(longlong *)(lVar8 + lVar3) + 0x18) = uVar1; } uVar10 = uVar10 - 1; lVar8 = lVar8 + 8; } while (uVar10 != 0); } plVar2 = *(longlong **)(param_1 + 0x68); if ((plVar2 != (longlong *)0x0) && (uVar1 = *(undefined1 *)(lVar9 + 9), lVar8 = lVar13, uVar10 = uVar11, 0 < (int)uVar4)) { do { lVar3 = *plVar2; if (*(longlong *)(lVar8 + lVar3) != 0) { *(undefined1 *)(*(longlong *)(lVar8 + lVar3) + 0x18) = uVar1; } uVar10 = uVar10 - 1; lVar8 = lVar8 + 8; } while (uVar10 != 0); } plVar2 = *(longlong **)(param_1 + 0x70); if ((plVar2 != (longlong *)0x0) && (uVar1 = *(undefined1 *)(lVar9 + 10), lVar8 = lVar13, uVar10 = uVar11, 0 < (int)uVar4)) { do { lVar3 = *plVar2; if (*(longlong *)(lVar8 + lVar3) != 0) { *(undefined1 *)(*(longlong *)(lVar8 + lVar3) + 0x18) = uVar1; } uVar10 = uVar10 - 1; lVar8 = lVar8 + 8; } while (uVar10 != 0); } plVar2 = *(longlong **)(param_1 + 0x78); if ((plVar2 != (longlong *)0x0) && (uVar1 = *(undefined1 *)(lVar9 + 0xb), lVar9 = lVar13, 0 < (int)uVar4)) { do { lVar8 = *plVar2; if (*(longlong *)(lVar8 + lVar9) != 0) { *(undefined1 *)(*(longlong *)(lVar8 + lVar9) + 0x18) = uVar1; } uVar11 = uVar11 - 1; lVar9 = lVar9 + 8; } while (uVar11 != 0); } printf("%s\n"); break; case 0x50: lVar9 = *(longlong *)(param_1 + 0x58); if (lVar9 != 0) { local_88 = 0; local_c0 = 0; local_c8 = 0; local_b0 = 0; local_b8 = 0; local_90 = 0; local_98 = 0; local_a0 = 0; local_a8 = 0; local_80 = 0; local_78 = 0; if (*(longlong *)(lVar9 + 0x40) != 0) { (**(code **)(**(longlong **)(lVar9 + 0x40) + 0xb0)) (*(longlong **)(lVar9 + 0x40),&local_c8); printf("--------------------------------------------------\n"); printf("%I64d totalTcpReceiveCount\n"); printf("%I64d totalTcpReceiveBytes\n"); printf("%I64d totalTcpSendCount\n"); printf("%I64d totalTcpSendBytes\n"); printf("%d p2pConnectionPairCount\n"); printf("%d p2pDirectConnectionPairCount\n"); printf("%d clientCount\n"); printf("--------------------------------------------------\n"); } } printf("%s\n"); break; case 0x52: DAT_1401bcf18 = (uint)(DAT_1401bcf18 == 0); printf("%s %s\n"); break; case 0x54: DAT_1401bcf0f = DAT_1401bcf0f == '\0'; printf("%s %s\n"); break; case 0x56: if ((DAT_1401bd4f4 & 1) == 0) { DAT_1401bd4f4 = DAT_1401bd4f4 | 1; FUN_14011b100(); atexit((_func_5014 *)&LAB_14012f3d0); } FUN_140119840(); printf("%s\n"); } } else { iVar7 = toupper(iVar6); if (iVar7 == 0x55) { *(undefined4 *)(param_1 + 0x40) = 0; printf("%s\n"); ppuVar12 = &PTR_s_Server_Shutdown__1401b3458; do { uVar5 = GetAsyncKeyState(0xa0); if (((uVar5 & 0x8001) != 0) || (*(char *)(ppuVar12 + 1) == '\0')) { printf(" \'%c\'\t: %s\n"); } ppuVar12 = ppuVar12 + 3; } while ((longlong)ppuVar12 < 0x1401b3548); } } iVar6 = toupper(iVar6); if (iVar6 == 0x49) { printf("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n"); GetCurrentProcessId(); printf("ProcessID : %d\n"); printf("SVN : %d\n"); printf("Resource : %d\n"); printf("Build Date : %s\n"); FUN_140118c70((ulonglong *)&local_60); printf("PROTOCOL : %s\n"); if (0xf < local_48) { operator_delete((void *)CONCAT71(uStack_5f,local_60)); } local_48 = 0xf; local_50 = 0; local_60 = 0; printf("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n"); } iVar6 = _kbhit(); } while (iVar6 != 0); } return 2; }