/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 pseudocode via REA, ev_2fa3bc1da1e9e82a4bd2859ca38ee1636f1ade7ba45372348ff4288d16c2f449 * Decompiler output, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ /* WARNING: Globals starting with '_' overlap smaller symbols at the same address */ undefined8 FUN_1400037a0(longlong param_1,undefined8 **param_2,undefined8 *param_3,uint *param_4) { int *piVar1; double dVar2; char cVar3; undefined8 *puVar4; undefined1 auVar5 [16]; bool bVar6; bool bVar7; longlong *plVar8; BOOL BVar9; wchar_t *pwVar10; wchar_t *pwVar11; ulonglong uVar12; longlong *plVar13; wchar_t *pwVar14; char *pcVar15; ulonglong *puVar16; longlong *plVar17; undefined2 *puVar18; wchar_t *pwVar19; longlong lVar20; undefined4 uVar21; undefined4 uVar22; undefined4 uVar23; undefined4 uVar24; undefined4 uVar25; undefined1 auStack_2a8 [32]; longlong *local_288; wchar_t *local_280; LARGE_INTEGER local_278; undefined8 *local_270; wchar_t *local_268; wchar_t *local_260; int *local_258; undefined1 local_250; undefined8 local_248; undefined2 local_238; undefined1 local_236 [158]; undefined1 local_198 [160]; undefined8 *local_f8; undefined2 local_f0; undefined6 uStack_ee; undefined8 local_e0; ulonglong local_d8; undefined2 local_c8; undefined6 uStack_c6; undefined8 local_b8; ulonglong local_b0; ulonglong local_98; local_248 = 0xfffffffffffffffe; local_98 = DAT_1401555a0 ^ (ulonglong)auStack_2a8; FUN_140010960(L"# Agent Startup #\n\n",param_2,param_3,param_4); CoInitialize((LPVOID)0x0); FUN_140010aa0(L"+ Prepare Startup\n",param_2,param_3,param_4); local_278 = (LARGE_INTEGER)operator_new(0xb8); pwVar19 = (wchar_t *)0x0; pwVar10 = pwVar19; if ((undefined8 *)local_278.QuadPart != (undefined8 *)0x0) { pwVar10 = (wchar_t *)FUN_140005020((undefined8 *)local_278,param_2,param_3,param_4); } if (pwVar10 == (wchar_t *)0x0) { local_288 = (longlong *)0x0; } else { local_288 = (longlong *)FUN_140030280(0x10); local_288[1] = 1; *local_288 = (longlong)pwVar10; } plVar17 = local_288; pwVar11 = operator_new(0x68); pwVar10 = pwVar19; local_280 = pwVar11; if (pwVar11 != (wchar_t *)0x0) { if (plVar17 != (longlong *)0x0) { pwVar10 = (wchar_t *)*plVar17; } *(wchar_t **)pwVar11 = pwVar10; pwVar11[4] = L'\0'; pwVar11[5] = L'\0'; pwVar11[6] = L'\0'; pwVar11[7] = L'\0'; pwVar11[8] = L'\0'; pwVar11[9] = L'\0'; pwVar11[10] = L'\0'; pwVar11[0xb] = L'\0'; pwVar11[0xc] = L'\0'; pwVar11[0xd] = L'\0'; pwVar11[0xe] = L'\0'; pwVar11[0xf] = L'\0'; uVar12 = FUN_14002e790(); param_2 = (undefined8 **)(uVar12 & 0xffffffff); param_3 = (undefined8 *)CONCAT71((int7)((ulonglong)param_3 >> 8),1); FUN_14002e600((undefined4 *)(pwVar11 + 0x14),(ulonglong)param_2,param_3,param_4); FUN_140007960((longlong)pwVar11); pwVar10 = pwVar11; } if (pwVar10 == (wchar_t *)0x0) { local_280 = (wchar_t *)0x0; } else { local_280 = (wchar_t *)FUN_140030280(0x10); *(undefined8 *)((longlong)local_280 + 8) = 1; *(wchar_t **)local_280 = pwVar10; } pwVar10 = local_280; pwVar11 = pwVar19; if (plVar17 != (longlong *)0x0) { pwVar11 = (wchar_t *)*plVar17; } *(wchar_t **)(param_1 + 0xa0) = pwVar11; pwVar11 = pwVar19; if (local_280 != (wchar_t *)0x0) { pwVar11 = *(wchar_t **)local_280; } *(wchar_t **)(param_1 + 0xa8) = pwVar11; pwVar11 = pwVar19; if (local_280 != (wchar_t *)0x0) { pwVar11 = *(wchar_t **)local_280; } FUN_140007960((longlong)pwVar11); local_f8 = (undefined8 *)0x0; local_d8 = 7; local_e0 = 0; local_f0 = 0; local_b0 = 7; local_b8 = 0; local_c8 = 0; if (*(longlong *)(DAT_140162d68 + 0x1c8) != 0) { auVar5._8_8_ = 0; auVar5._0_8_ = *(ulonglong *)(DAT_140162d68 + 0x1b0); param_2 = SUB168((ZEXT816(0) << 0x40 | ZEXT816(0x15)) % auVar5,0); local_270 = (undefined8 *)(*(longlong *)(DAT_140162d68 + 0x1a8) + (longlong)param_2 * 8); for (local_268 = (wchar_t *)*local_270; local_268 != (wchar_t *)0x0; local_268 = *(wchar_t **)local_268) { if ((char)local_268[4] == '\x15') { if (local_268 != (wchar_t *)0x0) goto LAB_1400039c4; break; } } } local_270 = (undefined8 *)0x0; local_268 = pwVar19; LAB_1400039c4: if ((local_268 != (wchar_t *)0x0) && (puVar4 = *(undefined8 **)(local_268 + 8), puVar4 != *(undefined8 **)(local_268 + 0xc))) { local_f8 = (undefined8 *)*puVar4; FUN_140001600((longlong *)&local_f0,puVar4 + 1,0,0xffffffffffffffff); param_4 = (uint *)0xffffffffffffffff; param_3 = (undefined8 *)0x0; FUN_140001600((longlong *)&local_c8,puVar4 + 6,0,0xffffffffffffffff); param_2 = &local_f8; FUN_140007a80(*(undefined8 **)(param_1 + 0xa8),param_2,param_3,(undefined8 *)param_4); lVar20 = *(longlong *)(param_1 + 0xa8); piVar1 = (int *)(lVar20 + 0x28); local_258 = piVar1; FUN_14002e6e0(piVar1); plVar13 = *(longlong **)(lVar20 + 8); if (*plVar13 == 0) { FUN_14002e770((longlong)piVar1); local_250 = 0; } else { lVar20 = *plVar13; FUN_14002e770((longlong)piVar1); local_250 = 0; if (lVar20 != 0) { cVar3 = *(char *)(lVar20 + 0x88); while (cVar3 == '\0') { FUN_1400023e0(lVar20); cVar3 = *(char *)(lVar20 + 0x88); } } } } pwVar11 = pwVar19; if (plVar17 != (longlong *)0x0) { pwVar11 = (wchar_t *)*plVar17; } FUN_140005360((longlong)pwVar11,param_2,param_3,(longlong)param_4); pwVar11 = pwVar19; if (plVar17 != (longlong *)0x0) { pwVar11 = (wchar_t *)*plVar17; } *(undefined8 *)(pwVar11 + 0x24) = *(undefined8 *)(param_1 + 0xa8); FUN_140010960(L"\n # Agent Running... #\n",param_2,param_3,param_4); plVar13 = operator_new(0x18); if (plVar13 == (longlong *)0x0) { plVar13 = (longlong *)0x0; } else { *plVar13 = (longlong)TimeSourceHRWin32::vftable; BVar9 = QueryPerformanceFrequency(&local_278); if (BVar9 == 0) { *(undefined1 *)(plVar13 + 2) = 0; GetLastError(); } else { *(undefined1 *)(plVar13 + 2) = 1; plVar13[1] = (longlong)(1.0 / (double)local_278.QuadPart); } } plVar8 = DAT_140162d50; if ((undefined8 *)DAT_140162d50[2] != (undefined8 *)0x0) { (*(code *)**(undefined8 **)DAT_140162d50[2])(); } plVar8[2] = (longlong)plVar13; if (plVar13 != (longlong *)0x0) { lVar20 = (**(code **)(*plVar13 + 8))(plVar13); plVar8[6] = lVar20; plVar8[7] = lVar20; } plVar8[0x12] = 0x3ff0000000000000; pwVar14 = operator_new(0x28); pwVar11 = pwVar19; local_260 = pwVar14; if (pwVar14 != (wchar_t *)0x0) { *(undefined ***)pwVar14 = Magi::Timer::vftable; plVar13 = DAT_140162d50; *(longlong **)(pwVar14 + 4) = DAT_140162d50; pwVar14[8] = L'\0'; pwVar14[9] = L'\0'; pwVar14[10] = L'\0'; pwVar14[0xb] = L'\0'; pwVar14[0xc] = L'\0'; pwVar14[0xd] = L'\0'; pwVar14[0xe] = L'\0'; pwVar14[0xf] = L'\0'; *(undefined1 *)(pwVar14 + 0x10) = 0; pwVar14[0x12] = L'\0'; pwVar14[0x13] = L'㾀'; (**(code **)(*plVar13 + 0x10))(); pwVar11 = pwVar14; } *(wchar_t **)(param_1 + 0x50) = pwVar11; bVar6 = true; local_238 = 0; memset(local_236,0,0x9e); puVar16 = (ulonglong *)0x0; puVar18 = (undefined2 *)0xa0; memset(local_198,0,0xa0); uVar21 = 0; uVar23 = 0; FUN_1400271e0(DAT_140162d68); pcVar15 = *(char **)(DAT_140162d58 + 8); do { pwVar11 = pwVar19; if (pcVar15 == *(char **)(DAT_140162d58 + 0x10)) { LAB_140003c4a: FUN_140009780(pwVar11); FUN_140001dc0(param_1 + 8); bVar7 = false; cVar3 = *(char *)(param_1 + 0x60); uVar24 = uVar21; uVar25 = uVar23; while (cVar3 != '\0') { FUN_1400dc520((longlong)DAT_140162d50); dVar2 = *(double *)(*(longlong *)(param_1 + 0x50) + 0x10); if (((0.0 < *(double *)(DAT_140162d68 + 0x178)) && (0.0 < dVar2 - *(double *)(DAT_140162d68 + 0x178))) && (bVar6)) { bVar6 = false; pcVar15 = "Start Auto Server On. \n"; printf("Start Auto Server On. \n"); FUN_140009bd0(pcVar15,puVar16,puVar18,param_4); } FUN_140007da0(*(longlong *)(param_1 + 0xa8),dVar2); uVar22 = (undefined4)((ulonglong)dVar2 >> 0x20); if (1.0 <= dVar2 - (double)CONCAT44(uVar23,uVar21)) { if (DAT_140162cc4 != 0) { puVar16 = (ulonglong *)&DAT_14011b7b4; if (bVar7) { puVar16 = (ulonglong *)&DAT_14011b7b0; } puVar18 = (undefined2 *)(ulonglong)DAT_140162cc8; printf("[ %s ] FPS[ %d ]\n"); bVar7 = !bVar7; } _DAT_140162ccc = DAT_140162cc8; DAT_140162cc8 = 0; uVar21 = SUB84(dVar2,0); uVar23 = uVar22; } if (0.10000000149011612 <= dVar2 - (double)CONCAT44(uVar25,uVar24)) { DAT_140162cc8 = DAT_140162cc8 + 1; FUN_140003f30(param_1,puVar16,puVar18,param_4); pwVar11 = pwVar19; if (plVar17 != (longlong *)0x0) { pwVar11 = (wchar_t *)*plVar17; } FUN_1400053e0((longlong)pwVar11,dVar2); uVar24 = SUB84(dVar2,0); uVar25 = uVar22; } *(double *)(param_1 + 0x58) = dVar2; Sleep(1); cVar3 = *(char *)(param_1 + 0x60); } FUN_140010aa0(L"+ Prepare Stop\n",puVar16,puVar18,param_4); FUN_1400079d0(*(longlong *)(param_1 + 0xa8)); lVar20 = *(longlong *)(param_1 + 0xa0); puVar4 = *(undefined8 **)(lVar20 + 0x28); if (puVar4 != (undefined8 *)0x0) { puVar16 = (ulonglong *)0x1; (**(code **)*puVar4)(); } *(undefined8 *)(lVar20 + 0x28) = 0; CoUninitialize(); FUN_140010960(L"# Agent Stoped... #\n",puVar16,puVar18,param_4); if (7 < local_b0) { operator_delete((void *)CONCAT62(uStack_c6,local_c8)); } local_b0 = 7; local_b8 = 0; local_c8 = 0; if (7 < local_d8) { operator_delete((void *)CONCAT62(uStack_ee,local_f0)); } pwVar19 = local_280; local_d8 = 7; local_e0 = 0; local_f0 = 0; if (pwVar10 != (wchar_t *)0x0) { plVar13 = (longlong *)((longlong)pwVar10 + 8); *plVar13 = *plVar13 + -1; plVar17 = local_288; if (*plVar13 == 0) { pwVar10 = *(wchar_t **)local_280; local_260 = pwVar10; if (pwVar10 != (wchar_t *)0x0) { FUN_14002e7a0((undefined4 *)(pwVar10 + 0x14),puVar16,puVar18,param_4); if (*(void **)(pwVar10 + 4) != (void *)0x0) { operator_delete(*(void **)(pwVar10 + 4)); } pwVar10[4] = L'\0'; pwVar10[5] = L'\0'; pwVar10[6] = L'\0'; pwVar10[7] = L'\0'; pwVar10[8] = L'\0'; pwVar10[9] = L'\0'; pwVar10[10] = L'\0'; pwVar10[0xb] = L'\0'; pwVar10[0xc] = L'\0'; pwVar10[0xd] = L'\0'; pwVar10[0xe] = L'\0'; pwVar10[0xf] = L'\0'; operator_delete(pwVar10); } FUN_1400302f0(pwVar19); plVar17 = local_288; } } plVar13 = local_288; if (plVar17 != (longlong *)0x0) { plVar17 = plVar17 + 1; *plVar17 = *plVar17 + -1; if (*plVar17 == 0) { puVar4 = (undefined8 *)*local_288; if (puVar4 != (undefined8 *)0x0) { (**(code **)*puVar4)(puVar4,1); } FUN_1400302f0(plVar13); } } return 0; } if (*pcVar15 == '\x18') { pwVar11 = (wchar_t *)(pcVar15 + 8); if (7 < *(ulonglong *)(pcVar15 + 0x20)) { pwVar11 = *(wchar_t **)(pcVar15 + 8); } goto LAB_140003c4a; } pcVar15 = pcVar15 + 0x30; } while( true ); }