/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x1400d0530 FUN_1400d0530 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1400d0530(longlong *param_1,uint *param_2,undefined8 param_3,undefined8 param_4) { int *piVar1; undefined8 *puVar2; longlong lVar3; int iVar4; undefined8 uVar5; ulonglong uVar6; longlong *plVar7; int *piVar8; undefined1 *puVar9; longlong *plVar10; undefined1 *_Memory; longlong *plVar11; undefined *puVar12; undefined *puVar13; longlong *plVar14; bool bVar15; undefined4 uVar16; undefined4 uVar17; undefined4 uVar18; undefined4 uVar19; undefined1 auStackY_628 [32]; undefined **local_5f8; undefined4 local_5f0; undefined2 local_5ec; undefined **local_5e8; uint local_5e0; undefined2 local_5dc; longlong *local_5d8; uint local_5d0 [2]; undefined *local_5c8; undefined **local_5c0; uint local_5b8; undefined2 local_5b4; undefined **local_5b0; undefined4 local_5a8; undefined2 local_5a4; undefined *local_5a0; undefined **local_598; uint local_590; undefined2 local_58c; undefined **local_588; uint local_580; undefined2 local_57c; undefined **local_578; undefined4 local_570; undefined2 local_56c; undefined **local_568; undefined4 local_560; undefined2 local_55c; undefined **local_558; undefined4 local_550; undefined2 local_54c; undefined **local_548; uint local_540; undefined2 local_53c; undefined **local_538; undefined4 local_530; undefined2 local_52c; undefined4 local_528; undefined4 uStack_524; undefined4 uStack_520; undefined4 uStack_51c; longlong *local_518; undefined1 local_510; undefined4 local_508; undefined4 uStack_504; undefined4 uStack_500; undefined4 uStack_4fc; int *local_4f8; undefined1 local_4f0; undefined8 local_4e8; undefined4 local_4d8; undefined4 uStack_4d4; undefined4 uStack_4d0; undefined4 uStack_4cc; undefined8 local_4c8; undefined8 uStack_4c0; ulonglong local_4b8; ulonglong uStack_4b0; undefined4 local_4a8; undefined4 uStack_4a4; undefined4 uStack_4a0; undefined4 uStack_49c; ulonglong local_498; ulonglong uStack_490; undefined1 *local_488; undefined1 local_480 [264]; undefined1 *local_378; undefined1 local_370 [264]; undefined1 *local_268; undefined1 local_260 [264]; undefined1 *local_158; undefined1 local_150 [264]; ulonglong local_48; local_4e8 = 0xfffffffffffffffe; local_48 = DAT_14016f5a0 ^ (ulonglong)auStackY_628; local_5f8 = Proud::AddrPort::vftable; plVar11 = (longlong *)0x0; iVar4 = 0; local_5f0 = 0; local_5ec = 0; uVar5 = FUN_140075970(param_2,local_5d0,param_3,param_4); if ((char)uVar5 == '\0') { if (((char)param_1[0x2f2] == '\0') && ((int)param_1[0xd9] == 0)) { return; } local_488 = local_480; FUN_140005110((longlong *)&local_488,"RemotePeer.cpp",3); FUN_1400a9f70((longlong)param_1,1,L"Holepunch1 실패: %s(%d)",local_488); puVar9 = local_480; _Memory = local_488; } else { local_4c8 = 0; uStack_4c0 = 0; uVar5 = FUN_140074ee0(param_2,&local_4c8,0x10); if ((char)uVar5 == '\0') { if (((char)param_1[0x2f2] == '\0') && ((int)param_1[0xd9] == 0)) { return; } local_158 = local_150; FUN_140005110((longlong *)&local_158,"RemotePeer.cpp",3); FUN_1400a9f70((longlong)param_1,1,L"Holepunch1 실패: %s(%d)",local_158); puVar9 = local_150; _Memory = local_158; } else { uVar16 = (undefined4)local_4c8; uVar17 = local_4c8._4_4_; uVar18 = (undefined4)uStack_4c0; uVar19 = uStack_4c0._4_4_; local_4a8 = (undefined4)local_4c8; uStack_4a4 = local_4c8._4_4_; uStack_4a0 = (undefined4)uStack_4c0; uStack_49c = uStack_4c0._4_4_; local_4b8 = 0; uStack_4b0 = 0; uVar5 = FUN_140074ee0(param_2,&local_4b8,0x10); if ((char)uVar5 == '\0') { if (((char)param_1[0x2f2] == '\0') && ((int)param_1[0xd9] == 0)) { return; } local_378 = local_370; FUN_140005110((longlong *)&local_378,"RemotePeer.cpp",3); FUN_1400a9f70((longlong)param_1,1,L"Holepunch1 실패: %s(%d)",local_378); puVar9 = local_370; _Memory = local_378; } else { local_498 = local_4b8; uStack_490 = uStack_4b0; uVar6 = FUN_140075910(param_2,(longlong)&local_5f8); if ((char)uVar6 != '\0') { bVar15 = local_498 < (ulonglong)param_1[0xda]; if ((local_498 != param_1[0xda]) || (bVar15 = uStack_490 < (ulonglong)param_1[0xdb], uStack_490 != param_1[0xdb])) { iVar4 = (1 - (uint)bVar15) - (uint)(bVar15 != 0); } if (iVar4 != 0) { return; } local_5e8 = Proud::AddrPort::vftable; local_5e0 = param_2[0xe]; local_5dc = (undefined2)param_2[0xf]; uVar6 = (ulonglong)local_5d0[0]; plVar7 = FUN_1400a7920(param_1,(longlong *)&local_5d8,local_5d0[0]); plVar14 = plVar11; if ((undefined8 *)*plVar7 != (undefined8 *)0x0) { plVar14 = *(longlong **)*plVar7; } if (local_5d8 != (longlong *)0x0) { local_5d8[1] = local_5d8[1] + -1; if (local_5d8[1] == 0) { puVar2 = (undefined8 *)*local_5d8; if (puVar2 != (undefined8 *)0x0) { (**(code **)*puVar2)(puVar2,1); } FUN_14003e8b0(local_5d8); } uVar16 = (undefined4)local_4c8; uVar17 = local_4c8._4_4_; uVar18 = (undefined4)uStack_4c0; uVar19 = uStack_4c0._4_4_; } if (plVar14 == (longlong *)0x0) { return; } if (*(char *)((longlong)plVar14 + 0x684) != '\0') { return; } if ((longlong *)plVar14[5] == (longlong *)0x0) { return; } if (*(longlong *)plVar14[5] == 0) { return; } bVar15 = CONCAT44(uStack_4a4,local_4a8) < (ulonglong)plVar14[6]; if ((CONCAT44(uStack_4a4,local_4a8) == plVar14[6]) && (bVar15 = CONCAT44(uStack_49c,uStack_4a0) < (ulonglong)plVar14[7], CONCAT44(uStack_49c,uStack_4a0) == plVar14[7])) { iVar4 = 0; } else { iVar4 = (1 - (uint)bVar15) - (uint)(bVar15 != 0); } if (iVar4 != 0) { return; } if (((char)param_1[0x2f2] != '\0') || ((int)param_1[0xd9] != 0)) { FUN_1400420f0((longlong)&local_5e8,(longlong *)&local_5a0,uVar6,param_4); plVar7 = FUN_1400420f0((longlong)&local_5f8,(longlong *)&local_5c8,uVar6,param_4); puVar13 = (undefined *)*plVar7; if ((undefined *)*plVar7 == (undefined *)0x0) { puVar13 = PTR_DAT_14016f010; } puVar12 = &DAT_140124e30; FUN_1400a9f70((longlong)param_1,1,L"P2P Holepunch 수신 OK. ABS=%s ABR=%s",puVar13); if (((local_5c8 != (undefined *)0x0) && (local_5c8 != PTR_DAT_14016f010)) && (local_5c8 + -8 != (undefined *)0x0)) { param_1 = (longlong *)FUN_14003e7c0(param_1,PTR_DAT_14016f010,puVar12,puVar13); local_518 = param_1; FUN_14003d040((int *)param_1); local_510 = 1; piVar1 = (int *)(local_5c8 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14003e8b0(local_5c8 + -8); } FUN_14003d0d0((longlong)param_1); } local_5c8 = PTR_DAT_14016f010; if (((local_5a0 != (undefined *)0x0) && (local_5a0 != PTR_DAT_14016f010)) && (local_5a0 + -8 != (undefined *)0x0)) { piVar8 = (int *)FUN_14003e7c0(param_1,PTR_DAT_14016f010,puVar12,puVar13); local_4f8 = piVar8; FUN_14003d040(piVar8); local_4f0 = 1; piVar1 = (int *)(local_5a0 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14003e8b0(local_5a0 + -8); } FUN_14003d0d0((longlong)piVar8); } } FUN_140041850((longlong)(plVar14 + 0xae)); uVar6 = FUN_140041850((longlong)(plVar14 + 0xb0)); if ((char)uVar6 != '\0') { if (((longlong *)plVar14[3] == (longlong *)0x0) || (lVar3 = *(longlong *)plVar14[3], plVar7 = (longlong *)(lVar3 + -0x40), lVar3 == 0)) { plVar7 = plVar11; } uVar6 = FUN_140041850((longlong)(plVar7 + 0x25)); if ((char)uVar6 != '\0') { plVar7 = (longlong *)plVar14[3]; if ((plVar7 == (longlong *)0x0) || (plVar10 = (longlong *)(*plVar7 + -0x40), *plVar7 == 0)) { plVar10 = plVar11; } if ((int)plVar10[0x28] == (int)plVar14[0xaf]) { plVar10 = plVar11; if ((plVar7 != (longlong *)0x0) && (*plVar7 != 0)) { plVar10 = (longlong *)(*plVar7 + -0x40); } if ((((char)plVar10[0x26] == (char)plVar14[0xb1]) && (*(char *)((longlong)plVar10 + 0x131) == *(char *)((longlong)plVar14 + 0x589))) && (*(char *)((longlong)plVar10 + 0x132) == *(char *)((longlong)plVar14 + 0x58a)) ) { local_598 = Proud::AddrPort::vftable; local_590 = local_5e0; local_58c = local_5dc; local_558 = Proud::AddrPort::vftable; local_550 = local_5f0; local_54c = local_5ec; local_568 = Proud::AddrPort::vftable; local_560 = (undefined4)plVar14[0xb1]; local_55c = *(undefined2 *)((longlong)plVar14 + 0x58c); plVar7 = plVar11; if ((undefined8 *)plVar14[5] != (undefined8 *)0x0) { plVar7 = *(longlong **)plVar14[5]; } local_4d8 = uVar16; uStack_4d4 = uVar17; uStack_4d0 = uVar18; uStack_4cc = uVar19; FUN_1400cfbd0(plVar7,(longlong)&local_568,(undefined8 *)&local_4d8, (longlong)&local_558,(longlong)&local_598); } } } } uVar6 = FUN_140041850((longlong)(plVar14 + 0xae)); if ((char)uVar6 != '\0') { local_588 = Proud::AddrPort::vftable; local_580 = local_5e0; local_57c = local_5dc; local_578 = Proud::AddrPort::vftable; local_570 = local_5f0; local_56c = local_5ec; local_5b0 = Proud::AddrPort::vftable; local_5a8 = (undefined4)plVar14[0xaf]; local_5a4 = *(undefined2 *)((longlong)plVar14 + 0x57c); plVar7 = plVar11; if ((undefined8 *)plVar14[5] != (undefined8 *)0x0) { plVar7 = *(longlong **)plVar14[5]; } local_528 = uVar16; uStack_524 = uVar17; uStack_520 = uVar18; uStack_51c = uVar19; FUN_1400cfbd0(plVar7,(longlong)&local_5b0,(undefined8 *)&local_528,(longlong)&local_578, (longlong)&local_588); } local_5c0 = Proud::AddrPort::vftable; local_5b8 = local_5e0; local_5b4 = local_5dc; local_538 = Proud::AddrPort::vftable; local_530 = local_5f0; local_52c = local_5ec; local_548 = Proud::AddrPort::vftable; local_540 = param_2[0xe]; local_53c = (undefined2)param_2[0xf]; if ((undefined8 *)plVar14[5] != (undefined8 *)0x0) { plVar11 = *(longlong **)plVar14[5]; } local_508 = uVar16; uStack_504 = uVar17; uStack_500 = uVar18; uStack_4fc = uVar19; FUN_1400cfbd0(plVar11,(longlong)&local_548,(undefined8 *)&local_508,(longlong)&local_538, (longlong)&local_5c0); return; } if (((char)param_1[0x2f2] == '\0') && ((int)param_1[0xd9] == 0)) { return; } local_268 = local_260; FUN_140005110((longlong *)&local_268,"RemotePeer.cpp",3); FUN_1400a9f70((longlong)param_1,1,L"Holepunch1 실패: %s(%d)",local_268); puVar9 = local_260; _Memory = local_268; } } } if (_Memory != puVar9) { free(_Memory); } return; }