205 lines
7.5 KiB
C
205 lines
7.5 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400c2ec0 FUN_1400c2ec0
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
|
|
void FUN_1400c2ec0(longlong param_1,uint *param_2,longlong param_3,TypeDescriptor *param_4)
|
|
|
|
{
|
|
undefined **ppuVar1;
|
|
undefined **ppuVar2;
|
|
int iVar3;
|
|
undefined8 uVar4;
|
|
ulonglong uVar5;
|
|
int *piVar6;
|
|
int *piVar7;
|
|
longlong lVar8;
|
|
longlong *plVar9;
|
|
longlong *plVar10;
|
|
int **ppiVar11;
|
|
SIZE_T SVar12;
|
|
undefined ***pppuVar13;
|
|
int *piVar14;
|
|
undefined *puVar15;
|
|
bool bVar16;
|
|
undefined1 auStack_da8 [32];
|
|
undefined *local_d88;
|
|
undefined **local_d78;
|
|
undefined4 local_d70;
|
|
undefined2 local_d6c;
|
|
undefined **local_d68;
|
|
undefined4 local_d60;
|
|
undefined2 local_d5c;
|
|
int **local_d58;
|
|
undefined1 local_d50;
|
|
undefined *local_d48;
|
|
int *local_d40;
|
|
undefined1 local_d38;
|
|
int local_d30 [2];
|
|
undefined *local_d28;
|
|
longlong local_d20;
|
|
int local_d14;
|
|
undefined8 local_d08;
|
|
int *local_d00;
|
|
undefined1 local_cf8;
|
|
undefined **local_ce8;
|
|
undefined8 uStack_ce0;
|
|
undefined1 local_cd8 [3216];
|
|
ulonglong local_48;
|
|
|
|
local_d08 = 0xfffffffffffffffe;
|
|
local_48 = DAT_1401ac5a0 ^ (ulonglong)auStack_da8;
|
|
FUN_1400cf890();
|
|
local_d68 = Proud::AddrPort::vftable;
|
|
local_d60 = 0;
|
|
local_d5c = 0;
|
|
local_d78 = Proud::AddrPort::vftable;
|
|
local_d70 = 0;
|
|
local_d6c = 0;
|
|
local_ce8 = (undefined **)0x0;
|
|
uStack_ce0 = 0;
|
|
SVar12 = 0x10;
|
|
uVar4 = FUN_1400bc930(param_2,&local_ce8,0x10);
|
|
if ((char)uVar4 == '\0') {
|
|
return;
|
|
}
|
|
uVar5 = FUN_1400bd360(param_2,(longlong)&local_d68);
|
|
if ((char)uVar5 != '\0') {
|
|
uVar5 = FUN_1400bd360(param_2,(longlong)&local_d78);
|
|
if ((char)uVar5 == '\0') {
|
|
return;
|
|
}
|
|
piVar6 = (int *)(**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))();
|
|
local_d00 = piVar6;
|
|
FUN_14006b350(piVar6);
|
|
local_cf8 = 1;
|
|
if (DAT_1401b42cf != '\0') {
|
|
SVar12 = **(SIZE_T **)(param_1 + 0x148);
|
|
(**(code **)(SVar12 + 200))
|
|
(*(SIZE_T **)(param_1 + 0x148),
|
|
L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_NotifyHolepunchSuccess");
|
|
}
|
|
bVar16 = *(undefined ***)(param_3 + 0x728) < local_ce8;
|
|
if ((*(undefined ***)(param_3 + 0x728) == local_ce8) &&
|
|
(bVar16 = *(ulonglong *)(param_3 + 0x730) < uStack_ce0,
|
|
*(ulonglong *)(param_3 + 0x730) == uStack_ce0)) {
|
|
iVar3 = 0;
|
|
}
|
|
else {
|
|
iVar3 = (1 - (uint)bVar16) - (uint)(bVar16 != 0);
|
|
}
|
|
if ((iVar3 == 0) && (*(char *)(param_3 + 0x700) == '\0')) {
|
|
*(undefined1 *)(param_3 + 0x700) = 1;
|
|
uVar4 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x118) + 8))();
|
|
*(undefined8 *)(param_3 + 0x198) = uVar4;
|
|
uVar4 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x118) + 8))();
|
|
*(undefined8 *)(param_3 + 0x1b8) = uVar4;
|
|
local_ce8 = Proud::AddrPort::vftable;
|
|
uStack_ce0._0_6_ = CONCAT24(local_d6c,local_d70);
|
|
FUN_1400da400(param_3 + 0x700,(longlong)&local_ce8);
|
|
*(undefined4 *)(param_3 + 0x720) = local_d60;
|
|
*(undefined2 *)(param_3 + 0x724) = local_d5c;
|
|
lVar8 = param_3;
|
|
FUN_140088db0(*(longlong *)(param_1 + 0x148),param_3,SVar12,param_4);
|
|
FUN_1400bca00(local_d30);
|
|
FUN_1400bc4d0((longlong)local_d30,lVar8,SVar12,param_4);
|
|
FUN_1400bcb60(local_d30,0x800,SVar12,param_4);
|
|
uVar4 = 0;
|
|
FUN_1400bcb60(local_d30,0,SVar12,param_4);
|
|
FUN_140054a10((longlong)local_d30,CONCAT71((int7)((ulonglong)uVar4 >> 8),0xf),SVar12,param_4);
|
|
local_ce8 = *(undefined ***)(param_3 + 0x728);
|
|
uStack_ce0 = *(undefined8 *)(param_3 + 0x730);
|
|
FUN_14005c0c0((longlong)local_d30,&local_ce8,SVar12,param_4);
|
|
piVar7 = (int *)(**(code **)(*(longlong *)(param_3 + 0x108) + 0x10))();
|
|
local_d40 = piVar7;
|
|
FUN_14006b350(piVar7);
|
|
local_d38 = 1;
|
|
lVar8 = FUN_14007db50((longlong)local_cd8,(longlong)local_d30,SVar12);
|
|
local_ce8 = (undefined **)0x0;
|
|
uStack_ce0 = CONCAT71(uStack_ce0._1_7_,1);
|
|
pppuVar13 = &local_ce8;
|
|
FUN_1400d87b0(*(char **)(param_3 + 0x748),lVar8,(SIZE_T *)pppuVar13,param_4);
|
|
FUN_14007ca50((longlong)local_cd8,lVar8,pppuVar13,param_4);
|
|
FUN_14006b3e0((longlong)piVar7);
|
|
if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0) != 0) {
|
|
FUN_14006cb70(piVar7,lVar8,pppuVar13,param_4);
|
|
local_d40 = (int *)PTR_DAT_1401ac010;
|
|
plVar9 = FUN_140070660((longlong)&local_d78,(longlong *)&local_ce8,pppuVar13,param_4);
|
|
plVar10 = FUN_140070660((longlong)&local_d68,(longlong *)&local_d48,pppuVar13,param_4);
|
|
local_d88 = (undefined *)*plVar9;
|
|
if ((undefined *)*plVar9 == (undefined *)0x0) {
|
|
local_d88 = PTR_DAT_1401ac010;
|
|
}
|
|
puVar15 = (undefined *)*plVar10;
|
|
if ((undefined *)*plVar10 == (undefined *)0x0) {
|
|
puVar15 = PTR_DAT_1401ac010;
|
|
}
|
|
uVar5 = (ulonglong)*(uint *)(param_3 + 0x6f8);
|
|
ppiVar11 = &local_d40;
|
|
FUN_140053d20((longlong *)ppiVar11,
|
|
L"Client %d가 서버와의 UDP 홀펀칭 성공: Client local Addr=%s,Client addr at server=%s"
|
|
,uVar5,puVar15);
|
|
if (((local_d48 != (undefined *)0x0) && (local_d48 != PTR_DAT_1401ac010)) &&
|
|
(local_d48 + -8 != (undefined *)0x0)) {
|
|
ppiVar11 = (int **)FUN_14006cb70(ppiVar11,PTR_DAT_1401ac010,uVar5,puVar15);
|
|
local_d58 = ppiVar11;
|
|
FUN_14006b350((int *)ppiVar11);
|
|
local_d50 = 1;
|
|
piVar7 = (int *)(local_d48 + -4);
|
|
*piVar7 = *piVar7 + -1;
|
|
if (*piVar7 == 0) {
|
|
FUN_14006cc60(local_d48 + -8);
|
|
}
|
|
FUN_14006b3e0((longlong)ppiVar11);
|
|
}
|
|
ppuVar2 = local_ce8;
|
|
local_d48 = PTR_DAT_1401ac010;
|
|
if (((local_ce8 != (undefined **)0x0) && (local_ce8 != (undefined **)PTR_DAT_1401ac010)) &&
|
|
(ppuVar1 = local_ce8 + -1, ppuVar1 != (undefined **)0x0)) {
|
|
ppiVar11 = (int **)FUN_14006cb70(ppiVar11,PTR_DAT_1401ac010,uVar5,puVar15);
|
|
local_d58 = ppiVar11;
|
|
FUN_14006b350((int *)ppiVar11);
|
|
local_d50 = 1;
|
|
piVar7 = (int *)((longlong)ppuVar2 + -4);
|
|
*piVar7 = *piVar7 + -1;
|
|
if (*piVar7 == 0) {
|
|
FUN_14006cc60(ppuVar1);
|
|
}
|
|
FUN_14006b3e0((longlong)ppiVar11);
|
|
}
|
|
piVar7 = local_d40;
|
|
piVar14 = local_d40;
|
|
if (local_d40 == (int *)0x0) {
|
|
piVar14 = (int *)PTR_DAT_1401ac010;
|
|
}
|
|
uVar4 = 1;
|
|
lVar8 = *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0);
|
|
FUN_1400cb700(lVar8,1,(short *)piVar14,puVar15);
|
|
if (((piVar7 != (int *)0x0) && (piVar7 != (int *)PTR_DAT_1401ac010)) &&
|
|
(piVar7 + -2 != (int *)0x0)) {
|
|
ppiVar11 = (int **)FUN_14006cb70(lVar8,uVar4,piVar14,puVar15);
|
|
local_d58 = ppiVar11;
|
|
FUN_14006b350((int *)ppiVar11);
|
|
local_d50 = 1;
|
|
piVar14 = piVar7 + -1;
|
|
*piVar14 = *piVar14 + -1;
|
|
if (*piVar14 == 0) {
|
|
FUN_14006cc60(piVar7 + -2);
|
|
}
|
|
FUN_14006b3e0((longlong)ppiVar11);
|
|
}
|
|
}
|
|
local_ce8 = &local_d28;
|
|
FUN_1400d1800((longlong *)&local_d28);
|
|
if ((local_d20 != 0) && (local_d14 < 0)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
}
|
|
FUN_14006b3e0((longlong)piVar6);
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
|