/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x140042cf0 FUN_140042cf0 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_140042cf0(longlong param_1) { undefined *puVar1; char cVar2; undefined8 *puVar3; undefined8 *puVar4; void *pvVar5; longlong *plVar6; ulonglong uVar7; undefined8 *puVar8; longlong lVar9; char *pcVar10; longlong lVar11; undefined8 *puVar12; undefined1 auStack_358 [32]; void *local_338; undefined8 *local_330; undefined8 local_328; undefined1 local_320; undefined7 uStack_31f; undefined8 local_310; ulonglong local_308; void *local_2f8 [3]; ulonglong local_2e0; undefined **local_2c8; char local_2c0 [136]; char local_238; undefined1 local_237 [255]; CHAR local_138 [272]; ulonglong local_28; puVar1 = PTR_s_option_dbc_serveroption_xml_140349cb8; local_328 = 0xfffffffffffffffe; local_28 = DAT_1403463c0 ^ (ulonglong)auStack_358; if ((DAT_14039d154 & 1) == 0) { DAT_14039d154 = DAT_14039d154 | 1; FUN_14021b8f0(); atexit((_func_5014 *)&LAB_1402741c0); } local_338 = operator_new(0xe8); puVar12 = (undefined8 *)0x0; puVar3 = puVar12; if (local_338 != (void *)0x0) { puVar3 = (undefined8 *)FUN_140219a30(local_338); } DAT_140353188 = puVar3; FUN_140219cb0(puVar3); local_338 = operator_new(0x98); puVar3 = puVar12; if (local_338 != (void *)0x0) { puVar3 = (undefined8 *)FUN_14021c130(local_338); } DAT_140353180 = puVar3; local_338 = operator_new(8); puVar3 = puVar12; if (local_338 != (void *)0x0) { puVar3 = (undefined8 *)FUN_14015d580(); } local_308 = 0xf; local_310 = 0; local_320 = 0; uVar7 = 0xffffffffffffffff; pcVar10 = puVar1; do { if (uVar7 == 0) break; uVar7 = uVar7 - 1; cVar2 = *pcVar10; pcVar10 = pcVar10 + 1; } while (cVar2 != '\0'); DAT_1403531a0 = puVar3; FUN_14004c670(&local_320,puVar1,~uVar7 - 1); FUN_1402193a0(local_2f8,&local_320); if (0xf < local_308) { operator_delete((void *)CONCAT71(uStack_31f,local_320)); } local_308 = 0xf; local_310 = 0; local_320 = 0; *(undefined1 *)(DAT_140353190 + 0x1e8) = 0xc; FUN_1401551e0(); local_338 = operator_new(0xf0); puVar3 = puVar12; if (local_338 != (void *)0x0) { puVar3 = (undefined8 *)FUN_14015b1d0(local_338); } *(undefined8 **)(param_1 + 0x70) = puVar3; local_338 = (void *)CONCAT44(local_338._4_4_,1); *(undefined4 *)(param_1 + 0x48) = 1; printf("STEP : AGENT \n"); lVar11 = *(longlong *)(param_1 + 0x70); if ((lVar11 != 0) && (*(char *)(lVar11 + 0x1a) != '\0')) { (**(code **)(*(longlong *)(lVar11 + 0x68) + 0xb0)) ((longlong *)(lVar11 + 0x68),1,&DAT_1403440f0,&local_338); } if ((*(longlong *)(param_1 + 0x70) == 0) || (cVar2 = FUN_14015b710(), cVar2 != '\0')) { puVar4 = operator_new(0x1f48); lVar11 = 0x7d; puVar3 = puVar12; if (puVar4 != (undefined8 *)0x0) { *(undefined4 *)(puVar4 + 1000) = 0; lVar9 = 0x7d; puVar8 = puVar4; do { *puVar8 = 0; puVar8[1] = 0; puVar8[2] = 0; puVar8[3] = 0; puVar8[4] = 0; puVar8[5] = 0; puVar8[6] = 0; puVar8[7] = 0; lVar9 = lVar9 + -1; puVar3 = puVar4; puVar8 = puVar8 + 8; } while (lVar9 != 0); } *(undefined8 **)(param_1 + 200) = puVar3; if (*(longlong *)(DAT_140353190 + 0x118) != 0) { puVar4 = operator_new(0x1f48); puVar3 = puVar12; if (puVar4 != (undefined8 *)0x0) { *(undefined4 *)(puVar4 + 1000) = 0; puVar8 = puVar4; do { *puVar8 = 0; puVar8[1] = 0; puVar8[2] = 0; puVar8[3] = 0; puVar8[4] = 0; puVar8[5] = 0; puVar8[6] = 0; puVar8[7] = 0; lVar11 = lVar11 + -1; puVar3 = puVar4; puVar8 = puVar8 + 8; } while (lVar11 != 0); } *(undefined8 **)(param_1 + 0xd8) = puVar3; } puVar4 = operator_new(0x49510); puVar3 = puVar12; local_330 = puVar4; if (puVar4 != (undefined8 *)0x0) { *puVar4 = 0; puVar4[0x21] = 500; puVar4[0x22] = param_1; puVar4[0x23] = 0; memset(puVar4 + 1,0,0x100); FUN_1400a7aa0(puVar4); puVar3 = puVar4; } *(undefined8 **)(param_1 + 0xe0) = puVar3; puVar4 = operator_new(0x49510); puVar3 = puVar12; local_330 = puVar4; if (puVar4 != (undefined8 *)0x0) { *puVar4 = 0; puVar4[0x21] = 500; puVar4[0x22] = param_1; puVar4[0x23] = 0; memset(puVar4 + 1,0,0x100); FUN_1400a7aa0(puVar4,3); puVar3 = puVar4; } *(undefined8 **)(param_1 + 0xe8) = puVar3; puVar3 = operator_new(0x58); if (puVar3 != (undefined8 *)0x0) { *puVar3 = 0; puVar3[1] = 0; puVar3[2] = 0; *(undefined4 *)(puVar3 + 3) = 0; InitializeCriticalSection((LPCRITICAL_SECTION)(puVar3 + 4)); puVar12 = puVar3; } *(undefined8 **)(param_1 + 0xf0) = puVar12; FUN_1400a7aa0(*(undefined8 *)(param_1 + 0xe0),2); FUN_1400a80c0(*(undefined8 *)(param_1 + 0xe0)); FUN_1400a7aa0(*(undefined8 *)(param_1 + 0xe8)); FUN_1400a80c0(*(undefined8 *)(param_1 + 0xe8)); memset((void *)(param_1 + 0x188),0,0x41c); memset((void *)(param_1 + 0x5a4),0,0x13c); FUN_140043590(param_1); puVar3 = *(undefined8 **)(param_1 + 0xf0); EnterCriticalSection((LPCRITICAL_SECTION)(puVar3 + 4)); if ((void *)*puVar3 != (void *)0x0) { operator_delete__((void *)*puVar3); *puVar3 = 0; } pvVar5 = operator_new(300000); *puVar3 = pvVar5; puVar3[1] = 300000; puVar3[2] = 0; *(undefined4 *)(puVar3 + 3) = 0; LeaveCriticalSection((LPCRITICAL_SECTION)(puVar3 + 4)); FUN_14016f940(0); plVar6 = (longlong *)FUN_140190ca0(); *(longlong **)(param_1 + 0x88) = plVar6; (**(code **)(*plVar6 + 0x130))(plVar6,param_1); (**(code **)(**(longlong **)(param_1 + 0x88) + 0x10)) (*(longlong **)(param_1 + 0x88),param_1 + 8); (**(code **)(**(longlong **)(param_1 + 0x88) + 8))(); local_2c8 = CServerConfig::vftable; local_238 = '\0'; memset(local_237,0,0xff); GetCurrentDirectoryA(0x104,local_138); sprintf(&local_238,"%s\\%s"); strcpy_s(local_2c0,0x80,&local_238); lVar11 = DAT_140353190; *(undefined4 *)(param_1 + 0x98) = *(undefined4 *)(DAT_140353190 + 0x80); puVar3 = (undefined8 *)(lVar11 + 0x30); if (7 < *(ulonglong *)(lVar11 + 0x48)) { puVar3 = (undefined8 *)*puVar3; } FUN_14004c050(param_1 + 0x90,puVar3); FUN_140154310(param_1 + 0x88); local_2c8 = CConfig::vftable; } if (7 < local_2e0) { operator_delete(local_2f8[0]); } return; }