/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x140003f30 FUN_140003f30 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ undefined8 FUN_140003f30(longlong param_1,ulonglong *param_2,undefined2 *param_3,uint *param_4) { byte bVar1; longlong lVar2; ulonglong *puVar3; ulonglong *puVar4; ushort uVar5; int iVar6; int iVar7; BOOL BVar8; HANDLE hProcess; undefined2 *puVar9; char *pcVar10; longlong *plVar11; wchar_t *_Format; ulonglong *puVar12; undefined **ppuVar13; undefined2 *puVar14; bool bVar15; undefined1 auStack_2f8 [32]; DWORD local_2d8 [2]; uint local_2d0 [2]; undefined8 local_2c8; undefined8 local_2c0; undefined8 local_2b8; undefined8 local_2b0; undefined8 local_2a8; undefined8 local_2a0; undefined8 local_298; undefined8 local_290; undefined8 local_288; undefined8 local_280; undefined4 local_278; undefined8 local_268; ulonglong *local_260; ulonglong *local_258; undefined8 local_250; ulonglong local_248; undefined4 local_238 [10]; void *local_210; ulonglong local_1f8; undefined2 local_1e8; undefined6 uStack_1e6; undefined8 local_1d8; ulonglong local_1d0; undefined2 local_1c0; undefined6 uStack_1be; undefined8 local_1b0; ulonglong local_1a8; undefined4 local_198; uint local_194; void *local_160; undefined8 local_158; undefined8 local_150; undefined4 local_138 [10]; undefined2 local_110; undefined6 uStack_10e; undefined8 local_100; ulonglong local_f8; undefined2 local_e8; undefined6 uStack_e6; undefined8 local_d8; ulonglong local_d0; undefined2 local_c0; undefined6 uStack_be; undefined8 local_b0; ulonglong local_a8; int local_74; void *local_60; undefined8 local_58; undefined8 local_50; ulonglong local_38; local_268 = 0xfffffffffffffffe; local_38 = DAT_1401555a0 ^ (ulonglong)auStack_2f8; iVar6 = _kbhit(); if (iVar6 != 0) { puVar14 = (undefined2 *)0x0; do { iVar6 = _getch(); iVar6 = (int)(char)iVar6; if (*(char *)(param_1 + 0x48) != '\0') { iVar7 = toupper(iVar6); if (iVar7 == 0x55) { printf("Keyboard UnLocked\n"); *(undefined1 *)(param_1 + 0x48) = 0; ppuVar13 = &PTR_s_Server_Shutdown__14015aee8; do { uVar5 = GetAsyncKeyState(0xa0); if (((uVar5 & 0x8001) != 0) || (*(char *)(ppuVar13 + 1) == '\0')) { param_3 = (undefined2 *)*ppuVar13; param_2 = (ulonglong *)(ulonglong)(uint)(int)*(char *)(ppuVar13 + -1); printf(" \'%c\'\t: %s\n"); } ppuVar13 = ppuVar13 + 3; } while ((longlong)ppuVar13 < 0x14015b050); } goto LAB_1400047ca; } iVar7 = toupper(iVar6); switch(iVar7) { case 0x30: bVar15 = *(char *)(DAT_140162d68 + 0x171) == '\0'; *(bool *)(DAT_140162d68 + 0x171) = bVar15; pcVar10 = "Auto Revive On !!!\n"; if (!bVar15) { pcVar10 = "Auto Revive Off !!!\n"; } printf(pcVar10); param_2 = (ulonglong *)0x7; FUN_140006940(*(longlong *)(param_1 + 0xa0),7,param_3,(longlong)param_4); break; case 0x31: pcVar10 = "All Server On. \n"; printf("All Server On. \n"); FUN_140009890(pcVar10,param_2,param_3,param_4); param_2 = (ulonglong *)PTR_s_All_Server_On__14015afa8; printf("%s\n"); break; case 0x32: pcVar10 = "Disconnect Server On. \n"; printf("Disconnect Server On. \n"); FUN_140009bd0(pcVar10,param_2,param_3,param_4); param_2 = (ulonglong *)PTR_s_Disconnect_Server_On__14015afc0; printf("%s\n"); break; default: printf("........... Message : Unknown Control Command.\n"); break; case 0x35: local_260 = (ulonglong *)0x0; local_258 = (ulonglong *)0x0; local_250 = 0; FUN_14002ce60(DAT_140162d60,(ulonglong *)&local_260); puVar4 = local_258; puVar3 = local_260; param_2 = (ulonglong *)PTR_s_All_Server_Down__14015afd8; for (puVar12 = local_260; PTR_s_All_Server_Down__14015afd8 = (undefined *)param_2, puVar12 != puVar4; puVar12 = puVar12 + 0x1f) { FUN_140004950(local_238,(undefined4 *)puVar12); local_2d0[0] = 1; plVar11 = (longlong *)(*(longlong *)(param_1 + 0xa0) + 0x50); param_4 = local_2d0; param_3 = (undefined2 *)&DAT_1401555d0; (**(code **)(*plVar11 + 0x40))(plVar11,local_198); if (local_160 != (void *)0x0) { operator_delete(local_160); } local_160 = (void *)0x0; local_158 = 0; local_150 = 0; if (7 < local_1a8) { operator_delete((void *)CONCAT62(uStack_1be,local_1c0)); } local_1a8 = 7; local_1b0 = 0; local_1c0 = 0; if (7 < local_1d0) { operator_delete((void *)CONCAT62(uStack_1e6,local_1e8)); } local_1d0 = 7; local_1d8 = 0; local_1e8 = 0; if (7 < local_1f8) { operator_delete(local_210); } param_2 = (ulonglong *)PTR_s_All_Server_Down__14015afd8; } if (puVar3 != (ulonglong *)0x0) { FUN_140004b30(puVar3,puVar4); operator_delete(puVar3); param_2 = (ulonglong *)PTR_s_All_Server_Down__14015afd8; } goto LAB_140004442; case 0x38: local_260 = (ulonglong *)0x0; local_258 = (ulonglong *)0x0; local_250 = 0; FUN_14002ce60(DAT_140162d60,(ulonglong *)&local_260); puVar4 = local_258; puVar3 = local_260; for (puVar12 = local_260; puVar12 != puVar4; puVar12 = puVar12 + 0x1f) { FUN_140004950(local_138,(undefined4 *)puVar12); if (local_74 == 0) { _Format = L"OFF - "; LAB_1400044dc: wprintf(_Format); } else { if (local_74 == 1) { _Format = L"LOAD - "; goto LAB_1400044dc; } if (local_74 == 2) { _Format = L"BAD - "; goto LAB_1400044dc; } if (local_74 == 3) { _Format = L"GOOD - "; goto LAB_1400044dc; } } param_3 = &local_c0; if (7 < local_a8) { param_3 = (undefined2 *)CONCAT62(uStack_be,local_c0); } wprintf(L"\tCODE:[ %d ]\tNAME:[ %s ] \n"); if (local_60 != (void *)0x0) { operator_delete(local_60); } local_60 = (void *)0x0; local_58 = 0; local_50 = 0; if (7 < local_a8) { operator_delete((void *)CONCAT62(uStack_be,local_c0)); } local_a8 = 7; local_b0 = 0; local_c0 = 0; if (7 < local_d0) { operator_delete((void *)CONCAT62(uStack_e6,local_e8)); } local_d0 = 7; local_d8 = 0; local_e8 = 0; if (7 < local_f8) { operator_delete((void *)CONCAT62(uStack_10e,local_110)); } local_f8 = 7; local_100 = 0; local_110 = 0; } wprintf(L"ConnectServer Count : [ %d ] \n"); param_2 = (ulonglong *)PTR_s_Server_Information__14015aff0; if (puVar3 != (ulonglong *)0x0) { FUN_140004b30(puVar3,puVar4); operator_delete(puVar3); param_2 = (ulonglong *)PTR_s_Server_Information__14015aff0; } LAB_140004442: printf("%s\n"); break; case 0x39: local_260 = (ulonglong *)0x0; local_258 = (ulonglong *)0x0; local_250 = 0; FUN_14002ce60(DAT_140162d60,(ulonglong *)&local_260); puVar4 = local_258; puVar3 = local_260; for (puVar12 = local_260; puVar12 != puVar4; puVar12 = puVar12 + 0x1f) { FUN_140004950(local_238,(undefined4 *)puVar12); param_3 = (undefined2 *)(ulonglong)local_194; hProcess = OpenProcess(0x1f0fff,0,local_194); if (hProcess != (HANDLE)0x0) { BVar8 = GetExitCodeProcess(hProcess,local_2d8); if ((BVar8 != 0) && (local_2d8[0] == 0x103)) { TerminateProcess(hProcess,0); } CloseHandle(hProcess); } if (local_160 != (void *)0x0) { operator_delete(local_160); } local_160 = (void *)0x0; local_158 = 0; local_150 = 0; if (7 < local_1a8) { operator_delete((void *)CONCAT62(uStack_1be,local_1c0)); } local_1a8 = 7; local_1b0 = 0; local_1c0 = 0; if (7 < local_1d0) { operator_delete((void *)CONCAT62(uStack_1e6,local_1e8)); } local_1d0 = 7; local_1d8 = 0; local_1e8 = 0; if (7 < local_1f8) { operator_delete(local_210); } } if (puVar3 != (ulonglong *)0x0) { FUN_140004b30(puVar3,puVar4); operator_delete(puVar3); } param_2 = (ulonglong *)PTR_s_All_Server_Kill__14015b008; printf("%s\n"); break; case 0x45: *(undefined1 *)(param_1 + 0x60) = 0; printf("%s\n"); return 0; case 0x46: wprintf(L"-AGENT SERVER [CODE:%d]---------------------------------\n"); param_3 = (undefined2 *)(ulonglong)*(uint *)(*(longlong *)(param_1 + 0xa0) + 0x38); wprintf(L"PRIVATE NETWORK : ADDRESS[ %s ] PORT[ %d ]\n"); FUN_140001bf0(param_1 + 8); param_2 = (ulonglong *)PTR_s_Server_Info__14015af30; printf("%s\n"); break; case 0x4c: *(undefined1 *)(param_1 + 0x48) = 1; param_2 = (ulonglong *)PTR_s_Keyboard_Locked__14015af00; printf("%s\n"); break; case 0x4d: FUN_14002b820(DAT_140162d48); lVar2 = *(longlong *)(param_1 + 0xa8); if (lVar2 != 0) { bVar1 = *(byte *)(DAT_140162d48 + 0x17); param_4 = (uint *)(ulonglong)bVar1; puVar9 = puVar14; param_3 = puVar14; if (*(longlong *)(lVar2 + 0x10) - *(longlong *)(lVar2 + 8) >> 3 != 0) { do { *(byte *)(*(longlong *)(*(longlong *)(lVar2 + 8) + (longlong)puVar9) + 0x18) = bVar1; param_3 = (undefined2 *)(ulonglong)((int)param_3 + 1); puVar9 = puVar9 + 4; } while (param_3 < (undefined2 *) (*(longlong *)(lVar2 + 0x10) - *(longlong *)(lVar2 + 8) >> 3)); } } param_2 = (ulonglong *)PTR_s_CustomOption_Init__14015af90; printf("%s\n"); break; case 0x50: lVar2 = *(longlong *)(param_1 + 0xa0); if (lVar2 != 0) { local_288 = 0; local_2c0 = 0; local_2c8 = 0; local_2b0 = 0; local_2b8 = 0; local_290 = 0; local_298 = 0; local_2a0 = 0; local_2a8 = 0; local_280 = 0; local_278 = 0; if (*(longlong *)(lVar2 + 0x28) != 0) { (**(code **)(**(longlong **)(lVar2 + 0x28) + 0xb0)) (*(longlong **)(lVar2 + 0x28),&local_2c8); 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"); } } param_2 = (ulonglong *)PTR_s_Network_Status__14015af48; printf("%s\n"); break; case 0x52: DAT_140162cc4 = (uint)(DAT_140162cc4 == 0); param_3 = (undefined2 *)&DAT_14011b9ac; if (DAT_140162cc4 != 0) { param_3 = (undefined2 *)&DAT_14011b9a8; } param_2 = (ulonglong *)PTR_s_ShowFPS__14015af60; printf("%s %s\n"); break; case 0x54: printf("RetryConnectSession\n"); iVar7 = (int)(*(longlong *)(param_1 + 0x20) - *(longlong *)(param_1 + 0x18) >> 3); puVar9 = puVar14; if (0 < iVar7) { do { if (*(longlong *)(*(longlong *)(param_1 + 0x18) + (longlong)puVar9 * 8) != 0) { *(undefined1 *) (*(longlong *)(*(longlong *)(param_1 + 0x18) + (longlong)puVar9 * 8) + 0x1c) = 1; } puVar9 = (undefined2 *)((longlong)puVar9 + 1); } while ((longlong)puVar9 < (longlong)iVar7); } param_2 = (ulonglong *)PTR_s_AgentManager_Retry__14015af18; printf("%s\n"); } LAB_1400047ca: 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"); param_2 = FUN_1400dcb80((ulonglong *)&local_260); if (0xf < param_2[3]) { param_2 = (ulonglong *)*param_2; } printf("PROTOCOL : %s\n"); if (0xf < local_248) { operator_delete(local_260); } local_248 = 0xf; local_250 = 0; local_260 = (ulonglong *)((ulonglong)local_260 & 0xffffffffffffff00); printf("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n"); } iVar6 = _kbhit(); } while (iVar6 != 0); } return 2; }