decomp DBCServer_Release and inspect/document database

This commit is contained in:
Benjamin Palko 2026-10-14 23:22:03 -04:00
parent 4b267cbe05
commit 7834b98bf0
28222 changed files with 843300 additions and 144 deletions

View file

@ -0,0 +1,230 @@
/* 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;
}