211 lines
6.2 KiB
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;
|
|
}
|
|
|