433 lines
14 KiB
C
433 lines
14 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x1401f0620 FUN_1401f0620
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
|
|
void FUN_1401f0620(longlong param_1,undefined8 param_2)
|
|
|
|
{
|
|
int *piVar1;
|
|
char cVar2;
|
|
int iVar3;
|
|
uint uVar4;
|
|
uint uVar5;
|
|
longlong lVar6;
|
|
undefined8 uVar7;
|
|
undefined8 uVar8;
|
|
longlong *plVar9;
|
|
uint *puVar10;
|
|
longlong *plVar11;
|
|
ulonglong uVar12;
|
|
undefined *puVar13;
|
|
uint *puVar14;
|
|
uint uVar15;
|
|
undefined *puVar16;
|
|
undefined *puVar17;
|
|
uint uVar18;
|
|
undefined1 auStack_4a8 [32];
|
|
undefined ***local_488;
|
|
undefined1 local_478 [8];
|
|
uint *local_470;
|
|
longlong local_468;
|
|
undefined *local_460;
|
|
undefined8 local_458;
|
|
undefined4 local_450 [2];
|
|
undefined *local_448;
|
|
undefined4 local_440 [2];
|
|
undefined *local_438;
|
|
undefined *local_430;
|
|
undefined **local_428;
|
|
undefined4 local_420;
|
|
undefined2 local_41c;
|
|
undefined *local_418;
|
|
ulonglong local_410;
|
|
undefined **local_408;
|
|
undefined8 local_400;
|
|
undefined8 local_3f8;
|
|
undefined8 local_3f0;
|
|
undefined8 local_3e8;
|
|
undefined8 local_3e0;
|
|
undefined1 local_3d8;
|
|
undefined1 local_3d0 [8];
|
|
undefined8 local_3c8;
|
|
undefined1 local_3c0;
|
|
undefined8 local_3b8;
|
|
undefined1 local_3b0;
|
|
undefined8 local_3a8;
|
|
undefined1 local_3a0;
|
|
undefined8 local_398;
|
|
undefined1 local_390;
|
|
undefined8 local_388;
|
|
undefined1 local_380;
|
|
longlong local_378;
|
|
undefined1 local_370;
|
|
undefined1 local_368 [8];
|
|
undefined8 local_360;
|
|
undefined1 local_358 [16];
|
|
undefined4 local_348 [20];
|
|
longlong local_2f8;
|
|
undefined *local_2f0;
|
|
undefined4 local_2e8;
|
|
undefined4 local_2e4;
|
|
undefined4 local_2d8;
|
|
undefined4 local_298;
|
|
undefined2 local_294;
|
|
undefined4 local_258;
|
|
undefined4 local_254;
|
|
undefined4 local_250;
|
|
undefined4 local_24c;
|
|
WCHAR local_248 [264];
|
|
ulonglong local_38;
|
|
|
|
local_360 = 0xfffffffffffffffe;
|
|
local_38 = DAT_1403463c0 ^ (ulonglong)auStack_4a8;
|
|
(**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x78) + 0x10))();
|
|
puVar17 = (undefined *)0x0;
|
|
local_458 = 0;
|
|
local_460 = (undefined *)0x0;
|
|
local_468 = 0;
|
|
local_468 = FUN_14016d120();
|
|
*(undefined8 *)(local_468 + 0x28) = 1;
|
|
local_428 = Proud::AddrPort::vftable;
|
|
local_420 = 0;
|
|
local_41c = 0;
|
|
cVar2 = FUN_14016be00(param_2,local_440);
|
|
if (cVar2 != '\0') {
|
|
local_258 = 0;
|
|
local_254 = 0;
|
|
local_250 = 0;
|
|
local_24c = 0;
|
|
cVar2 = FUN_14016b370(param_2,&local_258,0x10);
|
|
if ((((cVar2 != '\0') && (cVar2 = FUN_14016ba10(param_2,&local_410), cVar2 != '\0')) &&
|
|
(iVar3 = (int)local_410, -1 < iVar3)) && (iVar3 <= DAT_140344d70)) {
|
|
if (local_460 == (undefined *)0x0) {
|
|
if (iVar3 < 1) {
|
|
if (local_468 == 0) goto LAB_1401f0c57;
|
|
uVar12 = 0;
|
|
}
|
|
else {
|
|
if (local_468 == 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d1e0();
|
|
}
|
|
uVar12 = local_410 & 0xffffffff;
|
|
}
|
|
FUN_14004f0e0(local_468,uVar12);
|
|
}
|
|
else {
|
|
if (local_458._4_4_ < iVar3) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
local_458 = CONCAT44(local_458._4_4_,iVar3);
|
|
}
|
|
puVar13 = local_460;
|
|
if (local_460 == (undefined *)0x0) {
|
|
if (local_468 == 0) {
|
|
LAB_1401f0c57:
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d1e0();
|
|
}
|
|
puVar13 = puVar17;
|
|
if (*(int *)(local_468 + 0x18) != 0) {
|
|
puVar13 = *(undefined **)(local_468 + 0x10);
|
|
}
|
|
}
|
|
cVar2 = FUN_14016b370(param_2,puVar13,local_410 & 0xffffffff);
|
|
if ((cVar2 != '\0') && (cVar2 = FUN_14016bda0(param_2,&local_428), cVar2 != '\0')) {
|
|
*(undefined4 *)(*(longlong *)(param_1 + 0x108) + 0x1578) = local_440[0];
|
|
plVar11 = *(longlong **)(*(longlong *)(param_1 + 0x108) + 0x15d8);
|
|
if ((plVar11 != (longlong *)0x0) && (*plVar11 != 0)) {
|
|
lVar6 = FUN_1401c71f0();
|
|
*(undefined4 *)(lVar6 + 0x108) = local_420;
|
|
*(undefined2 *)(lVar6 + 0x10c) = local_41c;
|
|
}
|
|
uVar7 = (**(code **)(**(longlong **)(param_1 + 0x108) + 0x58))();
|
|
local_3a8 = uVar7;
|
|
FUN_14016db50(uVar7);
|
|
local_3a0 = 1;
|
|
FUN_14018b960(local_348);
|
|
local_348[0] = 1;
|
|
if (local_468 == local_2f8) {
|
|
local_2e4 = local_458._4_4_;
|
|
local_2f0 = local_460;
|
|
local_2e8 = (undefined4)local_458;
|
|
}
|
|
else {
|
|
FUN_14016d0e0(&local_2f8);
|
|
if (local_468 != 0) {
|
|
*(longlong *)(local_468 + 0x28) = *(longlong *)(local_468 + 0x28) + 1;
|
|
local_2f8 = local_468;
|
|
}
|
|
}
|
|
local_2d8 = 1;
|
|
uVar8 = FUN_14004e660(local_368,*(longlong *)(param_1 + 0x108) + 0x1588);
|
|
lVar6 = FUN_14016fcb0(local_358,uVar8,
|
|
*(undefined2 *)(*(longlong *)(param_1 + 0x108) + 0x1590));
|
|
local_298 = *(undefined4 *)(lVar6 + 8);
|
|
local_294 = *(undefined2 *)(lVar6 + 0xc);
|
|
FUN_1401dcb50(*(undefined8 *)(param_1 + 0x108),local_348);
|
|
lVar6 = *(longlong *)(param_1 + 0x108);
|
|
*(undefined4 *)(lVar6 + 0x6d0) = local_258;
|
|
*(undefined4 *)(lVar6 + 0x6d4) = local_254;
|
|
*(undefined4 *)(lVar6 + 0x6d8) = local_250;
|
|
*(undefined4 *)(lVar6 + 0x6dc) = local_24c;
|
|
if (*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x58) != 0) {
|
|
lVar6 = *(longlong *)(*(longlong *)(param_1 + 0x108) + 0x58) + 0x98;
|
|
local_378 = lVar6;
|
|
FUN_14016db50(lVar6);
|
|
local_370 = 1;
|
|
local_478[0] = 0;
|
|
plVar11 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x70);
|
|
local_450[0] = (**(code **)(*plVar11 + 0x108))(plVar11,local_478);
|
|
plVar11 = (longlong *)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x58) + 0x68);
|
|
(**(code **)(*plVar11 + 0x60))(plVar11,1,&DAT_14034c4b0,local_450);
|
|
FUN_14016dbe0(lVar6);
|
|
}
|
|
FUN_14018ba10(local_348);
|
|
FUN_14016dbe0(uVar7);
|
|
lVar6 = *(longlong *)(param_1 + 0x108);
|
|
if ((*(char *)(lVar6 + 0x1790) != '\0') || (*(int *)(lVar6 + 0x6c8) != 0)) {
|
|
FUN_1401d4c70(lVar6,1,&DAT_140293a18,*(undefined4 *)(lVar6 + 0x1578));
|
|
}
|
|
if ((*(int *)(*(longlong *)(param_1 + 0x108) + 0x1578) == 0x32) &&
|
|
(iVar3 = FUN_14019ef80(),
|
|
iVar3 == (iVar3 / 3 + (iVar3 >> 0x1f) +
|
|
(int)(((longlong)iVar3 / 3 + ((longlong)iVar3 >> 0x3f) & 0xffffffffU) >> 0x1f))
|
|
* 3)) {
|
|
FUN_14016d8c0();
|
|
puVar13 = PTR_DAT_1403440a0;
|
|
local_438 = PTR_DAT_1403440a0;
|
|
GetModuleFileNameW((HMODULE)0x0,local_248,0x104);
|
|
plVar11 = *(longlong **)(*(longlong *)(param_1 + 0x108) + 0x15d8);
|
|
if ((plVar11 != (longlong *)0x0) && (*plVar11 != 0)) {
|
|
lVar6 = FUN_1401c71f0();
|
|
plVar11 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x70);
|
|
plVar11 = (longlong *)(**(code **)(*plVar11 + 0xb0))(plVar11,&local_418);
|
|
plVar9 = (longlong *)
|
|
(*(code *)**(undefined8 **)(lVar6 + 0x100))
|
|
((undefined8 *)(lVar6 + 0x100),&local_430);
|
|
puVar13 = (undefined *)*plVar11;
|
|
if ((undefined *)*plVar11 == (undefined *)0x0) {
|
|
puVar13 = PTR_DAT_1403440a0;
|
|
}
|
|
puVar16 = (undefined *)*plVar9;
|
|
if ((undefined *)*plVar9 == (undefined *)0x0) {
|
|
puVar16 = PTR_DAT_1403440a0;
|
|
}
|
|
local_488 = (undefined ***)local_248;
|
|
FUN_14004c020(&local_438,L"Usage: %s ## %s ## %s",puVar16,puVar13);
|
|
if (((local_430 != (undefined *)0x0) && (local_430 != PTR_DAT_1403440a0)) &&
|
|
(local_430 + -8 != (undefined *)0x0)) {
|
|
uVar7 = FUN_14016d8c0();
|
|
local_388 = uVar7;
|
|
FUN_14016db50(uVar7);
|
|
local_380 = 1;
|
|
piVar1 = (int *)(local_430 + -4);
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 == 0) {
|
|
FUN_14016d970(local_430 + -8);
|
|
}
|
|
FUN_14016dbe0(uVar7);
|
|
}
|
|
local_430 = PTR_DAT_1403440a0;
|
|
if (((local_418 != (undefined *)0x0) && (local_418 != PTR_DAT_1403440a0)) &&
|
|
(local_418 + -8 != (undefined *)0x0)) {
|
|
uVar7 = FUN_14016d8c0();
|
|
local_3c8 = uVar7;
|
|
FUN_14016db50(uVar7);
|
|
local_3c0 = 1;
|
|
piVar1 = (int *)(local_418 + -4);
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 == 0) {
|
|
FUN_14016d970(local_418 + -8);
|
|
}
|
|
FUN_14016dbe0(uVar7);
|
|
}
|
|
FUN_14016d8c0();
|
|
puVar13 = local_438;
|
|
local_448 = PTR_DAT_1403440a0;
|
|
if (PTR_DAT_1403440a0 == (undefined *)0x0) {
|
|
local_448 = puVar17;
|
|
}
|
|
if (local_438 != PTR_DAT_1403440a0) {
|
|
uVar7 = FUN_14016d8c0();
|
|
local_3b8 = uVar7;
|
|
FUN_14016db50(uVar7);
|
|
local_3b0 = 1;
|
|
FUN_14004eb70(&local_448);
|
|
local_448 = puVar13;
|
|
if (((puVar13 != PTR_DAT_1403440a0) && (puVar13 != (undefined *)0x0)) &&
|
|
(puVar13 != (undefined *)0x8)) {
|
|
*(int *)(puVar13 + -4) = *(int *)(puVar13 + -4) + 1;
|
|
}
|
|
FUN_14016dbe0(uVar7);
|
|
}
|
|
FUN_1401be230(&local_448);
|
|
}
|
|
if (((puVar13 != (undefined *)0x0) && (puVar13 != PTR_DAT_1403440a0)) &&
|
|
(puVar13 + -8 != (undefined *)0x0)) {
|
|
uVar7 = FUN_14016d8c0();
|
|
local_398 = uVar7;
|
|
FUN_14016db50(uVar7);
|
|
local_390 = 1;
|
|
piVar1 = (int *)(puVar13 + -4);
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 == 0) {
|
|
FUN_14016d970(puVar13 + -8);
|
|
}
|
|
FUN_14016dbe0(uVar7);
|
|
}
|
|
}
|
|
FUN_14016d0e0(&local_468);
|
|
if (local_460 == (undefined *)0x0) {
|
|
return;
|
|
}
|
|
if (-1 < local_458) {
|
|
return;
|
|
}
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
}
|
|
}
|
|
FUN_14016d8c0();
|
|
local_470 = (uint *)PTR_DAT_1403440a0;
|
|
uVar4 = FUN_14016d740(L"Bad format in NotifyServerConnectSuccess");
|
|
if ((local_470 != (uint *)0x0) &&
|
|
(puVar17 = (undefined *)0x0, local_470 != (uint *)PTR_DAT_1403440a0)) {
|
|
puVar17 = (undefined *)(ulonglong)local_470[-2];
|
|
}
|
|
uVar18 = 0;
|
|
uVar5 = uVar4;
|
|
if ((((int)uVar4 <= (int)puVar17) && (uVar5 = uVar18, local_470 != (uint *)0x0)) &&
|
|
(local_470 != (uint *)PTR_DAT_1403440a0)) {
|
|
uVar5 = local_470[-2];
|
|
}
|
|
uVar15 = 1;
|
|
if (1 < (int)uVar5) {
|
|
uVar15 = uVar5;
|
|
}
|
|
uVar5 = uVar18;
|
|
if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1403440a0)) {
|
|
uVar5 = local_470[-2];
|
|
}
|
|
if ((int)uVar5 < (int)uVar15) {
|
|
if (local_470 == (uint *)0x0) {
|
|
local_470 = (uint *)PTR_DAT_1403440a0;
|
|
}
|
|
if ((int)uVar15 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
if (uVar15 == 0) {
|
|
FUN_14004eb70(&local_470);
|
|
}
|
|
else {
|
|
uVar5 = uVar18;
|
|
if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1403440a0)) {
|
|
uVar5 = local_470[-2];
|
|
}
|
|
if (uVar15 != uVar5) {
|
|
puVar10 = (uint *)FUN_14016d940((longlong)(int)uVar15 * 2 + 10);
|
|
if (puVar10 != (uint *)0x0) {
|
|
*puVar10 = 0;
|
|
puVar10[1] = 1;
|
|
}
|
|
*puVar10 = uVar15;
|
|
uVar5 = uVar18;
|
|
if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1403440a0)) {
|
|
uVar5 = local_470[-2];
|
|
}
|
|
puVar14 = (uint *)PTR_DAT_1403440a0;
|
|
if ((int)uVar15 < (int)uVar5) {
|
|
LAB_1401f0d5c:
|
|
if (local_470 != (uint *)0x0) {
|
|
puVar14 = local_470;
|
|
}
|
|
}
|
|
else {
|
|
uVar15 = uVar18;
|
|
if (local_470 != (uint *)0x0) {
|
|
if (local_470 != (uint *)PTR_DAT_1403440a0) {
|
|
uVar15 = local_470[-2];
|
|
}
|
|
goto LAB_1401f0d5c;
|
|
}
|
|
}
|
|
FUN_14016d770(puVar10 + 2,puVar14,uVar15);
|
|
FUN_14004eb70(&local_470);
|
|
local_470 = puVar10 + 2;
|
|
}
|
|
}
|
|
}
|
|
FUN_14004e850(&local_470);
|
|
puVar10 = local_470;
|
|
if (local_470 == (uint *)0x0) {
|
|
puVar10 = (uint *)PTR_DAT_1403440a0;
|
|
}
|
|
FUN_14016d770(puVar10,L"Bad format in NotifyServerConnectSuccess",uVar4);
|
|
puVar10 = local_470;
|
|
if (local_470 == (uint *)0x0) {
|
|
puVar10 = (uint *)PTR_DAT_1403440a0;
|
|
}
|
|
uVar5 = FUN_14016d740(puVar10);
|
|
uVar4 = 0;
|
|
if (0 < (int)uVar5) {
|
|
uVar4 = uVar5;
|
|
}
|
|
uVar5 = uVar18;
|
|
if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1403440a0)) {
|
|
uVar5 = local_470[-2];
|
|
}
|
|
if (((int)uVar5 <= (int)uVar4) && (uVar4 = uVar18, local_470 != (uint *)0x0)) {
|
|
if (local_470 == (uint *)PTR_DAT_1403440a0) goto LAB_1401f0e16;
|
|
uVar4 = local_470[-2];
|
|
}
|
|
if (((local_470 != (uint *)PTR_DAT_1403440a0) && (local_470 != (uint *)0x0)) &&
|
|
(local_470 + -2 != (uint *)0x0)) {
|
|
local_470[-2] = uVar4;
|
|
*(undefined2 *)((longlong)local_470 + (longlong)(int)uVar4 * 2) = 0;
|
|
}
|
|
LAB_1401f0e16:
|
|
local_400 = 0;
|
|
local_3f8 = 0;
|
|
local_3f0 = 0;
|
|
local_3e8 = 0;
|
|
local_408 = Proud::ByteArray::vftable;
|
|
local_488 = &local_408;
|
|
uVar7 = FUN_140198f80(local_3d0,8,1,&local_470);
|
|
FUN_1401dfbb0(*(undefined8 *)(param_1 + 0x108),0x1f,uVar7);
|
|
FUN_14019a9e0(&local_408);
|
|
puVar10 = local_470;
|
|
if (((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1403440a0)) &&
|
|
(puVar14 = local_470 + -2, puVar14 != (uint *)0x0)) {
|
|
uVar7 = FUN_14016d8c0();
|
|
local_3e0 = uVar7;
|
|
FUN_14016db50(uVar7);
|
|
local_3d8 = 1;
|
|
puVar10 = puVar10 + -1;
|
|
*puVar10 = *puVar10 - 1;
|
|
if (*puVar10 == 0) {
|
|
FUN_14016d970(puVar14);
|
|
}
|
|
FUN_14016dbe0(uVar7);
|
|
local_3d8 = 0;
|
|
}
|
|
local_470 = (uint *)PTR_DAT_1403440a0;
|
|
if (*(int *)(param_1 + 0x100) < 4) {
|
|
*(undefined4 *)(param_1 + 0x40) = 0;
|
|
*(undefined4 *)(param_1 + 0x100) = 4;
|
|
uVar7 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x70) + 0x1c0))();
|
|
*(undefined8 *)(param_1 + 0x80) = uVar7;
|
|
*(undefined1 *)(param_1 + 0xc0) = 0;
|
|
}
|
|
FUN_14016d0e0(&local_468);
|
|
if ((local_460 != (undefined *)0x0) && (local_458 < 0)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
return;
|
|
}
|
|
|