/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x14008a9c0 FUN_14008a9c0 * Pseudocode, not original source. */ undefined8 FUN_14008a9c0(longlong param_1,longlong param_2,ulonglong param_3) { int *piVar1; uint uVar2; int *piVar3; short *psVar4; undefined8 uVar5; longlong *plVar6; undefined8 *puVar7; undefined **ppuVar8; short **ppsVar9; longlong lVar10; ulonglong uVar11; wchar_t *pwVar12; char *pcVar13; uint uVar14; ulonglong uVar15; longlong lVar16; ulonglong uVar17; undefined *puVar18; short *psVar19; short *local_res8; undefined *local_res20; undefined **local_60; undefined4 local_58; undefined2 local_54; int *local_50; undefined1 local_48; piVar3 = (int *)(**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))(); local_50 = piVar3; FUN_14002e6e0(piVar3); local_48 = 1; if (DAT_14015bfcf != '\0') { (**(code **)(**(longlong **)(param_1 + 0x148) + 200))(); } FUN_14003a420((char *)(*(longlong *)(param_1 + 0x148) + 0x760)); local_res8 = (short *)FUN_140030280(0x780); psVar19 = (short *)0x0; psVar4 = psVar19; if (local_res8 != (short *)0x0) { local_60 = Proud::AddrPort::vftable; local_58 = *(undefined4 *)(param_3 + 8); local_54 = *(undefined2 *)(param_3 + 0xc); psVar4 = (short *)FUN_1400965a0((undefined8 *)local_res8,*(longlong *)(param_1 + 0x148),param_2, &local_60); } lVar10 = *(longlong *)(param_1 + 0x148); pcVar13 = (char *)(lVar10 + 0x1740); uVar2 = *(uint *)(lVar10 + 0x1768); uVar17 = (ulonglong)uVar2; uVar11 = ((ulonglong)psVar4 & 0xffffffff) % uVar17; uVar15 = *(ulonglong *)(lVar10 + 0x1748); uVar14 = (uint)uVar11; local_res8 = psVar4; if (uVar15 != 0) { for (plVar6 = *(longlong **)(uVar15 + uVar11 * 8); (plVar6 != (longlong *)0x0 && (uVar14 == *(uint *)(plVar6 + 4) % uVar2)); plVar6 = (longlong *)plVar6[2]) { if ((short *)*plVar6 == psVar4) goto LAB_14008ab69; } if (uVar15 != 0) { for (plVar6 = *(longlong **)(uVar15 + uVar11 * 8); (plVar6 != (longlong *)0x0 && (uVar14 == *(uint *)(plVar6 + 4) % uVar2)); plVar6 = (longlong *)plVar6[2]) { if ((short *)*plVar6 == psVar4) goto LAB_14008ab65; } if (uVar15 != 0) goto LAB_14008ab3c; } } uVar5 = FUN_14003f710((longlong)pcVar13,uVar2,'\x01'); if ((char)uVar5 == '\0') { /* WARNING: Subroutine does not return */ FUN_14000b450(0x8007000e); } LAB_14008ab3c: FUN_14003d560(pcVar13); uVar17 = (ulonglong)psVar4 & 0xffffffff; plVar6 = FUN_1400413b0(pcVar13,&local_res8,uVar14,(int)psVar4); FUN_14003d560(pcVar13); uVar15 = uVar11; LAB_14008ab65: *(undefined1 *)(plVar6 + 1) = 0; LAB_14008ab69: if (psVar4 != (short *)0x0) { psVar19 = psVar4 + 0x1c; } FUN_140034b90(*(longlong *)(*(longlong *)(psVar4 + 0x3a4) + 0x110),psVar19,uVar15,uVar17); FUN_14009c460((longlong)(psVar4 + 0x60)); FUN_140039410(*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x788), *(ULONG_PTR *)(*(longlong *)(psVar4 + 0x3a4) + 0x110), (LPOVERLAPPED)0xffffffffffffffff); lVar10 = *(longlong *)(param_1 + 0x148); pcVar13 = (char *)(ulonglong)*(uint *)(lVar10 + 0x1710); uVar15 = (ulonglong)((uint)*(ushort *)(param_3 + 0xc) ^ *(uint *)(param_3 + 8)) % (ulonglong)pcVar13; lVar16 = 0; if (*(longlong *)(lVar10 + 0x16f0) != 0) { lVar16 = *(longlong *)(*(longlong *)(lVar10 + 0x16f0) + uVar15 * 8); while ((lVar16 != 0 && (uVar11 = (ulonglong)*(uint *)(lVar16 + 0x28) % (ulonglong)pcVar13, (int)uVar15 == (int)uVar11))) { if ((*(uint *)(lVar16 + 8) == *(uint *)(param_3 + 8)) && (*(ushort *)(lVar16 + 0xc) == *(ushort *)(param_3 + 0xc))) goto LAB_14008ac28; lVar16 = *(longlong *)(lVar16 + 0x18); } } pcVar13 = (char *)(lVar10 + 0x16e8); uVar11 = param_3; puVar7 = FUN_140099760(pcVar13,param_3); *puVar7 = psVar4; LAB_14008ac28: if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0) != 0) { FUN_140030200(pcVar13,uVar11,lVar16,uVar15); local_res8 = (short *)PTR_DAT_140155010; plVar6 = FUN_140033b30(param_3,(longlong *)&local_res20,lVar16,uVar15); puVar18 = (undefined *)*plVar6; if ((undefined *)*plVar6 == (undefined *)0x0) { puVar18 = PTR_DAT_140155010; } pwVar12 = L"new TCP socket is accepted. RemoteClient_S=%p,TCP socket=%s"; ppsVar9 = &local_res8; FUN_14001b7a0((longlong *)ppsVar9,L"new TCP socket is accepted. RemoteClient_S=%p,TCP socket=%s" ,psVar4,puVar18); if (((local_res20 != (undefined *)0x0) && (local_res20 != PTR_DAT_140155010)) && (local_res20 + -8 != (undefined *)0x0)) { ppuVar8 = (undefined **)FUN_140030200(ppsVar9,pwVar12,psVar4,puVar18); local_60 = ppuVar8; FUN_14002e6e0((int *)ppuVar8); local_58 = CONCAT31(local_58._1_3_,1); piVar1 = (int *)(local_res20 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_1400302f0(local_res20 + -8); } FUN_14002e770((longlong)ppuVar8); } psVar19 = local_res8; psVar4 = local_res8; if (local_res8 == (short *)0x0) { psVar4 = (short *)PTR_DAT_140155010; } uVar5 = 0; lVar10 = *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0); FUN_14008f2e0(lVar10,0,psVar4,puVar18); if (((psVar19 != (short *)0x0) && (psVar19 != (short *)PTR_DAT_140155010)) && (psVar19 + -4 != (short *)0x0)) { ppuVar8 = (undefined **)FUN_140030200(lVar10,uVar5,psVar4,puVar18); local_60 = ppuVar8; FUN_14002e6e0((int *)ppuVar8); local_58 = CONCAT31(local_58._1_3_,1); piVar1 = (int *)(psVar19 + -2); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_1400302f0(psVar19 + -4); } FUN_14002e770((longlong)ppuVar8); } } uVar5 = FUN_14002e770((longlong)piVar3); return CONCAT71((int7)((ulonglong)uVar5 >> 8),1); }