/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x14005fb60 FUN_14005fb60 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_14005fb60(longlong param_1,longlong param_2,byte param_3) { char cVar1; longlong lVar2; undefined8 *puVar3; ulonglong *puVar4; ulonglong *puVar5; ulonglong *puVar6; void **_Src; longlong lVar7; ulonglong uVar8; char *pcVar9; char *pcVar10; char *pcVar11; bool bVar12; undefined1 auStack_178 [32]; ulonglong *local_158; ulonglong *local_150; undefined8 local_148; undefined4 *local_138; undefined4 *local_130; undefined8 local_128; longlong local_120 [3]; longlong local_108 [3]; ulonglong local_f0; ulonglong *local_e8; ulonglong *local_e0; ulonglong local_d8; undefined8 local_c8; undefined2 local_c0; undefined6 uStack_be; undefined8 local_b0; ulonglong local_a8; void *local_98 [2]; void *local_88; void *local_80; undefined8 local_68; ulonglong *local_60; ulonglong *local_58; ulonglong local_50; ulonglong local_40; local_128 = 0xfffffffffffffffe; local_40 = DAT_1401ac5a0 ^ (ulonglong)auStack_178; pcVar10 = (char *)0x0; local_c8 = 0; local_a8 = 7; local_b0 = 0; local_c0 = 0; local_80 = (void *)0x7; local_88 = (void *)0x0; local_98[0] = (void *)((ulonglong)local_98[0] & 0xffffffffffff0000); for (lVar2 = *(longlong *)(param_2 + 0xa0); lVar2 != param_2 + 0x58; lVar2 = *(longlong *)(lVar2 + 0x48)) { pcVar9 = (char *)(*(longlong *)(lVar2 + 0x20) + 0x10); bVar12 = pcVar9 == (char *)0x0; lVar7 = 3; pcVar11 = "ip"; do { if (lVar7 == 0) break; lVar7 = lVar7 + -1; bVar12 = *pcVar9 == *pcVar11; pcVar9 = pcVar9 + 1; pcVar11 = pcVar11 + 1; } while (bVar12); if (bVar12) { pcVar10 = (char *)(*(longlong *)(lVar2 + 0x30) + 0x10); break; } } local_d8 = 0xf; local_e0 = (ulonglong *)0x0; local_f0._0_1_ = 0; uVar8 = 0xffffffffffffffff; pcVar9 = pcVar10; do { if (uVar8 == 0) break; uVar8 = uVar8 - 1; cVar1 = *pcVar9; pcVar9 = pcVar9 + 1; } while (cVar1 != '\0'); FUN_140003e60(&local_f0,pcVar10,~uVar8 - 1); _Src = (void **)FUN_140118b90(&local_68,(LPCSTR)&local_f0); if (local_98 != _Src) { if ((void *)0x7 < local_80) { operator_delete(local_98[0]); } local_80 = (void *)0x7; local_88 = (void *)0x0; local_98[0] = (void *)((ulonglong)local_98[0] & 0xffffffffffff0000); if (_Src[3] < (void *)0x8) { memmove(local_98,_Src,((longlong)_Src[2] + 1U) * 2); } else { local_98[0] = *_Src; *_Src = (void *)0x0; } local_88 = _Src[2]; local_80 = _Src[3]; _Src[2] = (void *)0x0; _Src[3] = (void *)0x0; } if (7 < local_50) { operator_delete((void *)CONCAT62(local_68._2_6_,CONCAT11(local_68._1_1_,(byte)local_68))); } local_50 = 7; local_58 = (ulonglong *)0x0; local_68._0_1_ = 0; local_68._1_1_ = 0; if (0xf < local_d8) { operator_delete((void *)CONCAT71(local_f0._1_7_,(byte)local_f0)); } for (lVar2 = *(longlong *)(param_2 + 0xa0); lVar2 != param_2 + 0x58; lVar2 = *(longlong *)(lVar2 + 0x48)) { pcVar10 = (char *)(*(longlong *)(lVar2 + 0x20) + 0x10); bVar12 = pcVar10 == (char *)0x0; lVar7 = 5; pcVar9 = "port"; do { if (lVar7 == 0) break; lVar7 = lVar7 + -1; bVar12 = *pcVar10 == *pcVar9; pcVar10 = pcVar10 + 1; pcVar9 = pcVar9 + 1; } while (bVar12); if (bVar12) { sscanf_s((char *)(*(longlong *)(lVar2 + 0x30) + 0x10),"%d"); break; } } if (*(longlong *)(param_1 + 0x1c8) != 0) { for (puVar3 = *(undefined8 **) (*(longlong *)(param_1 + 0x1a8) + ((ulonglong)param_3 % *(ulonglong *)(param_1 + 0x1b0)) * 8); puVar3 != (undefined8 *)0x0; puVar3 = (undefined8 *)*puVar3) { if (param_3 == *(byte *)(puVar3 + 1)) { if (puVar3 != (undefined8 *)0x0) { FUN_140060ce0(puVar3 + 2,(undefined4 *)&local_c8); goto LAB_14005feb9; } break; } } } local_158 = (ulonglong *)0x0; local_150 = (ulonglong *)0x0; local_148 = 0; FUN_1400611f0((longlong *)&local_158); puVar5 = local_150; local_138 = (undefined4 *)local_150; local_130 = (undefined4 *)local_150; if (local_150 != (ulonglong *)0x0) { *(undefined4 *)local_150 = (undefined4)local_c8; *(undefined4 *)((longlong)local_150 + 4) = local_c8._4_4_; *(undefined8 *)((longlong)local_150 + 0x20) = 7; *(undefined8 *)((longlong)local_150 + 0x18) = 0; *(undefined2 *)((longlong)local_150 + 8) = 0; FUN_140001750((longlong *)((longlong)local_150 + 8),(longlong *)&local_c0,0,0xffffffffffffffff); *(undefined8 *)((longlong)puVar5 + 0x48) = 7; *(undefined8 *)((longlong)puVar5 + 0x40) = 0; *(undefined2 *)((longlong)puVar5 + 0x30) = 0; FUN_140001750((longlong *)((longlong)puVar5 + 0x30),(longlong *)local_98,0,0xffffffffffffffff); } local_150 = (ulonglong *)((longlong)puVar5 + 0x58); local_f0._0_1_ = param_3; FUN_140061c40(&local_e8,(longlong *)&local_158); puVar6 = local_e0; puVar4 = local_e8; local_68._0_1_ = (byte)local_f0; local_60 = local_e8; local_58 = local_e0; local_50 = local_d8; local_e8 = (ulonglong *)0x0; local_e0 = (ulonglong *)0x0; local_d8 = 0; if (*(longlong *)(param_1 + 0x1c8) == 0) { FUN_140061960((longlong *)(param_1 + 0x1a8),local_120,(byte *)&local_68); } else { FUN_140061840((longlong *)(param_1 + 0x1a8),local_108,(byte *)&local_68,(undefined1 *)&local_68) ; } if (puVar4 != (ulonglong *)0x0) { FUN_140061ab0(puVar4,puVar6); operator_delete(puVar4); } puVar4 = local_158; if (local_158 != (ulonglong *)0x0) { FUN_140061ab0(local_158,(ulonglong *)((longlong)puVar5 + 0x58)); operator_delete(puVar4); } LAB_14005feb9: if ((void *)0x7 < local_80) { operator_delete(local_98[0]); } local_80 = (void *)0x7; local_88 = (void *)0x0; local_98[0] = (void *)((ulonglong)local_98[0] & 0xffffffffffff0000); if (7 < local_a8) { operator_delete((void *)CONCAT62(uStack_be,local_c0)); } return; }