361 lines
13 KiB
C
361 lines
13 KiB
C
/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
|
|
* Ghidra 12.1.2 decompiler output for 0x1400b4730 FUN_1400b4730
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
|
|
void FUN_1400b4730(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_1401555a0 ^ (ulonglong)auStackY_628;
|
|
local_5f8 = Proud::AddrPort::vftable;
|
|
plVar11 = (longlong *)0x0;
|
|
iVar4 = 0;
|
|
local_5f0 = 0;
|
|
local_5ec = 0;
|
|
uVar5 = FUN_140081090(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_14002a670((longlong *)&local_488,"RemotePeer.cpp",3);
|
|
FUN_140072eb0((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_140080600(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_14002a670((longlong *)&local_158,"RemotePeer.cpp",3);
|
|
FUN_140072eb0((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_140080600(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_14002a670((longlong *)&local_378,"RemotePeer.cpp",3);
|
|
FUN_140072eb0((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_140081030(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_140070860(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_1400302f0(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_140033b30((longlong)&local_5e8,(longlong *)&local_5a0,uVar6,param_4);
|
|
plVar7 = FUN_140033b30((longlong)&local_5f8,(longlong *)&local_5c8,uVar6,param_4);
|
|
puVar13 = (undefined *)*plVar7;
|
|
if ((undefined *)*plVar7 == (undefined *)0x0) {
|
|
puVar13 = PTR_DAT_140155010;
|
|
}
|
|
puVar12 = &DAT_14010ca60;
|
|
FUN_140072eb0((longlong)param_1,1,L"P2P Holepunch 수신 OK. ABS=%s ABR=%s",puVar13);
|
|
if (((local_5c8 != (undefined *)0x0) && (local_5c8 != PTR_DAT_140155010)) &&
|
|
(local_5c8 + -8 != (undefined *)0x0)) {
|
|
param_1 = (longlong *)FUN_140030200(param_1,PTR_DAT_140155010,puVar12,puVar13);
|
|
local_518 = param_1;
|
|
FUN_14002e6e0((int *)param_1);
|
|
local_510 = 1;
|
|
piVar1 = (int *)(local_5c8 + -4);
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 == 0) {
|
|
FUN_1400302f0(local_5c8 + -8);
|
|
}
|
|
FUN_14002e770((longlong)param_1);
|
|
}
|
|
local_5c8 = PTR_DAT_140155010;
|
|
if (((local_5a0 != (undefined *)0x0) && (local_5a0 != PTR_DAT_140155010)) &&
|
|
(local_5a0 + -8 != (undefined *)0x0)) {
|
|
piVar8 = (int *)FUN_140030200(param_1,PTR_DAT_140155010,puVar12,puVar13);
|
|
local_4f8 = piVar8;
|
|
FUN_14002e6e0(piVar8);
|
|
local_4f0 = 1;
|
|
piVar1 = (int *)(local_5a0 + -4);
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 == 0) {
|
|
FUN_1400302f0(local_5a0 + -8);
|
|
}
|
|
FUN_14002e770((longlong)piVar8);
|
|
}
|
|
}
|
|
FUN_140033290((longlong)(plVar14 + 0xae));
|
|
uVar6 = FUN_140033290((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_140033290((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_1400b3dd0(plVar7,(longlong)&local_568,(undefined8 *)&local_4d8,
|
|
(longlong)&local_558,(longlong)&local_598);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
uVar6 = FUN_140033290((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_1400b3dd0(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_1400b3dd0(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_14002a670((longlong *)&local_268,"RemotePeer.cpp",3);
|
|
FUN_140072eb0((longlong)param_1,1,L"Holepunch1 실패: %s(%d)",local_268);
|
|
puVar9 = local_260;
|
|
_Memory = local_268;
|
|
}
|
|
}
|
|
}
|
|
if (_Memory != puVar9) {
|
|
free(_Memory);
|
|
}
|
|
return;
|
|
}
|
|
|