251 lines
6.9 KiB
C
251 lines
6.9 KiB
C
/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
|
|
* Ghidra 12.1.2 decompiler output for 0x14001bbc0 FUN_14001bbc0
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
|
|
void FUN_14001bbc0(int *param_1,int param_2,longlong param_3,uint *param_4)
|
|
|
|
{
|
|
int *piVar1;
|
|
LPCWSTR pWVar2;
|
|
undefined8 uVar3;
|
|
LPCWSTR pWVar4;
|
|
int iVar5;
|
|
longlong *plVar6;
|
|
char *****pppppcVar7;
|
|
longlong lVar8;
|
|
char *pcVar9;
|
|
uint uVar10;
|
|
uint uVar11;
|
|
ulonglong uVar12;
|
|
uint uVar13;
|
|
uint uVar14;
|
|
uint uVar15;
|
|
uint uVar16;
|
|
undefined1 auStack_418 [32];
|
|
uint local_3f8;
|
|
uint local_3f0;
|
|
uint local_3e8;
|
|
uint local_3e0;
|
|
LPCWSTR local_3d8;
|
|
int local_3d0;
|
|
int *local_3c8;
|
|
undefined1 local_3c0;
|
|
undefined8 local_3b8;
|
|
char ****local_3b0 [2];
|
|
char ***local_3a0;
|
|
char ***local_398;
|
|
undefined1 local_388;
|
|
undefined7 uStack_387;
|
|
undefined8 local_378;
|
|
ulonglong local_370;
|
|
ushort local_360 [8];
|
|
undefined1 local_350 [6];
|
|
ushort local_34a;
|
|
undefined1 local_340 [6];
|
|
ushort local_33a;
|
|
undefined1 local_330 [2];
|
|
ushort local_32e;
|
|
undefined1 local_320 [12];
|
|
ushort local_314;
|
|
ushort local_310 [8];
|
|
undefined1 local_300 [10];
|
|
ushort local_2f6;
|
|
undefined1 local_2f0 [10];
|
|
ushort local_2e6;
|
|
undefined1 local_2e0 [2];
|
|
ushort local_2de;
|
|
undefined1 local_2d0 [8];
|
|
ushort local_2c8;
|
|
undefined1 local_2c0 [8];
|
|
ushort local_2b8;
|
|
undefined1 local_2b0 [12];
|
|
ushort local_2a4;
|
|
void *local_2a0 [3];
|
|
ulonglong local_288;
|
|
undefined4 local_278;
|
|
undefined4 local_274;
|
|
char local_270 [520];
|
|
ulonglong local_68;
|
|
|
|
local_3b8 = 0xfffffffffffffffe;
|
|
local_68 = DAT_14016f5a0 ^ (ulonglong)auStack_418;
|
|
local_3d0 = param_2;
|
|
local_3c8 = param_1;
|
|
memset(local_270,0,0x200);
|
|
local_278 = 0x208;
|
|
local_274 = 0x4e2e;
|
|
local_398 = (char ***)0xf;
|
|
local_3a0 = (char ***)0x0;
|
|
local_3b0[0] = (char ****)((ulonglong)local_3b0[0] & 0xffffffffffffff00);
|
|
plVar6 = FUN_140010200((longlong *)local_2a0,&DAT_140175048);
|
|
pppppcVar7 = (char *****)FUN_1400102b0((undefined8 *)&local_388,plVar6);
|
|
if (local_3b0 != pppppcVar7) {
|
|
if ((char ****)0xf < local_398) {
|
|
operator_delete(local_3b0[0]);
|
|
}
|
|
local_398 = (char ***)0xf;
|
|
local_3a0 = (char ***)0x0;
|
|
local_3b0[0] = (char ****)((ulonglong)local_3b0[0] & 0xffffffffffffff00);
|
|
if (pppppcVar7[3] < (char ****)0x10) {
|
|
memmove(local_3b0,pppppcVar7,(longlong)pppppcVar7[2] + 1);
|
|
}
|
|
else {
|
|
local_3b0[0] = *pppppcVar7;
|
|
*pppppcVar7 = (char ****)0x0;
|
|
}
|
|
local_3a0 = (char ***)pppppcVar7[2];
|
|
local_398 = (char ***)pppppcVar7[3];
|
|
pppppcVar7[3] = (char ****)0xf;
|
|
pppppcVar7[2] = (char ****)0x0;
|
|
*(undefined1 *)pppppcVar7 = 0;
|
|
}
|
|
if (0xf < local_370) {
|
|
operator_delete((void *)CONCAT71(uStack_387,local_388));
|
|
}
|
|
local_370 = 0xf;
|
|
local_378 = 0;
|
|
local_388 = 0;
|
|
if (0xf < local_288) {
|
|
operator_delete(local_2a0[0]);
|
|
}
|
|
FUN_14000c480((ulonglong *)local_3b0,"<server-status>",0xf);
|
|
FUN_14000f580((longlong *)local_3b0,(ulonglong)*(uint *)(param_3 + 0xc),"world");
|
|
FUN_14000fa00((longlong *)local_3b0,(LPCWSTR)(param_3 + 0x20),"name");
|
|
FUN_14000f580((longlong *)local_3b0,(ulonglong)*param_4,"usercount");
|
|
FUN_14000f580((longlong *)local_3b0,(ulonglong)param_4[1],"servercount");
|
|
FUN_14000f580((longlong *)local_3b0,(ulonglong)param_4[2],"frame");
|
|
FUN_14000f580((longlong *)local_3b0,(ulonglong)(byte)param_4[6],"open");
|
|
FUN_14000f580((longlong *)local_3b0,(ulonglong)*(uint *)(param_3 + 0x10),"version");
|
|
uVar16 = param_4[4];
|
|
if (uVar16 == 0) {
|
|
pcVar9 = "DISCONNECT";
|
|
}
|
|
else if (uVar16 == 1) {
|
|
pcVar9 = "LOADING";
|
|
}
|
|
else if (uVar16 == 2) {
|
|
pcVar9 = "BAD";
|
|
}
|
|
else {
|
|
if (uVar16 != 3) goto LAB_14001be04;
|
|
pcVar9 = "GOOD";
|
|
}
|
|
FUN_14000f7e0((longlong *)local_3b0,pcVar9,"state");
|
|
LAB_14001be04:
|
|
uVar3 = *(undefined8 *)(param_3 + 0x18);
|
|
lVar8 = (**(code **)(PTR_PTR_14016f508 + 0x18))(&PTR_PTR_14016f508);
|
|
local_3d8 = (LPCWSTR)(lVar8 + 0x18);
|
|
iVar5 = Ordinal_185(uVar3,local_320);
|
|
uVar15 = 0xffffffff;
|
|
uVar16 = (uint)local_314;
|
|
if (iVar5 == 0) {
|
|
uVar16 = uVar15;
|
|
}
|
|
iVar5 = Ordinal_185(uVar3,local_2f0);
|
|
uVar14 = (uint)local_2e6;
|
|
if (iVar5 == 0) {
|
|
uVar14 = uVar15;
|
|
}
|
|
iVar5 = Ordinal_185(uVar3,local_2d0);
|
|
uVar13 = (uint)local_2c8;
|
|
if (iVar5 == 0) {
|
|
uVar13 = uVar15;
|
|
}
|
|
iVar5 = Ordinal_185(uVar3,local_340);
|
|
uVar11 = (uint)local_33a;
|
|
if (iVar5 == 0) {
|
|
uVar11 = uVar15;
|
|
}
|
|
iVar5 = Ordinal_185(uVar3,local_2e0);
|
|
uVar10 = (uint)local_2de;
|
|
if (iVar5 == 0) {
|
|
uVar10 = uVar15;
|
|
}
|
|
iVar5 = Ordinal_185(uVar3,local_360);
|
|
uVar12 = (ulonglong)local_360[0];
|
|
if (iVar5 == 0) {
|
|
uVar12 = 0xffffffff;
|
|
}
|
|
local_3f8 = uVar11;
|
|
local_3f0 = uVar13;
|
|
local_3e8 = uVar14;
|
|
local_3e0 = uVar16;
|
|
FUN_14001c310((longlong *)&local_3d8,L"%d-%d-%d %d:%d:%d",uVar12,(ulonglong)uVar10);
|
|
FUN_14000fa00((longlong *)local_3b0,local_3d8,"starttime");
|
|
uVar3 = *(undefined8 *)(param_4 + 8);
|
|
iVar5 = Ordinal_185(uVar3,local_2b0);
|
|
uVar16 = (uint)local_2a4;
|
|
if (iVar5 == 0) {
|
|
uVar16 = uVar15;
|
|
}
|
|
iVar5 = Ordinal_185(uVar3,local_300);
|
|
uVar14 = (uint)local_2f6;
|
|
if (iVar5 == 0) {
|
|
uVar14 = uVar15;
|
|
}
|
|
iVar5 = Ordinal_185(uVar3,local_2c0);
|
|
uVar13 = (uint)local_2b8;
|
|
if (iVar5 == 0) {
|
|
uVar13 = uVar15;
|
|
}
|
|
iVar5 = Ordinal_185(uVar3,local_350);
|
|
uVar11 = (uint)local_34a;
|
|
if (iVar5 == 0) {
|
|
uVar11 = uVar15;
|
|
}
|
|
iVar5 = Ordinal_185(uVar3,local_330);
|
|
uVar10 = (uint)local_32e;
|
|
if (iVar5 == 0) {
|
|
uVar10 = uVar15;
|
|
}
|
|
iVar5 = Ordinal_185(uVar3,local_310);
|
|
uVar12 = (ulonglong)local_310[0];
|
|
if (iVar5 == 0) {
|
|
uVar12 = 0xffffffff;
|
|
}
|
|
local_3f8 = uVar11;
|
|
local_3f0 = uVar13;
|
|
local_3e8 = uVar14;
|
|
local_3e0 = uVar16;
|
|
FUN_14001c310((longlong *)&local_3d8,L"%d-%d-%d %d:%d:%d",uVar12,(ulonglong)uVar10);
|
|
pWVar4 = local_3d8;
|
|
FUN_14000fa00((longlong *)local_3b0,local_3d8,"refreshtime");
|
|
FUN_14000c480((ulonglong *)local_3b0,"</server-status>",0x10);
|
|
if (local_3a0 < (char ****)0x400) {
|
|
pppppcVar7 = local_3b0;
|
|
if ((char ****)0xf < local_398) {
|
|
pppppcVar7 = (char *****)local_3b0[0];
|
|
}
|
|
strncpy(local_270,(char *)pppppcVar7,(size_t)local_3a0);
|
|
}
|
|
else {
|
|
printf("PWE_RESP_STATUS_SERVER - Msg Size Full!\n");
|
|
}
|
|
lVar8 = *(longlong *)(local_3c8 + 0x16);
|
|
if (lVar8 != 0) {
|
|
piVar1 = (int *)(lVar8 + 0x70);
|
|
local_3c8 = piVar1;
|
|
FUN_14003d040(piVar1);
|
|
local_3c0 = 1;
|
|
lVar8 = FUN_14003c450(lVar8,local_3d0);
|
|
if (lVar8 != 0) {
|
|
Ordinal_19(*(undefined8 *)(lVar8 + 8),&local_278,0x208,0);
|
|
}
|
|
FUN_14003d0d0((longlong)piVar1);
|
|
}
|
|
LOCK();
|
|
pWVar2 = pWVar4 + -4;
|
|
iVar5 = *(int *)pWVar2;
|
|
*(int *)pWVar2 = *(int *)pWVar2 + -1;
|
|
UNLOCK();
|
|
if (iVar5 + -1 < 1) {
|
|
(**(code **)(**(longlong **)(pWVar4 + -0xc) + 8))();
|
|
}
|
|
if ((char ****)0xf < local_398) {
|
|
operator_delete(local_3b0[0]);
|
|
}
|
|
return;
|
|
}
|
|
|