/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401a9ab0 FUN_1401a9ab0 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1401a9ab0(longlong param_1,undefined8 param_2,undefined1 *param_3) { char cVar1; ulonglong uVar2; longlong lVar3; longlong lVar4; undefined8 uVar5; undefined1 auStack_e68 [32]; ulonglong local_e48; undefined1 local_e40; undefined1 *local_e38; undefined1 local_e30; undefined **local_e28; undefined8 local_e20; longlong local_e18; undefined8 local_e10; undefined8 local_e08; undefined **local_e00; undefined8 local_df8; longlong local_df0; undefined8 local_de8; undefined8 local_de0; undefined **local_dd8; undefined8 local_dd0; longlong local_dc8; undefined8 local_dc0; undefined8 local_db8; longlong local_db0; undefined1 local_da8; undefined **local_da0; undefined8 local_d98; longlong local_d90; undefined8 local_d88; undefined8 local_d80; undefined1 local_d78 [8]; undefined1 local_d70 [8]; longlong local_d68; undefined4 local_d60; int local_d5c; undefined8 local_d20; undefined1 local_d18 [80]; undefined1 local_cc8 [3216]; ulonglong local_38; local_d20 = 0xfffffffffffffffe; local_38 = DAT_1403463c0 ^ (ulonglong)auStack_e68; local_e38 = param_3; local_db0 = param_1; FUN_1401b1b20(param_3 + 0xc0); lVar4 = 0; local_df8 = 0; local_df0 = 0; local_de8 = 0; local_de0 = 0; local_e00 = Proud::ByteArray::vftable; cVar1 = FUN_14016ba10(param_2,&local_e48); uVar2 = local_e48; if (((cVar1 != '\0') && (-1 < (int)local_e48)) && ((int)local_e48 <= DAT_140344d70)) { FUN_14004f0e0(&local_e00,local_e48 & 0xffffffff); lVar3 = local_df0; if ((int)local_de8 == 0) { lVar3 = lVar4; } cVar1 = FUN_14016b370(param_2,lVar3,uVar2 & 0xffffffff); if (cVar1 != '\0') { local_dd0 = 0; local_dc8 = 0; local_dc0 = 0; local_db8 = 0; local_dd8 = Proud::ByteArray::vftable; cVar1 = FUN_14016ba10(param_2,&local_e48); uVar2 = local_e48; if (((cVar1 != '\0') && (-1 < (int)local_e48)) && ((int)local_e48 <= DAT_140344d70)) { FUN_14004f0e0(&local_dd8,local_e48 & 0xffffffff); lVar3 = local_dc8; if ((int)local_dc0 == 0) { lVar3 = lVar4; } cVar1 = FUN_14016b370(param_2,lVar3,uVar2 & 0xffffffff); if (cVar1 != '\0') { local_d98 = 0; local_d90 = 0; local_d88 = 0; local_d80 = 0; local_da0 = Proud::ByteArray::vftable; FUN_1401c1860(&local_e48,&local_da0,&local_e00,*(longlong *)(param_1 + 0x148) + 0xc48); if ((local_e48 == 0) || (*(longlong *)(local_e48 + 0x38) == 0)) { FUN_140154b00(&local_e48); uVar2 = (**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))(); local_e48 = uVar2; FUN_14016db50(uVar2); local_e40 = 1; if (DAT_14034c86f != '\0') { (**(code **)(**(longlong **)(param_1 + 0x148) + 200)) (*(longlong **)(param_1 + 0x148), L"Proud::CNetThreads_S::NetworkerThread_ProcessMessage_NotifyCSEncryptedSessionKey" ); } lVar3 = lVar4; if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x1708) != 0) { lVar3 = *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x16f8); } for (; lVar3 != 0; lVar3 = *(longlong *)(lVar3 + 0x18)) { if (param_3 == *(undefined1 **)(lVar3 + 0x10)) { lVar3 = local_d90; if ((int)local_d88 == 0) { lVar3 = lVar4; } FUN_1401af310(param_3 + 0x288,lVar3, *(uint *)(*(longlong *)(param_1 + 0x148) + 0x244) >> 3,0x10); local_e20 = 0; local_e18 = 0; local_e10 = 0; local_e08 = 0; local_e28 = Proud::ByteArray::vftable; cVar1 = FUN_1401b0d80(&local_dd8,&local_e28,param_3 + 0x288); if (cVar1 == '\0') { FUN_14016d300(local_d18,L"Decrypt Fast EncryptKey Error"); /* WARNING: Subroutine does not return */ _CxxThrowException(local_d18,(ThrowInfo *)&DAT_1403417f8); } lVar3 = local_e18; if ((int)local_e10 == 0) { lVar3 = lVar4; } FUN_1401c0b90(param_3 + 0x658,lVar3, *(uint *)(*(longlong *)(param_1 + 0x148) + 0x248) >> 3); FUN_14019a9e0(&local_e28); param_3[0x688] = 1; FUN_14016dbe0(uVar2); local_e40 = 0; FUN_14016b440(local_d78); FUN_14016abe0(local_d78); FUN_14016b5a0(local_d78,0x800); FUN_14016b5a0(local_d78,0); FUN_14004eef0(local_d78,6); lVar4 = (**(code **)(*(longlong *)(param_3 + 0x108) + 0x10))(); local_db0 = lVar4; FUN_14016db50(lVar4); local_da8 = 1; uVar5 = FUN_14016e080(local_cc8,local_d78); local_e38 = (undefined1 *)0x0; local_e30 = 1; FUN_1401ba860(*(undefined8 *)(param_3 + 0x748),uVar5,&local_e38); FUN_14016ddc0(local_cc8); FUN_14016dbe0(lVar4); local_e38 = local_d70; FUN_14016d0e0(local_d70); if (local_d68 != 0) { if (local_d5c < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_d60 = 0; } FUN_14019a9e0(&local_da0); FUN_14019a9e0(&local_dd8); goto LAB_1401a9f83; } } FUN_14016dbe0(uVar2); FUN_14019a9e0(&local_da0); FUN_14019a9e0(&local_dd8); } else { FUN_140154b00(&local_e48); FUN_14019a9e0(&local_da0); FUN_14019a9e0(&local_dd8); } goto LAB_1401a9f83; } } FUN_14019a9e0(&local_dd8); } } LAB_1401a9f83: FUN_14019a9e0(&local_e00); return; }