server-re/decomp/MessageServer_Release_x64/full/functions/0x14005fb60.c

211 lines
6.2 KiB
C

/* 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;
}