/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400c7630 FUN_1400c7630 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1400c7630(int *param_1,uint *param_2,longlong *param_3,undefined8 param_4) { ulonglong uVar1; undefined8 uVar2; int *piVar3; byte *pbVar4; longlong lVar5; undefined ***pppuVar6; int iVar7; SIZE_T SVar8; undefined ***pppuVar9; uint *puVar10; longlong **pplVar11; longlong *plVar12; undefined8 uVar13; byte *pbVar14; undefined1 auStack_e68 [32]; int *local_e48; undefined1 local_e40; longlong *local_e38; undefined1 local_e30; undefined **local_e28; undefined8 local_e20; byte *local_e18; undefined8 local_e10; undefined8 local_e08; undefined **local_e00; undefined8 local_df8; byte *local_df0; undefined8 local_de8; undefined8 local_de0; undefined **local_dd8; undefined8 local_dd0; byte *local_dc8; undefined8 local_dc0; undefined8 local_db8; int *local_db0; undefined1 local_da8; undefined **local_da0; undefined8 local_d98; byte *local_d90; undefined8 local_d88; undefined8 local_d80; int local_d78 [2]; longlong local_d70; longlong local_d68; undefined4 local_d60; int local_d5c; undefined8 local_d20; exception local_d18 [80]; undefined1 local_cc8 [3216]; ulonglong local_38; local_d20 = 0xfffffffffffffffe; local_38 = DAT_1401ac5a0 ^ (ulonglong)auStack_e68; plVar12 = param_3; local_e38 = param_3; local_db0 = param_1; FUN_1400cf890(); pbVar14 = (byte *)0x0; local_df8 = 0; local_df0 = (byte *)0x0; local_de8 = 0; local_de0 = 0; local_e00 = Proud::ByteArray::vftable; uVar1 = FUN_1400bcfd0(param_2,&local_e48,plVar12,param_4); piVar3 = local_e48; if ((((char)uVar1 != '\0') && (iVar7 = (int)local_e48, -1 < iVar7)) && (iVar7 <= DAT_1401ac140)) { FUN_1400146f0((longlong)&local_e00,iVar7,(SIZE_T)plVar12); pbVar4 = local_df0; if ((int)local_de8 == 0) { pbVar4 = pbVar14; } SVar8 = (ulonglong)piVar3 & 0xffffffff; uVar2 = FUN_1400bc930(param_2,(undefined8 *)pbVar4,SVar8); if ((char)uVar2 != '\0') { local_dd0 = 0; local_dc8 = (byte *)0x0; local_dc0 = 0; local_db8 = 0; local_dd8 = Proud::ByteArray::vftable; uVar1 = FUN_1400bcfd0(param_2,&local_e48,SVar8,param_4); piVar3 = local_e48; if ((((char)uVar1 != '\0') && (iVar7 = (int)local_e48, -1 < iVar7)) && (iVar7 <= DAT_1401ac140)) { FUN_1400146f0((longlong)&local_dd8,iVar7,SVar8); pbVar4 = local_dc8; if ((int)local_dc0 == 0) { pbVar4 = pbVar14; } uVar2 = FUN_1400bc930(param_2,(undefined8 *)pbVar4,(ulonglong)piVar3 & 0xffffffff); if ((char)uVar2 != '\0') { local_d98 = 0; local_d90 = (byte *)0x0; local_d88 = 0; local_d80 = 0; local_da0 = Proud::ByteArray::vftable; plVar12 = (longlong *)(*(longlong *)(param_1 + 0x52) + 0xc48); pppuVar9 = &local_e00; pppuVar6 = &local_da0; FUN_1400dd990((ulonglong *)&local_e48,(longlong)pppuVar6,(SIZE_T)pppuVar9,plVar12); if ((local_e48 == (int *)0x0) || (*(longlong *)(local_e48 + 0xe) == 0)) { FUN_140064150((longlong *)&local_e48,pppuVar6,pppuVar9,plVar12); piVar3 = (int *)(**(code **)(**(longlong **)(param_1 + 0x52) + 0x58))(); local_e48 = piVar3; FUN_14006b350(piVar3); local_e40 = 1; if (DAT_1401b42cf != '\0') { (**(code **)(**(longlong **)(param_1 + 0x52) + 200)) (*(longlong **)(param_1 + 0x52), L"Proud::CNetThreads_S::NetworkerThread_ProcessMessage_NotifyCSEncryptedSessionKey" ); } pbVar4 = pbVar14; if (*(longlong *)(*(longlong *)(param_1 + 0x52) + 0x1708) != 0) { pbVar4 = *(byte **)(*(longlong *)(param_1 + 0x52) + 0x16f8); } for (; pbVar4 != (byte *)0x0; pbVar4 = *(byte **)(pbVar4 + 0x18)) { if (param_3 == *(longlong **)(pbVar4 + 0x10)) { pbVar4 = local_d90; if ((int)local_d88 == 0) { pbVar4 = pbVar14; } uVar13 = 0x10; FUN_1400cd030(param_3 + 0x51,pbVar4, (ulonglong)(*(uint *)(*(longlong *)(param_1 + 0x52) + 0x244) >> 3), 0x10); local_e20 = 0; local_e18 = (byte *)0x0; local_e10 = 0; local_e08 = 0; local_e28 = Proud::ByteArray::vftable; puVar10 = (uint *)(param_3 + 0x51); uVar2 = FUN_1400ceaa0((longlong)&local_dd8,(longlong)&local_e28,puVar10,uVar13); if ((char)uVar2 == '\0') { FUN_14006ba50(local_d18,L"Decrypt Fast EncryptKey Error",puVar10,uVar13); /* WARNING: Subroutine does not return */ _CxxThrowException(local_d18,(ThrowInfo *)&DAT_1401a93e8); } pbVar4 = local_e18; if ((int)local_e10 == 0) { pbVar4 = pbVar14; } SVar8 = (SIZE_T)(*(uint *)(*(longlong *)(param_1 + 0x52) + 0x248) >> 3); FUN_1400dccc0((ulonglong)(param_3 + 0xcb),(longlong)pbVar4,SVar8,uVar13); FUN_140078360(&local_e28); *(undefined1 *)(param_3 + 0xd1) = 1; FUN_14006b3e0((longlong)piVar3); local_e40 = 0; FUN_1400bca00(local_d78); FUN_1400bc4d0((longlong)local_d78,pbVar4,SVar8,uVar13); FUN_1400bcb60(local_d78,0x800,SVar8,uVar13); uVar2 = 0; FUN_1400bcb60(local_d78,0,SVar8,uVar13); FUN_140054a10((longlong)local_d78,CONCAT71((int7)((ulonglong)uVar2 >> 8),6),SVar8, uVar13); piVar3 = (int *)(**(code **)(param_3[0x21] + 0x10))(); local_db0 = piVar3; FUN_14006b350(piVar3); local_da8 = 1; lVar5 = FUN_14007db50((longlong)local_cc8,(longlong)local_d78,SVar8); local_e38 = (longlong *)0x0; local_e30 = 1; pplVar11 = &local_e38; FUN_1400d87b0((char *)param_3[0xe9],lVar5,(SIZE_T *)pplVar11,uVar13); FUN_14007ca50((longlong)local_cc8,lVar5,pplVar11,uVar13); FUN_14006b3e0((longlong)piVar3); local_e38 = &local_d70; FUN_1400d1800(&local_d70); if (local_d68 != 0) { if (local_d5c < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_d60 = 0; } FUN_140078360(&local_da0); FUN_140078360(&local_dd8); goto LAB_1400c7b03; } } FUN_14006b3e0((longlong)piVar3); FUN_140078360(&local_da0); FUN_140078360(&local_dd8); } else { FUN_140064150((longlong *)&local_e48,pppuVar6,pppuVar9,plVar12); FUN_140078360(&local_da0); FUN_140078360(&local_dd8); } goto LAB_1400c7b03; } } FUN_140078360(&local_dd8); } } LAB_1400c7b03: FUN_140078360(&local_e00); return; }