/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401a0e20 FUN_1401a0e20 * Pseudocode, not original source. */ undefined8 FUN_1401a0e20(longlong *param_1,int param_2,int *param_3,undefined8 param_4) { undefined *puVar1; int *piVar2; undefined *puVar3; char cVar4; int iVar5; uint uVar6; uint uVar7; longlong lVar8; undefined8 uVar9; uint *puVar10; undefined8 uVar11; uint *puVar12; uint uVar13; uint uVar14; uint uVar15; short local_res18 [4]; undefined8 local_res20; uint *local_b8; undefined *local_b0; undefined8 local_a8; undefined1 local_a0; short local_98 [4]; undefined **local_90; undefined8 local_88; undefined8 local_80; undefined8 local_78; undefined8 local_70; int local_68; int local_64; undefined8 local_60; undefined1 local_58; undefined1 local_50 [8]; undefined8 local_48; local_48 = 0xfffffffffffffffe; iVar5 = (int)(*param_3 + (*param_3 >> 0x1f & 7U)) >> 3; local_res20 = param_4; local_68 = iVar5; cVar4 = FUN_14016bba0(param_3,&local_64); if ((cVar4 == '\0') || (cVar4 = FUN_14016ba10(param_3,local_res18), cVar4 == '\0')) { FUN_14016b040(param_3,iVar5); return 0; } FUN_14016d8c0(); local_b0 = PTR_DAT_1403440a0; lVar8 = (**(code **)(*param_1 + 0xc0))(param_1,param_3[10],&local_b0); if (((lVar8 == 0) || (local_64 == 0)) || (local_64 == 3)) goto LAB_1401a15a5; if (local_64 == 1) { cVar4 = FUN_1401b0f70(param_3,param_4,lVar8,(int)((*param_3 >> 0x1f & 7U) + *param_3) >> 3); LAB_1401a0f1e: if (cVar4 == '\0') { LAB_1401a15a5: uVar9 = (**(code **)(*param_1 + 0x58))(param_1); local_a8 = uVar9; FUN_14016db50(uVar9); local_a0 = 1; if (DAT_14034c86f != '\0') { (**(code **)(*param_1 + 200))(param_1,L"Proud::CNetCoreImpl::ProcessMessage_Encrypted"); } FUN_14004ea20(&local_b0,L" decrypt failed"); local_88 = 0; local_80 = 0; local_78 = 0; local_70 = 0; local_90 = Proud::ByteArray::vftable; uVar11 = FUN_140198f80(local_res18,6,param_3[10],&local_b0,&local_90); (**(code **)(*param_1 + 0x80))(param_1,uVar11); FUN_14019a9e0(&local_90); FUN_14016b040(param_3,iVar5); FUN_14016dbe0(uVar9); puVar3 = local_b0; if (local_b0 == (undefined *)0x0) { return 0; } if (local_b0 == PTR_DAT_1403440a0) { return 0; } puVar1 = local_b0 + -8; if (puVar1 == (undefined *)0x0) { return 0; } uVar9 = FUN_14016d8c0(); local_a8 = uVar9; FUN_14016db50(uVar9); local_a0 = 1; piVar2 = (int *)(puVar3 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14016d970(puVar1); } FUN_14016dbe0(uVar9); return 0; } } else if (local_64 == 2) { cVar4 = FUN_1401c0fc0(param_3,param_4,lVar8 + 0x3d0, (int)((*param_3 >> 0x1f & 7U) + *param_3) >> 3); goto LAB_1401a0f1e; } if (param_2 != 0x24) { LAB_1401a1555: puVar3 = local_b0; if (((local_b0 != (undefined *)0x0) && (local_b0 != PTR_DAT_1403440a0)) && (puVar1 = local_b0 + -8, puVar1 != (undefined *)0x0)) { uVar9 = FUN_14016d8c0(); local_a8 = uVar9; FUN_14016db50(uVar9); local_a0 = 1; piVar2 = (int *)(puVar3 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14016d970(puVar1); } FUN_14016dbe0(uVar9); } return 1; } cVar4 = FUN_14016b370(param_4,local_98,2); if (cVar4 != '\0') { cVar4 = (**(code **)(*param_1 + 0xb0))(param_1,param_3[10],local_res18); lVar8 = *param_1; if (cVar4 == '\0') { uVar9 = (**(code **)(lVar8 + 0x58))(); local_a8 = uVar9; FUN_14016db50(uVar9); local_a0 = 1; if (DAT_14034c86f != '\0') { (**(code **)(*param_1 + 200))(param_1,L"Proud::CNetCoreImpl::ProcessMessage_Encrypted"); } FUN_14016d8c0(); local_b8 = (uint *)PTR_DAT_1403440a0; FUN_14004c020(&local_b8,L"GetExpectedDecryptCount failed!!"); local_88 = 0; local_80 = 0; local_78 = 0; local_70 = 0; local_90 = Proud::ByteArray::vftable; uVar11 = FUN_140198f80(local_50,6,param_3[10],&local_b8,&local_90); (**(code **)(*param_1 + 0x80))(param_1,uVar11); FUN_14019a9e0(&local_90); FUN_14016b040(param_4,iVar5); puVar10 = local_b8; if (((local_b8 != (uint *)0x0) && (local_b8 != (uint *)PTR_DAT_1403440a0)) && (puVar12 = local_b8 + -2, puVar12 != (uint *)0x0)) { uVar11 = FUN_14016d8c0(); local_60 = uVar11; FUN_14016db50(uVar11); local_58 = 1; puVar10 = puVar10 + -1; *puVar10 = *puVar10 - 1; if (*puVar10 == 0) { FUN_14016d970(puVar12); } FUN_14016dbe0(uVar11); } local_b8 = (uint *)PTR_DAT_1403440a0; FUN_14016dbe0(uVar9); puVar3 = local_b0; if (local_b0 == (undefined *)0x0) { return 0; } if (local_b0 == PTR_DAT_1403440a0) { return 0; } puVar1 = local_b0 + -8; if (puVar1 == (undefined *)0x0) { return 0; } uVar9 = FUN_14016d8c0(); local_a8 = uVar9; FUN_14016db50(uVar9); local_a0 = 1; piVar2 = (int *)(puVar3 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14016d970(puVar1); } FUN_14016dbe0(uVar9); return 0; } if (local_98[0] != local_res18[0]) { uVar9 = (**(code **)(lVar8 + 0x58))(); local_a8 = uVar9; FUN_14016db50(uVar9); local_a0 = 1; if (DAT_14034c86f != '\0') { (**(code **)(*param_1 + 200))(param_1,L"Proud::CNetCoreImpl::ProcessMessage_Encrypted"); } FUN_14016d8c0(); local_b8 = (uint *)PTR_DAT_1403440a0; FUN_14004c020(&local_b8,L"decryptCount1(%d) != decryptCount2(%d)",local_98[0],local_res18[0]); local_88 = 0; local_80 = 0; local_78 = 0; local_70 = 0; local_90 = Proud::ByteArray::vftable; uVar11 = FUN_140198f80(local_50,6,param_3[10],&local_b8,&local_90); (**(code **)(*param_1 + 0x80))(param_1,uVar11); FUN_14019a9e0(&local_90); FUN_14016b040(param_4,iVar5); puVar10 = local_b8; if (((local_b8 != (uint *)0x0) && (local_b8 != (uint *)PTR_DAT_1403440a0)) && (puVar12 = local_b8 + -2, puVar12 != (uint *)0x0)) { uVar11 = FUN_14016d8c0(); local_60 = uVar11; FUN_14016db50(uVar11); local_58 = 1; puVar10 = puVar10 + -1; *puVar10 = *puVar10 - 1; if (*puVar10 == 0) { FUN_14016d970(puVar12); } FUN_14016dbe0(uVar11); } local_b8 = (uint *)PTR_DAT_1403440a0; FUN_14016dbe0(uVar9); puVar3 = local_b0; if (local_b0 == (undefined *)0x0) { return 0; } if (local_b0 == PTR_DAT_1403440a0) { return 0; } puVar1 = local_b0 + -8; if (puVar1 == (undefined *)0x0) { return 0; } uVar9 = FUN_14016d8c0(); local_a8 = uVar9; FUN_14016db50(uVar9); local_a0 = 1; piVar2 = (int *)(puVar3 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14016d970(puVar1); } FUN_14016dbe0(uVar9); return 0; } (**(code **)(lVar8 + 0xb8))(param_1,param_3[10]); goto LAB_1401a1555; } uVar9 = (**(code **)(*param_1 + 0x58))(); local_60 = uVar9; FUN_14016db50(uVar9); local_58 = 1; if (DAT_14034c86f != '\0') { (**(code **)(*param_1 + 200))(param_1,L"Proud::CNetCoreImpl::ProcessMessage_Encrypted"); } FUN_14016d8c0(); local_b8 = (uint *)PTR_DAT_1403440a0; uVar6 = FUN_14016d740(L"decryptCount1 read failed!!"); uVar13 = 0; uVar15 = 0; if ((local_b8 != (uint *)0x0) && (uVar15 = 0, local_b8 != (uint *)PTR_DAT_1403440a0)) { uVar15 = local_b8[-2]; } uVar7 = uVar6; if ((((int)uVar6 <= (int)uVar15) && (uVar7 = uVar13, local_b8 != (uint *)0x0)) && (local_b8 != (uint *)PTR_DAT_1403440a0)) { uVar7 = local_b8[-2]; } uVar15 = 1; if (1 < (int)uVar7) { uVar15 = uVar7; } uVar7 = uVar13; if ((local_b8 != (uint *)0x0) && (local_b8 != (uint *)PTR_DAT_1403440a0)) { uVar7 = local_b8[-2]; } uVar14 = 0; if ((int)uVar7 < (int)uVar15) { if (local_b8 == (uint *)0x0) { local_b8 = (uint *)PTR_DAT_1403440a0; } if ((int)uVar15 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if (uVar15 == 0) { FUN_14004eb70(&local_b8); } else { uVar7 = uVar13; if ((local_b8 != (uint *)0x0) && (local_b8 != (uint *)PTR_DAT_1403440a0)) { uVar7 = local_b8[-2]; } if (uVar15 != uVar7) { puVar10 = (uint *)FUN_14016d940((longlong)(int)uVar15 * 2 + 10); if (puVar10 != (uint *)0x0) { *puVar10 = 0; puVar10[1] = 1; } *puVar10 = uVar15; uVar7 = uVar14; if ((local_b8 != (uint *)0x0) && (local_b8 != (uint *)PTR_DAT_1403440a0)) { uVar7 = local_b8[-2]; } puVar12 = (uint *)PTR_DAT_1403440a0; if ((int)uVar15 < (int)uVar7) { LAB_1401a1085: if (local_b8 != (uint *)0x0) { puVar12 = local_b8; } } else { uVar15 = uVar13; if (local_b8 != (uint *)0x0) { if (local_b8 != (uint *)PTR_DAT_1403440a0) { uVar15 = local_b8[-2]; } goto LAB_1401a1085; } } FUN_14016d770(puVar10 + 2,puVar12,uVar15); FUN_14004eb70(&local_b8); local_b8 = puVar10 + 2; } } } FUN_14004e850(&local_b8); puVar10 = local_b8; if (local_b8 == (uint *)0x0) { puVar10 = (uint *)PTR_DAT_1403440a0; } FUN_14016d770(puVar10,L"decryptCount1 read failed!!",uVar6); puVar10 = local_b8; if (local_b8 == (uint *)0x0) { puVar10 = (uint *)PTR_DAT_1403440a0; } uVar6 = FUN_14016d740(puVar10); uVar15 = 0; if (0 < (int)uVar6) { uVar15 = uVar6; } uVar6 = uVar14; if ((local_b8 != (uint *)0x0) && (local_b8 != (uint *)PTR_DAT_1403440a0)) { uVar6 = local_b8[-2]; } if (((int)uVar6 <= (int)uVar15) && (uVar15 = uVar14, local_b8 != (uint *)0x0)) { if (local_b8 == (uint *)PTR_DAT_1403440a0) goto LAB_1401a1135; uVar15 = local_b8[-2]; } if (((local_b8 != (uint *)PTR_DAT_1403440a0) && (local_b8 != (uint *)0x0)) && (local_b8 + -2 != (uint *)0x0)) { local_b8[-2] = uVar15; *(undefined2 *)((longlong)local_b8 + (longlong)(int)uVar15 * 2) = 0; } LAB_1401a1135: local_88 = 0; local_80 = 0; local_78 = 0; local_70 = 0; local_90 = Proud::ByteArray::vftable; uVar11 = FUN_140198f80(local_50,6,param_3[10],&local_b8,&local_90); (**(code **)(*param_1 + 0x80))(param_1,uVar11); FUN_14019a9e0(&local_90); puVar10 = local_b8; if (((local_b8 != (uint *)0x0) && (local_b8 != (uint *)PTR_DAT_1403440a0)) && (puVar12 = local_b8 + -2, puVar12 != (uint *)0x0)) { uVar11 = FUN_14016d8c0(); local_a8 = uVar11; FUN_14016db50(uVar11); local_a0 = 1; puVar10 = puVar10 + -1; *puVar10 = *puVar10 - 1; if (*puVar10 == 0) { FUN_14016d970(puVar12); } FUN_14016dbe0(uVar11); } FUN_14016b040(local_res20,local_68); FUN_14016dbe0(uVar9); puVar3 = local_b0; if (((local_b0 != (undefined *)0x0) && (local_b0 != PTR_DAT_1403440a0)) && (puVar1 = local_b0 + -8, puVar1 != (undefined *)0x0)) { uVar9 = FUN_14016d8c0(); local_a8 = uVar9; FUN_14016db50(uVar9); local_a0 = 1; piVar2 = (int *)(puVar3 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14016d970(puVar1); } FUN_14016dbe0(uVar9); } return 0; }